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

Commit d0f8a984 authored by Kevin Jeon's avatar Kevin Jeon
Browse files

Skip dumping backtraces for cached processes

This change updates dumpstate to skip dumping backtraces for cached
processes. These processes are less likely to be causing
bugreport-necessitating issues, and if they are frozen, will cause
backtrace dumps to time out anyways.

This results in a ~50% decrease (21.327s -> 10.568s) in the time taken
to run DUMP TRACES.

Test: On a local device, check with bugreportz that there are no more
      timed-out backtrace dumps (i.e. that the "Dump failed, likely due
      to a timeout" failure no longer occurs).
Test: Run health/bugreport/capturebugreport on an internal build and
      verify that the DUMP TRACES section is much shorter.
Bug: 276451949
Change-Id: Iecb6c2168a0dccefecf3b92be24c647eaf729556
parent 9a983f2f
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -2196,6 +2196,16 @@ Dumpstate::RunStatus Dumpstate::DumpTraces(const char** path) {
            continue;
        }

        // Skip cached processes.
        if (IsCached(pid)) {
            // For consistency, the header and footer to this message match those
            // dumped by debuggerd in the success case.
            dprintf(fd, "\n---- pid %d at [unknown] ----\n", pid);
            dprintf(fd, "Dump skipped for cached process.\n");
            dprintf(fd, "---- end %d ----", pid);
            continue;
        }

        const std::string link_name = android::base::StringPrintf("/proc/%d/exe", pid);
        std::string exe;
        if (!android::base::Readlink(link_name, &exe)) {
+16 −0
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@
#include <set>

#include <android-base/file.h>
#include <android-base/parseint.h>
#include <android-base/properties.h>
#include <android-base/stringprintf.h>
#include <android-base/strings.h>
@@ -210,3 +211,18 @@ bool IsZygote(int pid) {
    return cmdline == "zygote" || cmdline == "zygote64" || cmdline == "usap32" ||
            cmdline == "usap64" || cmdline == "webview_zygote";
}

bool IsCached(int pid) {
    std::string oom_score_adj;
    if (!android::base::ReadFileToString(android::base::StringPrintf("/proc/%d/oom_score_adj",
                                                                     pid),
                                         &oom_score_adj)) {
        return false;
    }
    int32_t oom_score_adj_value;
    if (!android::base::ParseInt(android::base::Trim(oom_score_adj), &oom_score_adj_value)) {
        return false;
    }
    // An OOM score greater than 900 indicates a cached process.
    return oom_score_adj_value >= 900;
}
+2 −0
Original line number Diff line number Diff line
@@ -25,4 +25,6 @@ std::set<int> get_interesting_pids();

bool IsZygote(int pid);

bool IsCached(int pid);

#endif  // DUMPUTILS_H_