diff options
author | Jamie Gennis <jgennis@google.com> | 2013-03-27 15:50:58 -0700 |
---|---|---|
committer | Jamie Gennis <jgennis@google.com> | 2013-03-28 13:53:45 -0700 |
commit | f7f29c8f9d56dc908e501ae789e418a9974b6bce (patch) | |
tree | b432b1b06ed1ab6dae1f5d2b1879ac003de51544 /cmds/atrace | |
parent | c9a4e2f7dc6cc0843d1b029a9860f4786bb6dbd8 (diff) | |
download | frameworks_native-f7f29c8f9d56dc908e501ae789e418a9974b6bce.zip frameworks_native-f7f29c8f9d56dc908e501ae789e418a9974b6bce.tar.gz frameworks_native-f7f29c8f9d56dc908e501ae789e418a9974b6bce.tar.bz2 |
atrace: add support for app tracing
This change adds support for the -a command line argument to atrace. This
argument sets the comma separated list of application names (i.e.
/proc/self/cmdline values) for which to enable application-level tracing.
Change-Id: I812d57c4cdc581943247229413f09b7e1adc10d0
Diffstat (limited to 'cmds/atrace')
-rw-r--r-- | cmds/atrace/atrace.cpp | 29 |
1 files changed, 26 insertions, 3 deletions
diff --git a/cmds/atrace/atrace.cpp b/cmds/atrace/atrace.cpp index b417383..76ba81f 100644 --- a/cmds/atrace/atrace.cpp +++ b/cmds/atrace/atrace.cpp @@ -42,6 +42,7 @@ using namespace android; enum { MAX_SYS_FILES = 8 }; const char* k_traceTagsProperty = "debug.atrace.tags.enableflags"; +const char* k_traceAppCmdlineProperty = "debug.atrace.app_cmdlines"; typedef enum { OPT, REQ } requiredness ; @@ -118,6 +119,7 @@ static bool g_compress = false; static bool g_nohup = false; static int g_initialSleepSecs = 0; static const char* g_kernelTraceFuncs = NULL; +static const char* g_debugAppCmdLine = ""; /* Global state */ static bool g_traceAborted = false; @@ -365,7 +367,18 @@ static bool setTagsProperty(uint64_t tags) fprintf(stderr, "error setting trace tags system property\n"); return false; } - return pokeBinderServices(); + return true; +} + +// Set the system property that indicates which apps should perform +// application-level tracing. +static bool setAppCmdlineProperty(const char* cmdline) +{ + if (property_set(k_traceAppCmdlineProperty, cmdline) < 0) { + fprintf(stderr, "error setting trace app system property\n"); + return false; + } + return true; } // Disable all /sys/ enable files. @@ -488,6 +501,8 @@ static bool setUpTrace() } } ok &= setTagsProperty(tags); + ok &= setAppCmdlineProperty(g_debugAppCmdLine); + ok &= pokeBinderServices(); // Disable all the sysfs enables. This is done as a separate loop from // the enables to allow the same enable to exist in multiple categories. @@ -521,8 +536,10 @@ static void cleanUpTrace() // Disable all tracing that we're able to. disableKernelTraceEvents(); - // Disable all the trace tags. + // Reset the system properties. setTagsProperty(0); + setAppCmdlineProperty(""); + pokeBinderServices(); // Set the options back to their defaults. setTraceOverwriteEnable(true); @@ -700,6 +717,8 @@ static void showHelp(const char *cmd) { fprintf(stderr, "usage: %s [options] [categories...]\n", cmd); fprintf(stderr, "options include:\n" + " -a appname enable app-level tracing for a comma " + "separated list of cmdlines\n" " -b N use a trace buffer size of N KB\n" " -c trace into a circular buffer\n" " -k fname,... trace the listed kernel functions\n" @@ -739,7 +758,7 @@ int main(int argc, char **argv) { 0, 0, 0, 0 } }; - ret = getopt_long(argc, argv, "b:ck:ns:t:z", + ret = getopt_long(argc, argv, "a:b:ck:ns:t:z", long_options, &option_index); if (ret < 0) { @@ -753,6 +772,10 @@ int main(int argc, char **argv) } switch(ret) { + case 'a': + g_debugAppCmdLine = optarg; + break; + case 'b': g_traceBufferSizeKB = atoi(optarg); break; |