From e7bb7bca4f4036c213763673627e1eb6c2c2fdd6 Mon Sep 17 00:00:00 2001 From: Alex Ray Date: Tue, 20 Nov 2012 01:39:09 -0800 Subject: [PATCH] cutils: trace: add atrace_update_tags() Adds a function to read the current trace system property value, and sets the trace tags to it, do be used as a sysprop change callback. Change-Id: Ia6336652173aa5b07188898736c2c795a69fe79a --- include/cutils/trace.h | 6 ++++++ libcutils/trace.c | 13 +++++++++++++ 2 files changed, 19 insertions(+) diff --git a/include/cutils/trace.h b/include/cutils/trace.h index 7fdb3210c..386966250 100644 --- a/include/cutils/trace.h +++ b/include/cutils/trace.h @@ -85,6 +85,12 @@ __BEGIN_DECLS */ void atrace_setup(); +/** + * If tracing is ready, set atrace_enabled_tags to the system property + * debug.atrace.tags.enableflags. Can be used as a sysprop change callback. + */ +void atrace_update_tags(); + /** * Flag indicating whether setup has been completed, initialized to 0. * Nonzero indicates setup has completed. diff --git a/libcutils/trace.c b/libcutils/trace.c index 15c8a98a2..152ea6157 100644 --- a/libcutils/trace.c +++ b/libcutils/trace.c @@ -33,6 +33,7 @@ int32_t atrace_is_ready = 0; int atrace_marker_fd = -1; uint64_t atrace_enabled_tags = ATRACE_TAG_NOT_READY; static pthread_once_t atrace_once_control = PTHREAD_ONCE_INIT; +static pthread_mutex_t atrace_tags_mutex = PTHREAD_MUTEX_INITIALIZER; // Read the sysprop and return the value tags should be set to static uint64_t atrace_get_property() @@ -54,6 +55,18 @@ static uint64_t atrace_get_property() return (tags | ATRACE_TAG_ALWAYS) & ATRACE_TAG_VALID_MASK; } +// Update tags if tracing is ready. Useful as a sysprop change callback. +void atrace_update_tags() +{ + uint64_t tags; + if (CC_UNLIKELY(android_atomic_acquire_load(&atrace_is_ready))) { + tags = atrace_get_property(); + pthread_mutex_lock(&atrace_tags_mutex); + atrace_enabled_tags = tags; + pthread_mutex_unlock(&atrace_tags_mutex); + } +} + static void atrace_init_once() { atrace_marker_fd = open("/sys/kernel/debug/tracing/trace_marker", O_WRONLY);