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

Commit 4a0a877c authored by Siarhei Vishniakou's avatar Siarhei Vishniakou
Browse files

Use logcat -b kernel for bug reports

One of the main advantages of the kernel log buffer is that _spammy_
selinux violations are suppressed there, and instead land in events and
main log buffers for all to view. This gives the kernel log buffer a
longer logspan and better signal to noise ratio than an equivalently
sized dmesg buffer. The other advantage is the CLOCK_REALTIME usage,
that makes it easier to correlate kernel and user
space activities in the bugreport.

Bug: 30736473
Test: 1) adb bugreport 2) adb shell setprop ro.logd.kernel false
3) adb bugreport
Then compare the two resulting bug reports (open both in Android
Bug Tool). Observe that timestamps are seconds since bootup
in the second bugreport, and actual time (human-readable) in the first
bugreport.

Change-Id: I968de323833dda97ded4ecc454e12220d4bd3021
parent c4257d27
Loading
Loading
Loading
Loading
+27 −12
Original line number Diff line number Diff line
@@ -833,6 +833,17 @@ static void DoKmsg() {

static const long MINIMUM_LOGCAT_TIMEOUT_MS = 50000;

static void DoKernelLogcat() {
    unsigned long timeout_ms = logcat_timeout("kernel");
    if (timeout_ms < MINIMUM_LOGCAT_TIMEOUT_MS) {
        timeout_ms = MINIMUM_LOGCAT_TIMEOUT_MS;
    }
    RunCommand(
        "KERNEL LOG",
        {"logcat", "-b", "kernel", "-v", "threadtime", "-v", "printable", "-v", "uid", "-d", "*:v"},
        CommandOptions::WithTimeoutInMs(timeout_ms).Build());
}

static void DoLogcat() {
    unsigned long timeout_ms;
    // DumpFile("EVENT LOG TAGS", "/etc/event-log-tags");
@@ -848,25 +859,24 @@ static void DoLogcat() {
    if (timeout_ms < MINIMUM_LOGCAT_TIMEOUT_MS) {
        timeout_ms = MINIMUM_LOGCAT_TIMEOUT_MS;
    }
    RunCommand("EVENT LOG",
               {"logcat", "-b", "events", "-v", "threadtime", "-v", "printable", "-v", "uid",
                        "-d", "*:v"},
    RunCommand(
        "EVENT LOG",
        {"logcat", "-b", "events", "-v", "threadtime", "-v", "printable", "-v", "uid", "-d", "*:v"},
        CommandOptions::WithTimeoutInMs(timeout_ms).Build());
    timeout_ms = logcat_timeout("radio");
    if (timeout_ms < MINIMUM_LOGCAT_TIMEOUT_MS) {
        timeout_ms = MINIMUM_LOGCAT_TIMEOUT_MS;
    }
    RunCommand("RADIO LOG",
               {"logcat", "-b", "radio", "-v", "threadtime", "-v", "printable", "-v", "uid",
                        "-d", "*:v"},
    RunCommand(
        "RADIO LOG",
        {"logcat", "-b", "radio", "-v", "threadtime", "-v", "printable", "-v", "uid", "-d", "*:v"},
        CommandOptions::WithTimeoutInMs(timeout_ms).Build());

    RunCommand("LOG STATISTICS", {"logcat", "-b", "all", "-S"});

    /* kernels must set CONFIG_PSTORE_PMSG, slice up pstore with device tree */
    RunCommand("LAST LOGCAT",
                {"logcat", "-L", "-b", "all", "-v", "threadtime", "-v", "printable", "-v", "uid",
                        "-d", "*:v"});
    RunCommand("LAST LOGCAT", {"logcat", "-L", "-b", "all", "-v", "threadtime", "-v", "printable",
                               "-v", "uid", "-d", "*:v"});
}

static void DumpIpTablesAsRoot() {
@@ -1187,7 +1197,12 @@ static void dumpstate() {
        RunCommand("LSMOD", {"lsmod"});
    }

    if (__android_logger_property_get_bool(
            "ro.logd.kernel", BOOL_DEFAULT_TRUE | BOOL_DEFAULT_FLAG_ENG | BOOL_DEFAULT_FLAG_SVELTE)) {
        DoKernelLogcat();
    } else {
        do_dmesg();
    }

    RunCommand("LIST OF OPEN FILES", {"lsof"}, CommandOptions::AS_ROOT);
    for_each_pid(do_showmap, "SMAPS OF ALL PROCESSES");