summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJamie Gennis <jgennis@google.com>2013-04-16 22:12:47 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2013-04-16 22:12:47 +0000
commit2553825797c40b14981b1b24e44475e07b02267f (patch)
tree6d0e22cf58988fcd5e96fa0edeb60b36ce4b4daf
parentebcf93e3bf92bf46c54c8e0f2ec8936bb2db6aea (diff)
parentb13ea45a04a463646a7098b03f9f64d91b29d2b9 (diff)
downloadcore-2553825797c40b14981b1b24e44475e07b02267f.tar.gz
Merge "cutils: add a way to disable tracing for a process" into jb-mr2-dev
-rw-r--r--include/cutils/trace.h8
-rw-r--r--libcutils/trace.c40
2 files changed, 36 insertions, 12 deletions
diff --git a/include/cutils/trace.h b/include/cutils/trace.h
index 15f8fb9f3..9b564e25e 100644
--- a/include/cutils/trace.h
+++ b/include/cutils/trace.h
@@ -108,11 +108,17 @@ void atrace_update_tags();
void atrace_set_debuggable(bool debuggable);
/**
+ * Set whether tracing is enabled for the current process. This is used to
+ * prevent tracing within the Zygote process.
+ */
+void atrace_set_tracing_enabled(bool enabled);
+
+/**
* Flag indicating whether setup has been completed, initialized to 0.
* Nonzero indicates setup has completed.
* Note: This does NOT indicate whether or not setup was successful.
*/
-extern int32_t atrace_is_ready;
+extern volatile int32_t atrace_is_ready;
/**
* Set of ATRACE_TAG flags to trace for, initialized to ATRACE_TAG_NOT_READY.
diff --git a/libcutils/trace.c b/libcutils/trace.c
index 047f88941..9754a44fa 100644
--- a/libcutils/trace.c
+++ b/libcutils/trace.c
@@ -30,12 +30,13 @@
#define LOG_TAG "cutils-trace"
#include <cutils/log.h>
-int32_t atrace_is_ready = 0;
-int atrace_marker_fd = -1;
-uint64_t atrace_enabled_tags = ATRACE_TAG_NOT_READY;
-static bool atrace_is_debuggable = false;
-static pthread_once_t atrace_once_control = PTHREAD_ONCE_INIT;
-static pthread_mutex_t atrace_tags_mutex = PTHREAD_MUTEX_INITIALIZER;
+volatile int32_t atrace_is_ready = 0;
+int atrace_marker_fd = -1;
+uint64_t atrace_enabled_tags = ATRACE_TAG_NOT_READY;
+static bool atrace_is_debuggable = false;
+static volatile int32_t atrace_is_enabled = 1;
+static pthread_once_t atrace_once_control = PTHREAD_ONCE_INIT;
+static pthread_mutex_t atrace_tags_mutex = PTHREAD_MUTEX_INITIALIZER;
// Set whether this process is debuggable, which determines whether
// application-level tracing is allowed when the ro.debuggable system property
@@ -46,9 +47,18 @@ void atrace_set_debuggable(bool debuggable)
atrace_update_tags();
}
+// Set whether tracing is enabled in this process. This is used to prevent
+// the Zygote process from tracing.
+void atrace_set_tracing_enabled(bool enabled)
+{
+ android_atomic_release_store(enabled ? 1 : 0, &atrace_is_enabled);
+ atrace_update_tags();
+}
+
// Check whether the given command line matches one of the comma-separated
// values listed in the app_cmdlines property.
-static bool atrace_is_cmdline_match(const char* cmdline) {
+static bool atrace_is_cmdline_match(const char* cmdline)
+{
char value[PROPERTY_VALUE_MAX];
char* start = value;
@@ -140,10 +150,18 @@ 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);
+ if (android_atomic_acquire_load(&atrace_is_enabled)) {
+ tags = atrace_get_property();
+ pthread_mutex_lock(&atrace_tags_mutex);
+ atrace_enabled_tags = tags;
+ pthread_mutex_unlock(&atrace_tags_mutex);
+ } else {
+ // Tracing is disabled for this process, so we simply don't
+ // initialize the tags.
+ pthread_mutex_lock(&atrace_tags_mutex);
+ atrace_enabled_tags = ATRACE_TAG_NOT_READY;
+ pthread_mutex_unlock(&atrace_tags_mutex);
+ }
}
}