Loading cmds/atrace/Android.bp +3 −0 Original line number Original line Diff line number Diff line Loading @@ -14,6 +14,9 @@ cc_binary { "libz", "libz", "libbase", "libbase", ], ], static_libs: [ "libpdx_default_transport", ], init_rc: ["atrace.rc"], init_rc: ["atrace.rc"], Loading cmds/atrace/atrace.cpp +22 −0 Original line number Original line Diff line number Diff line Loading @@ -40,6 +40,7 @@ #include <android/hidl/manager/1.0/IServiceManager.h> #include <android/hidl/manager/1.0/IServiceManager.h> #include <hidl/ServiceManagement.h> #include <hidl/ServiceManagement.h> #include <pdx/default_transport/service_utility.h> #include <utils/String8.h> #include <utils/String8.h> #include <utils/Timers.h> #include <utils/Timers.h> #include <utils/Tokenizer.h> #include <utils/Tokenizer.h> Loading @@ -50,6 +51,7 @@ #include <android-base/stringprintf.h> #include <android-base/stringprintf.h> using namespace android; using namespace android; using pdx::default_transport::ServiceUtility; using std::string; using std::string; Loading @@ -61,6 +63,7 @@ const char* k_traceTagsProperty = "debug.atrace.tags.enableflags"; const char* k_traceAppsNumberProperty = "debug.atrace.app_number"; const char* k_traceAppsNumberProperty = "debug.atrace.app_number"; const char* k_traceAppsPropertyTemplate = "debug.atrace.app_%d"; const char* k_traceAppsPropertyTemplate = "debug.atrace.app_%d"; const char* k_coreServiceCategory = "core_services"; const char* k_coreServiceCategory = "core_services"; const char* k_pdxServiceCategory = "pdx"; const char* k_coreServicesProp = "ro.atrace.core.services"; const char* k_coreServicesProp = "ro.atrace.core.services"; typedef enum { OPT, REQ } requiredness ; typedef enum { OPT, REQ } requiredness ; Loading Loading @@ -114,6 +117,7 @@ static const TracingCategory k_categories[] = { { "network", "Network", ATRACE_TAG_NETWORK, { } }, { "network", "Network", ATRACE_TAG_NETWORK, { } }, { "adb", "ADB", ATRACE_TAG_ADB, { } }, { "adb", "ADB", ATRACE_TAG_ADB, { } }, { k_coreServiceCategory, "Core services", 0, { } }, { k_coreServiceCategory, "Core services", 0, { } }, { k_pdxServiceCategory, "PDX services", 0, { } }, { "sched", "CPU Scheduling", 0, { { "sched", "CPU Scheduling", 0, { { REQ, "events/sched/sched_switch/enable" }, { REQ, "events/sched/sched_switch/enable" }, { REQ, "events/sched/sched_wakeup/enable" }, { REQ, "events/sched/sched_wakeup/enable" }, Loading Loading @@ -209,6 +213,7 @@ static const char* g_debugAppCmdLine = ""; static const char* g_outputFile = nullptr; static const char* g_outputFile = nullptr; /* Global state */ /* Global state */ static bool g_tracePdx = false; static bool g_traceAborted = false; static bool g_traceAborted = false; static bool g_categoryEnables[arraysize(k_categories)] = {}; static bool g_categoryEnables[arraysize(k_categories)] = {}; static std::string g_traceFolder; static std::string g_traceFolder; Loading Loading @@ -368,6 +373,10 @@ static bool isCategorySupported(const TracingCategory& category) return !android::base::GetProperty(k_coreServicesProp, "").empty(); return !android::base::GetProperty(k_coreServicesProp, "").empty(); } } if (strcmp(category.name, k_pdxServiceCategory) == 0) { return true; } bool ok = category.tags != 0; bool ok = category.tags != 0; for (int i = 0; i < MAX_SYS_FILES; i++) { for (int i = 0; i < MAX_SYS_FILES; i++) { const char* path = category.sysfiles[i].path; const char* path = category.sysfiles[i].path; Loading Loading @@ -790,6 +799,11 @@ static bool setUpTrace() if (strcmp(k_categories[i].name, k_coreServiceCategory) == 0) { if (strcmp(k_categories[i].name, k_coreServiceCategory) == 0) { coreServicesTagEnabled = g_categoryEnables[i]; coreServicesTagEnabled = g_categoryEnables[i]; } } // Set whether to poke PDX services in this session. if (strcmp(k_categories[i].name, k_pdxServiceCategory) == 0) { g_tracePdx = g_categoryEnables[i]; } } } std::string packageList(g_debugAppCmdLine); std::string packageList(g_debugAppCmdLine); Loading @@ -803,6 +817,10 @@ static bool setUpTrace() ok &= pokeBinderServices(); ok &= pokeBinderServices(); pokeHalServices(); pokeHalServices(); if (g_tracePdx) { ok &= ServiceUtility::PokeServices(); } // Disable all the sysfs enables. This is done as a separate loop from // 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. // the enables to allow the same enable to exist in multiple categories. ok &= disableKernelTraceEvents(); ok &= disableKernelTraceEvents(); Loading Loading @@ -840,6 +858,10 @@ static void cleanUpTrace() clearAppProperties(); clearAppProperties(); pokeBinderServices(); pokeBinderServices(); if (g_tracePdx) { ServiceUtility::PokeServices(); } // Set the options back to their defaults. // Set the options back to their defaults. setTraceOverwriteEnable(true); setTraceOverwriteEnable(true); setTraceBufferSizeKB(1); setTraceBufferSizeKB(1); Loading Loading
cmds/atrace/Android.bp +3 −0 Original line number Original line Diff line number Diff line Loading @@ -14,6 +14,9 @@ cc_binary { "libz", "libz", "libbase", "libbase", ], ], static_libs: [ "libpdx_default_transport", ], init_rc: ["atrace.rc"], init_rc: ["atrace.rc"], Loading
cmds/atrace/atrace.cpp +22 −0 Original line number Original line Diff line number Diff line Loading @@ -40,6 +40,7 @@ #include <android/hidl/manager/1.0/IServiceManager.h> #include <android/hidl/manager/1.0/IServiceManager.h> #include <hidl/ServiceManagement.h> #include <hidl/ServiceManagement.h> #include <pdx/default_transport/service_utility.h> #include <utils/String8.h> #include <utils/String8.h> #include <utils/Timers.h> #include <utils/Timers.h> #include <utils/Tokenizer.h> #include <utils/Tokenizer.h> Loading @@ -50,6 +51,7 @@ #include <android-base/stringprintf.h> #include <android-base/stringprintf.h> using namespace android; using namespace android; using pdx::default_transport::ServiceUtility; using std::string; using std::string; Loading @@ -61,6 +63,7 @@ const char* k_traceTagsProperty = "debug.atrace.tags.enableflags"; const char* k_traceAppsNumberProperty = "debug.atrace.app_number"; const char* k_traceAppsNumberProperty = "debug.atrace.app_number"; const char* k_traceAppsPropertyTemplate = "debug.atrace.app_%d"; const char* k_traceAppsPropertyTemplate = "debug.atrace.app_%d"; const char* k_coreServiceCategory = "core_services"; const char* k_coreServiceCategory = "core_services"; const char* k_pdxServiceCategory = "pdx"; const char* k_coreServicesProp = "ro.atrace.core.services"; const char* k_coreServicesProp = "ro.atrace.core.services"; typedef enum { OPT, REQ } requiredness ; typedef enum { OPT, REQ } requiredness ; Loading Loading @@ -114,6 +117,7 @@ static const TracingCategory k_categories[] = { { "network", "Network", ATRACE_TAG_NETWORK, { } }, { "network", "Network", ATRACE_TAG_NETWORK, { } }, { "adb", "ADB", ATRACE_TAG_ADB, { } }, { "adb", "ADB", ATRACE_TAG_ADB, { } }, { k_coreServiceCategory, "Core services", 0, { } }, { k_coreServiceCategory, "Core services", 0, { } }, { k_pdxServiceCategory, "PDX services", 0, { } }, { "sched", "CPU Scheduling", 0, { { "sched", "CPU Scheduling", 0, { { REQ, "events/sched/sched_switch/enable" }, { REQ, "events/sched/sched_switch/enable" }, { REQ, "events/sched/sched_wakeup/enable" }, { REQ, "events/sched/sched_wakeup/enable" }, Loading Loading @@ -209,6 +213,7 @@ static const char* g_debugAppCmdLine = ""; static const char* g_outputFile = nullptr; static const char* g_outputFile = nullptr; /* Global state */ /* Global state */ static bool g_tracePdx = false; static bool g_traceAborted = false; static bool g_traceAborted = false; static bool g_categoryEnables[arraysize(k_categories)] = {}; static bool g_categoryEnables[arraysize(k_categories)] = {}; static std::string g_traceFolder; static std::string g_traceFolder; Loading Loading @@ -368,6 +373,10 @@ static bool isCategorySupported(const TracingCategory& category) return !android::base::GetProperty(k_coreServicesProp, "").empty(); return !android::base::GetProperty(k_coreServicesProp, "").empty(); } } if (strcmp(category.name, k_pdxServiceCategory) == 0) { return true; } bool ok = category.tags != 0; bool ok = category.tags != 0; for (int i = 0; i < MAX_SYS_FILES; i++) { for (int i = 0; i < MAX_SYS_FILES; i++) { const char* path = category.sysfiles[i].path; const char* path = category.sysfiles[i].path; Loading Loading @@ -790,6 +799,11 @@ static bool setUpTrace() if (strcmp(k_categories[i].name, k_coreServiceCategory) == 0) { if (strcmp(k_categories[i].name, k_coreServiceCategory) == 0) { coreServicesTagEnabled = g_categoryEnables[i]; coreServicesTagEnabled = g_categoryEnables[i]; } } // Set whether to poke PDX services in this session. if (strcmp(k_categories[i].name, k_pdxServiceCategory) == 0) { g_tracePdx = g_categoryEnables[i]; } } } std::string packageList(g_debugAppCmdLine); std::string packageList(g_debugAppCmdLine); Loading @@ -803,6 +817,10 @@ static bool setUpTrace() ok &= pokeBinderServices(); ok &= pokeBinderServices(); pokeHalServices(); pokeHalServices(); if (g_tracePdx) { ok &= ServiceUtility::PokeServices(); } // Disable all the sysfs enables. This is done as a separate loop from // 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. // the enables to allow the same enable to exist in multiple categories. ok &= disableKernelTraceEvents(); ok &= disableKernelTraceEvents(); Loading Loading @@ -840,6 +858,10 @@ static void cleanUpTrace() clearAppProperties(); clearAppProperties(); pokeBinderServices(); pokeBinderServices(); if (g_tracePdx) { ServiceUtility::PokeServices(); } // Set the options back to their defaults. // Set the options back to their defaults. setTraceOverwriteEnable(true); setTraceOverwriteEnable(true); setTraceBufferSizeKB(1); setTraceBufferSizeKB(1); Loading