am 25538257: Merge "cutils: add a way to disable tracing for a process" into jb-mr2-dev

* commit '2553825797c40b14981b1b24e44475e07b02267f':
  cutils: add a way to disable tracing for a process
This commit is contained in:
Jamie Gennis 2013-04-16 15:18:29 -07:00 committed by Android Git Automerger
commit b7b2c71bf8
2 changed files with 36 additions and 12 deletions

View file

@ -107,12 +107,18 @@ void atrace_update_tags();
*/ */
void atrace_set_debuggable(bool debuggable); 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. * Flag indicating whether setup has been completed, initialized to 0.
* Nonzero indicates setup has completed. * Nonzero indicates setup has completed.
* Note: This does NOT indicate whether or not setup was successful. * 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. * Set of ATRACE_TAG flags to trace for, initialized to ATRACE_TAG_NOT_READY.

View file

@ -30,12 +30,13 @@
#define LOG_TAG "cutils-trace" #define LOG_TAG "cutils-trace"
#include <cutils/log.h> #include <cutils/log.h>
int32_t atrace_is_ready = 0; volatile int32_t atrace_is_ready = 0;
int atrace_marker_fd = -1; int atrace_marker_fd = -1;
uint64_t atrace_enabled_tags = ATRACE_TAG_NOT_READY; uint64_t atrace_enabled_tags = ATRACE_TAG_NOT_READY;
static bool atrace_is_debuggable = false; static bool atrace_is_debuggable = false;
static pthread_once_t atrace_once_control = PTHREAD_ONCE_INIT; static volatile int32_t atrace_is_enabled = 1;
static pthread_mutex_t atrace_tags_mutex = PTHREAD_MUTEX_INITIALIZER; 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 // Set whether this process is debuggable, which determines whether
// application-level tracing is allowed when the ro.debuggable system property // application-level tracing is allowed when the ro.debuggable system property
@ -46,9 +47,18 @@ void atrace_set_debuggable(bool debuggable)
atrace_update_tags(); 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 // Check whether the given command line matches one of the comma-separated
// values listed in the app_cmdlines property. // 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 value[PROPERTY_VALUE_MAX];
char* start = value; char* start = value;
@ -140,10 +150,18 @@ void atrace_update_tags()
{ {
uint64_t tags; uint64_t tags;
if (CC_UNLIKELY(android_atomic_acquire_load(&atrace_is_ready))) { if (CC_UNLIKELY(android_atomic_acquire_load(&atrace_is_ready))) {
tags = atrace_get_property(); if (android_atomic_acquire_load(&atrace_is_enabled)) {
pthread_mutex_lock(&atrace_tags_mutex); tags = atrace_get_property();
atrace_enabled_tags = tags; pthread_mutex_lock(&atrace_tags_mutex);
pthread_mutex_unlock(&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);
}
} }
} }