Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e099ff59 authored by Paul Lawrence's avatar Paul Lawrence Committed by android-build-merger
Browse files

Merge "Update atrace to work with tracefs, not debugfs" am: a92616ec am:...

Merge "Update atrace to work with tracefs, not debugfs" am: a92616ec am: ea7c1845 am: 00613eaf
am: 3e715e99

Change-Id: I3b7c015a8fb37aa5b135e7b329f31c9bf4d31166
parents f70d82da 3e715e99
Loading
Loading
Loading
Loading
+103 −73
Original line number Diff line number Diff line
@@ -112,81 +112,81 @@ static const TracingCategory k_categories[] = {
    { "adb",        "ADB",              ATRACE_TAG_ADB, { } },
    { k_coreServiceCategory, "Core services", 0, { } },
    { "sched",      "CPU Scheduling",   0, {
        { REQ,      "/sys/kernel/debug/tracing/events/sched/sched_switch/enable" },
        { REQ,      "/sys/kernel/debug/tracing/events/sched/sched_wakeup/enable" },
        { OPT,      "/sys/kernel/debug/tracing/events/sched/sched_blocked_reason/enable" },
        { OPT,      "/sys/kernel/debug/tracing/events/sched/sched_cpu_hotplug/enable" },
        { REQ,      "events/sched/sched_switch/enable" },
        { REQ,      "events/sched/sched_wakeup/enable" },
        { OPT,      "events/sched/sched_blocked_reason/enable" },
        { OPT,      "events/sched/sched_cpu_hotplug/enable" },
    } },
    { "irq",        "IRQ Events",   0, {
        { REQ,      "/sys/kernel/debug/tracing/events/irq/enable" },
        { OPT,      "/sys/kernel/debug/tracing/events/ipi/enable" },
        { REQ,      "events/irq/enable" },
        { OPT,      "events/ipi/enable" },
    } },
    { "i2c",        "I2C Events",   0, {
        { REQ,      "/sys/kernel/debug/tracing/events/i2c/enable" },
        { REQ,      "/sys/kernel/debug/tracing/events/i2c/i2c_read/enable" },
        { REQ,      "/sys/kernel/debug/tracing/events/i2c/i2c_write/enable" },
        { REQ,      "/sys/kernel/debug/tracing/events/i2c/i2c_result/enable" },
        { REQ,      "/sys/kernel/debug/tracing/events/i2c/i2c_reply/enable" },
        { OPT,      "/sys/kernel/debug/tracing/events/i2c/smbus_read/enable" },
        { OPT,      "/sys/kernel/debug/tracing/events/i2c/smbus_write/enable" },
        { OPT,      "/sys/kernel/debug/tracing/events/i2c/smbus_result/enable" },
        { OPT,      "/sys/kernel/debug/tracing/events/i2c/smbus_reply/enable" },
        { REQ,      "events/i2c/enable" },
        { REQ,      "events/i2c/i2c_read/enable" },
        { REQ,      "events/i2c/i2c_write/enable" },
        { REQ,      "events/i2c/i2c_result/enable" },
        { REQ,      "events/i2c/i2c_reply/enable" },
        { OPT,      "events/i2c/smbus_read/enable" },
        { OPT,      "events/i2c/smbus_write/enable" },
        { OPT,      "events/i2c/smbus_result/enable" },
        { OPT,      "events/i2c/smbus_reply/enable" },
    } },
    { "freq",       "CPU Frequency",    0, {
        { REQ,      "/sys/kernel/debug/tracing/events/power/cpu_frequency/enable" },
        { OPT,      "/sys/kernel/debug/tracing/events/power/clock_set_rate/enable" },
        { OPT,      "/sys/kernel/debug/tracing/events/power/cpu_frequency_limits/enable" },
        { REQ,      "events/power/cpu_frequency/enable" },
        { OPT,      "events/power/clock_set_rate/enable" },
        { OPT,      "events/power/cpu_frequency_limits/enable" },
    } },
    { "membus",     "Memory Bus Utilization", 0, {
        { REQ,      "/sys/kernel/debug/tracing/events/memory_bus/enable" },
        { REQ,      "events/memory_bus/enable" },
    } },
    { "idle",       "CPU Idle",         0, {
        { REQ,      "/sys/kernel/debug/tracing/events/power/cpu_idle/enable" },
        { REQ,      "events/power/cpu_idle/enable" },
    } },
    { "disk",       "Disk I/O",         0, {
        { OPT,      "/sys/kernel/debug/tracing/events/f2fs/f2fs_sync_file_enter/enable" },
        { OPT,      "/sys/kernel/debug/tracing/events/f2fs/f2fs_sync_file_exit/enable" },
        { OPT,      "/sys/kernel/debug/tracing/events/f2fs/f2fs_write_begin/enable" },
        { OPT,      "/sys/kernel/debug/tracing/events/f2fs/f2fs_write_end/enable" },
        { OPT,      "/sys/kernel/debug/tracing/events/ext4/ext4_da_write_begin/enable" },
        { OPT,      "/sys/kernel/debug/tracing/events/ext4/ext4_da_write_end/enable" },
        { OPT,      "/sys/kernel/debug/tracing/events/ext4/ext4_sync_file_enter/enable" },
        { OPT,      "/sys/kernel/debug/tracing/events/ext4/ext4_sync_file_exit/enable" },
        { REQ,      "/sys/kernel/debug/tracing/events/block/block_rq_issue/enable" },
        { REQ,      "/sys/kernel/debug/tracing/events/block/block_rq_complete/enable" },
        { OPT,      "events/f2fs/f2fs_sync_file_enter/enable" },
        { OPT,      "events/f2fs/f2fs_sync_file_exit/enable" },
        { OPT,      "events/f2fs/f2fs_write_begin/enable" },
        { OPT,      "events/f2fs/f2fs_write_end/enable" },
        { OPT,      "events/ext4/ext4_da_write_begin/enable" },
        { OPT,      "events/ext4/ext4_da_write_end/enable" },
        { OPT,      "events/ext4/ext4_sync_file_enter/enable" },
        { OPT,      "events/ext4/ext4_sync_file_exit/enable" },
        { REQ,      "events/block/block_rq_issue/enable" },
        { REQ,      "events/block/block_rq_complete/enable" },
    } },
    { "mmc",        "eMMC commands",    0, {
        { REQ,      "/sys/kernel/debug/tracing/events/mmc/enable" },
        { REQ,      "events/mmc/enable" },
    } },
    { "load",       "CPU Load",         0, {
        { REQ,      "/sys/kernel/debug/tracing/events/cpufreq_interactive/enable" },
        { REQ,      "events/cpufreq_interactive/enable" },
    } },
    { "sync",       "Synchronization",  0, {
        { REQ,      "/sys/kernel/debug/tracing/events/sync/enable" },
        { REQ,      "events/sync/enable" },
    } },
    { "workq",      "Kernel Workqueues", 0, {
        { REQ,      "/sys/kernel/debug/tracing/events/workqueue/enable" },
        { REQ,      "events/workqueue/enable" },
    } },
    { "memreclaim", "Kernel Memory Reclaim", 0, {
        { REQ,      "/sys/kernel/debug/tracing/events/vmscan/mm_vmscan_direct_reclaim_begin/enable" },
        { REQ,      "/sys/kernel/debug/tracing/events/vmscan/mm_vmscan_direct_reclaim_end/enable" },
        { REQ,      "/sys/kernel/debug/tracing/events/vmscan/mm_vmscan_kswapd_wake/enable" },
        { REQ,      "/sys/kernel/debug/tracing/events/vmscan/mm_vmscan_kswapd_sleep/enable" },
        { REQ,      "events/vmscan/mm_vmscan_direct_reclaim_begin/enable" },
        { REQ,      "events/vmscan/mm_vmscan_direct_reclaim_end/enable" },
        { REQ,      "events/vmscan/mm_vmscan_kswapd_wake/enable" },
        { REQ,      "events/vmscan/mm_vmscan_kswapd_sleep/enable" },
    } },
    { "regulators",  "Voltage and Current Regulators", 0, {
        { REQ,      "/sys/kernel/debug/tracing/events/regulator/enable" },
        { REQ,      "events/regulator/enable" },
    } },
    { "binder_driver", "Binder Kernel driver", 0, {
        { REQ,      "/sys/kernel/debug/tracing/events/binder/binder_transaction/enable" },
        { REQ,      "/sys/kernel/debug/tracing/events/binder/binder_transaction_received/enable" },
        { REQ,      "events/binder/binder_transaction/enable" },
        { REQ,      "events/binder/binder_transaction_received/enable" },
    } },
    { "binder_lock", "Binder global lock trace", 0, {
        { REQ,      "/sys/kernel/debug/tracing/events/binder/binder_lock/enable" },
        { REQ,      "/sys/kernel/debug/tracing/events/binder/binder_locked/enable" },
        { REQ,      "/sys/kernel/debug/tracing/events/binder/binder_unlock/enable" },
        { REQ,      "events/binder/binder_lock/enable" },
        { REQ,      "events/binder/binder_locked/enable" },
        { REQ,      "events/binder/binder_unlock/enable" },
    } },
    { "pagecache",  "Page cache", 0, {
        { REQ,      "/sys/kernel/debug/tracing/events/filemap/enable" },
        { REQ,      "events/filemap/enable" },
    } },
};

@@ -205,61 +205,62 @@ static const char* g_outputFile = nullptr;
/* Global state */
static bool g_traceAborted = false;
static bool g_categoryEnables[NELEM(k_categories)] = {};
static std::string g_traceFolder;

/* Sys file paths */
static const char* k_traceClockPath =
    "/sys/kernel/debug/tracing/trace_clock";
    "trace_clock";

static const char* k_traceBufferSizePath =
    "/sys/kernel/debug/tracing/buffer_size_kb";
    "buffer_size_kb";

static const char* k_tracingOverwriteEnablePath =
    "/sys/kernel/debug/tracing/options/overwrite";
    "options/overwrite";

static const char* k_currentTracerPath =
    "/sys/kernel/debug/tracing/current_tracer";
    "current_tracer";

static const char* k_printTgidPath =
    "/sys/kernel/debug/tracing/options/print-tgid";
    "options/print-tgid";

static const char* k_funcgraphAbsTimePath =
    "/sys/kernel/debug/tracing/options/funcgraph-abstime";
    "options/funcgraph-abstime";

static const char* k_funcgraphCpuPath =
    "/sys/kernel/debug/tracing/options/funcgraph-cpu";
    "options/funcgraph-cpu";

static const char* k_funcgraphProcPath =
    "/sys/kernel/debug/tracing/options/funcgraph-proc";
    "options/funcgraph-proc";

static const char* k_funcgraphFlatPath =
    "/sys/kernel/debug/tracing/options/funcgraph-flat";
    "options/funcgraph-flat";

static const char* k_funcgraphDurationPath =
    "/sys/kernel/debug/tracing/options/funcgraph-duration";
    "options/funcgraph-duration";

static const char* k_ftraceFilterPath =
    "/sys/kernel/debug/tracing/set_ftrace_filter";
    "set_ftrace_filter";

static const char* k_tracingOnPath =
    "/sys/kernel/debug/tracing/tracing_on";
    "tracing_on";

static const char* k_tracePath =
    "/sys/kernel/debug/tracing/trace";
    "trace";

static const char* k_traceStreamPath =
    "/sys/kernel/debug/tracing/trace_pipe";
    "trace_pipe";

static const char* k_traceMarkerPath =
    "/sys/kernel/debug/tracing/trace_marker";
    "trace_marker";

// Check whether a file exists.
static bool fileExists(const char* filename) {
    return access(filename, F_OK) != -1;
    return access((g_traceFolder + filename).c_str(), F_OK) != -1;
}

// Check whether a file is writable.
static bool fileIsWritable(const char* filename) {
    return access(filename, W_OK) != -1;
    return access((g_traceFolder + filename).c_str(), W_OK) != -1;
}

// Truncate a file.
@@ -268,9 +269,9 @@ static bool truncateFile(const char* path)
    // This uses creat rather than truncate because some of the debug kernel
    // device nodes (e.g. k_ftraceFilterPath) currently aren't changed by
    // calls to truncate, but they are cleared by calls to creat.
    int traceFD = creat(path, 0);
    int traceFD = creat((g_traceFolder + path).c_str(), 0);
    if (traceFD == -1) {
        fprintf(stderr, "error truncating %s: %s (%d)\n", path,
        fprintf(stderr, "error truncating %s: %s (%d)\n", (g_traceFolder + path).c_str(),
            strerror(errno), errno);
        return false;
    }
@@ -282,9 +283,10 @@ static bool truncateFile(const char* path)

static bool _writeStr(const char* filename, const char* str, int flags)
{
    int fd = open(filename, flags);
    std::string fullFilename = g_traceFolder + filename;
    int fd = open(fullFilename.c_str(), flags);
    if (fd == -1) {
        fprintf(stderr, "error opening %s: %s (%d)\n", filename,
        fprintf(stderr, "error opening %s: %s (%d)\n", fullFilename.c_str(),
                strerror(errno), errno);
        return false;
    }
@@ -292,7 +294,7 @@ static bool _writeStr(const char* filename, const char* str, int flags)
    bool ok = true;
    ssize_t len = strlen(str);
    if (write(fd, str, len) != len) {
        fprintf(stderr, "error writing to %s: %s (%d)\n", filename,
        fprintf(stderr, "error writing to %s: %s (%d)\n", fullFilename.c_str(),
                strerror(errno), errno);
        ok = false;
    }
@@ -318,7 +320,7 @@ static void writeClockSyncMarker()
{
  char buffer[128];
  int len = 0;
  int fd = open(k_traceMarkerPath, O_WRONLY);
  int fd = open((g_traceFolder + k_traceMarkerPath).c_str(), O_WRONLY);
  if (fd == -1) {
      fprintf(stderr, "error opening %s: %s (%d)\n", k_traceMarkerPath,
              strerror(errno), errno);
@@ -439,7 +441,7 @@ static bool setTraceBufferSizeKB(int size)
// local [global] counter uptime perf
static bool isTraceClock(const char *mode)
{
    int fd = open(k_traceClockPath, O_RDONLY);
    int fd = open((g_traceFolder + k_traceClockPath).c_str(), O_RDONLY);
    if (fd == -1) {
        fprintf(stderr, "error opening %s: %s (%d)\n", k_traceClockPath,
            strerror(errno), errno);
@@ -652,7 +654,7 @@ static bool disableKernelTraceEvents() {
static bool verifyKernelTraceFuncs(const char* funcs)
{
    std::string buf;
    if (!android::base::ReadFileToString(k_ftraceFilterPath, &buf)) {
    if (!android::base::ReadFileToString(g_traceFolder + k_ftraceFilterPath, &buf)) {
         fprintf(stderr, "error opening %s: %s (%d)\n", k_ftraceFilterPath,
            strerror(errno), errno);
         return false;
@@ -873,7 +875,7 @@ static void stopTrace()
static void streamTrace()
{
    char trace_data[4096];
    int traceFD = open(k_traceStreamPath, O_RDWR);
    int traceFD = open((g_traceFolder + k_traceStreamPath).c_str(), O_RDWR);
    if (traceFD == -1) {
        fprintf(stderr, "error opening %s: %s (%d)\n", k_traceStreamPath,
                strerror(errno), errno);
@@ -898,7 +900,7 @@ static void streamTrace()
static void dumpTrace(int outFd)
{
    ALOGI("Dumping trace");
    int traceFD = open(k_tracePath, O_RDWR);
    int traceFD = open((g_traceFolder + k_tracePath).c_str(), O_RDWR);
    if (traceFD == -1) {
        fprintf(stderr, "error opening %s: %s (%d)\n", k_tracePath,
                strerror(errno), errno);
@@ -1053,6 +1055,29 @@ static void showHelp(const char *cmd)
            );
}

bool findTraceFiles()
{
    static const std::string debugfs_path = "/sys/kernel/debug/tracing/";
    static const std::string tracefs_path = "/sys/kernel/tracing/";
    static const std::string trace_file = "trace_marker";

    bool tracefs = access((tracefs_path + trace_file).c_str(), F_OK) != -1;
    bool debugfs = access((debugfs_path + trace_file).c_str(), F_OK) != -1;

    if (!tracefs && !debugfs) {
        fprintf(stderr, "Error: Did not find trace folder\n");
        return false;
    }

    if (tracefs) {
        g_traceFolder = tracefs_path;
    } else {
        g_traceFolder = debugfs_path;
    }

    return true;
}

int main(int argc, char **argv)
{
    bool async = false;
@@ -1066,6 +1091,11 @@ int main(int argc, char **argv)
        exit(0);
    }

    if (!findTraceFiles()) {
        fprintf(stderr, "No trace folder found\n");
        exit(-1);
    }

    for (;;) {
        int ret;
        int option_index = 0;
+59 −0
Original line number Diff line number Diff line
@@ -4,72 +4,131 @@ on post-fs

# Allow writing to the kernel trace log.
    chmod 0222 /sys/kernel/debug/tracing/trace_marker
    chmod 0222 /sys/kernel/tracing/trace_marker

# Allow the shell group to enable (some) kernel tracing.
    chown root shell /sys/kernel/debug/tracing/trace_clock
    chown root shell /sys/kernel/tracing/trace_clock
    chown root shell /sys/kernel/debug/tracing/buffer_size_kb
    chown root shell /sys/kernel/tracing/buffer_size_kb
    chown root shell /sys/kernel/debug/tracing/options/overwrite
    chown root shell /sys/kernel/tracing/options/overwrite
    chown root shell /sys/kernel/debug/tracing/options/print-tgid
    chown root shell /sys/kernel/tracing/options/print-tgid
    chown root shell /sys/kernel/debug/tracing/events/sched/sched_switch/enable
    chown root shell /sys/kernel/tracing/events/sched/sched_switch/enable
    chown root shell /sys/kernel/debug/tracing/events/sched/sched_wakeup/enable
    chown root shell /sys/kernel/tracing/events/sched/sched_wakeup/enable
    chown root shell /sys/kernel/debug/tracing/events/sched/sched_blocked_reason/enable
    chown root shell /sys/kernel/tracing/events/sched/sched_blocked_reason/enable
    chown root shell /sys/kernel/debug/tracing/events/sched/sched_cpu_hotplug/enable
    chown root shell /sys/kernel/tracing/events/sched/sched_cpu_hotplug/enable
    chown root shell /sys/kernel/debug/tracing/events/power/cpu_frequency/enable
    chown root shell /sys/kernel/tracing/events/power/cpu_frequency/enable
    chown root shell /sys/kernel/debug/tracing/events/power/cpu_idle/enable
    chown root shell /sys/kernel/tracing/events/power/cpu_idle/enable
    chown root shell /sys/kernel/debug/tracing/events/power/clock_set_rate/enable
    chown root shell /sys/kernel/tracing/events/power/clock_set_rate/enable
    chown root shell /sys/kernel/debug/tracing/events/power/cpu_frequency_limits/enable
    chown root shell /sys/kernel/tracing/events/power/cpu_frequency_limits/enable
    chown root shell /sys/kernel/debug/tracing/events/cpufreq_interactive/enable
    chown root shell /sys/kernel/tracing/events/cpufreq_interactive/enable
    chown root shell /sys/kernel/debug/tracing/events/vmscan/mm_vmscan_direct_reclaim_begin/enable
    chown root shell /sys/kernel/tracing/events/vmscan/mm_vmscan_direct_reclaim_begin/enable
    chown root shell /sys/kernel/debug/tracing/events/vmscan/mm_vmscan_direct_reclaim_end/enable
    chown root shell /sys/kernel/tracing/events/vmscan/mm_vmscan_direct_reclaim_end/enable
    chown root shell /sys/kernel/debug/tracing/events/vmscan/mm_vmscan_kswapd_wake/enable
    chown root shell /sys/kernel/tracing/events/vmscan/mm_vmscan_kswapd_wake/enable
    chown root shell /sys/kernel/debug/tracing/events/vmscan/mm_vmscan_kswapd_sleep/enable
    chown root shell /sys/kernel/tracing/events/vmscan/mm_vmscan_kswapd_sleep/enable
    chown root shell /sys/kernel/debug/tracing/events/binder/binder_transaction/enable
    chown root shell /sys/kernel/tracing/events/binder/binder_transaction/enable
    chown root shell /sys/kernel/debug/tracing/events/binder/binder_transaction_received/enable
    chown root shell /sys/kernel/tracing/events/binder/binder_transaction_received/enable
    chown root shell /sys/kernel/debug/tracing/events/binder/binder_lock/enable
    chown root shell /sys/kernel/tracing/events/binder/binder_lock/enable
    chown root shell /sys/kernel/debug/tracing/events/binder/binder_locked/enable
    chown root shell /sys/kernel/tracing/events/binder/binder_locked/enable
    chown root shell /sys/kernel/debug/tracing/events/binder/binder_unlock/enable
    chown root shell /sys/kernel/tracing/events/binder/binder_unlock/enable

    chown root shell /sys/kernel/debug/tracing/tracing_on
    chown root shell /sys/kernel/tracing/tracing_on

    chmod 0664 /sys/kernel/debug/tracing/trace_clock
    chmod 0664 /sys/kernel/tracing/trace_clock
    chmod 0664 /sys/kernel/debug/tracing/buffer_size_kb
    chmod 0664 /sys/kernel/tracing/buffer_size_kb
    chmod 0664 /sys/kernel/debug/tracing/options/overwrite
    chmod 0664 /sys/kernel/tracing/options/overwrite
    chmod 0664 /sys/kernel/debug/tracing/options/print-tgid
    chmod 0664 /sys/kernel/tracing/options/print-tgid
    chmod 0664 /sys/kernel/debug/tracing/events/sched/sched_switch/enable
    chmod 0664 /sys/kernel/tracing/events/sched/sched_switch/enable
    chmod 0664 /sys/kernel/debug/tracing/events/sched/sched_wakeup/enable
    chmod 0664 /sys/kernel/tracing/events/sched/sched_wakeup/enable
    chmod 0664 /sys/kernel/debug/tracing/events/sched/sched_blocked_reason/enable
    chmod 0664 /sys/kernel/tracing/events/sched/sched_blocked_reason/enable
    chmod 0664 /sys/kernel/debug/tracing/events/sched/sched_cpu_hotplug/enable
    chmod 0664 /sys/kernel/tracing/events/sched/sched_cpu_hotplug/enable
    chmod 0664 /sys/kernel/debug/tracing/events/power/cpu_frequency/enable
    chmod 0664 /sys/kernel/tracing/events/power/cpu_frequency/enable
    chmod 0664 /sys/kernel/debug/tracing/events/power/cpu_idle/enable
    chmod 0664 /sys/kernel/tracing/events/power/cpu_idle/enable
    chmod 0664 /sys/kernel/debug/tracing/events/power/clock_set_rate/enable
    chmod 0664 /sys/kernel/tracing/events/power/clock_set_rate/enable
    chmod 0664 /sys/kernel/debug/tracing/events/power/cpu_frequency_limits/enable
    chmod 0664 /sys/kernel/tracing/events/power/cpu_frequency_limits/enable
    chmod 0664 /sys/kernel/debug/tracing/events/cpufreq_interactive/enable
    chmod 0664 /sys/kernel/tracing/events/cpufreq_interactive/enable
    chmod 0664 /sys/kernel/debug/tracing/events/vmscan/mm_vmscan_direct_reclaim_begin/enable
    chmod 0664 /sys/kernel/tracing/events/vmscan/mm_vmscan_direct_reclaim_begin/enable
    chmod 0664 /sys/kernel/debug/tracing/events/vmscan/mm_vmscan_direct_reclaim_end/enable
    chmod 0664 /sys/kernel/tracing/events/vmscan/mm_vmscan_direct_reclaim_end/enable
    chmod 0664 /sys/kernel/debug/tracing/events/vmscan/mm_vmscan_kswapd_wake/enable
    chmod 0664 /sys/kernel/tracing/events/vmscan/mm_vmscan_kswapd_wake/enable
    chmod 0664 /sys/kernel/debug/tracing/events/vmscan/mm_vmscan_kswapd_sleep/enable
    chmod 0664 /sys/kernel/tracing/events/vmscan/mm_vmscan_kswapd_sleep/enable
    chmod 0664 /sys/kernel/debug/tracing/tracing_on
    chmod 0664 /sys/kernel/tracing/tracing_on
    chmod 0664 /sys/kernel/debug/tracing/events/binder/binder_transaction/enable
    chmod 0664 /sys/kernel/tracing/events/binder/binder_transaction/enable
    chmod 0664 /sys/kernel/debug/tracing/events/binder/binder_transaction_received/enable
    chmod 0664 /sys/kernel/tracing/events/binder/binder_transaction_received/enable
    chmod 0664 /sys/kernel/debug/tracing/events/binder/binder_lock/enable
    chmod 0664 /sys/kernel/tracing/events/binder/binder_lock/enable
    chmod 0664 /sys/kernel/debug/tracing/events/binder/binder_locked/enable
    chmod 0664 /sys/kernel/tracing/events/binder/binder_locked/enable
    chmod 0664 /sys/kernel/debug/tracing/events/binder/binder_unlock/enable
    chmod 0664 /sys/kernel/tracing/events/binder/binder_unlock/enable
    chmod 0664 /sys/kernel/debug/tracing/events/i2c/enable
    chmod 0664 /sys/kernel/tracing/events/i2c/enable
    chmod 0664 /sys/kernel/debug/tracing/events/i2c/i2c_read/enable
    chmod 0664 /sys/kernel/tracing/events/i2c/i2c_read/enable
    chmod 0664 /sys/kernel/debug/tracing/events/i2c/i2c_write/enable
    chmod 0664 /sys/kernel/tracing/events/i2c/i2c_write/enable
    chmod 0664 /sys/kernel/debug/tracing/events/i2c/i2c_result/enable
    chmod 0664 /sys/kernel/tracing/events/i2c/i2c_result/enable
    chmod 0664 /sys/kernel/debug/tracing/events/i2c/i2c_reply/enable
    chmod 0664 /sys/kernel/tracing/events/i2c/i2c_reply/enable
    chmod 0664 /sys/kernel/debug/tracing/events/i2c/smbus_read/enable
    chmod 0664 /sys/kernel/tracing/events/i2c/smbus_read/enable
    chmod 0664 /sys/kernel/debug/tracing/events/i2c/smbus_write/enable
    chmod 0664 /sys/kernel/tracing/events/i2c/smbus_write/enable
    chmod 0664 /sys/kernel/debug/tracing/events/i2c/smbus_result/enable
    chmod 0664 /sys/kernel/tracing/events/i2c/smbus_result/enable
    chmod 0664 /sys/kernel/debug/tracing/events/i2c/smbus_reply/enable
    chmod 0664 /sys/kernel/tracing/events/i2c/smbus_reply/enable

    # Tracing disabled by default
    write /sys/kernel/debug/tracing/tracing_on 0
    write /sys/kernel/tracing/tracing_on 0

# Allow only the shell group to read and truncate the kernel trace.
    chown root shell /sys/kernel/debug/tracing/trace
    chown root shell /sys/kernel/tracing/trace
    chmod 0660 /sys/kernel/debug/tracing/trace
    chmod 0660 /sys/kernel/tracing/trace

on property:persist.debug.atrace.boottrace=1
    start boottrace