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
diff --git a/libcutils/trace.c b/libcutils/trace.c
index 15c8a98..152ea61 100644
--- a/libcutils/trace.c
+++ b/libcutils/trace.c
@@ -33,6 +33,7 @@
 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 @@
     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);