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

Commit efdc5924 authored by Pablo Gamito's avatar Pablo Gamito
Browse files

Dump shell side transition trace with bug reports

Test: atest dumpstate_test
Bug: 276701336
Bug: 277181336
Bug: 278691227
Change-Id: I6050899eb739bd640b1842caff46c1dee9dbf3a7
parent 8069bc2a
Loading
Loading
Loading
Loading
+12 −10
Original line number Diff line number Diff line
@@ -3362,23 +3362,25 @@ void Dumpstate::MaybeSnapshotUiTraces() {
        return;
    }

    // Include the proto logging from WMShell.
    RunCommand(
        // Empty name because it's not intended to be classified as a bugreport section.
        // Actual logging files can be found as "/data/misc/wmtrace/shell_log.winscope"
        // in the bugreport.
        "", {"dumpsys", "activity", "service", "SystemUIService",
             "WMShell", "protolog", "save-for-bugreport"},
        CommandOptions::WithTimeout(10).Always().DropRoot().RedirectStderr().Build());
    const std::vector<std::vector<std::string>> dumpTracesForBugReportCommands = {
        {"dumpsys", "activity", "service", "SystemUIService", "WMShell", "protolog",
         "save-for-bugreport"},
        {"dumpsys", "activity", "service", "SystemUIService", "WMShell", "transitions", "tracing",
         "save-for-bugreport"},
        {"cmd", "input_method", "tracing", "save-for-bugreport"},
        {"cmd", "window", "tracing", "save-for-bugreport"},
        {"cmd", "window", "shell", "tracing", "save-for-bugreport"},
    };

    for (const auto& service : {"input_method", "window", "window shell"}) {
    for (const auto& command : dumpTracesForBugReportCommands) {
        RunCommand(
            // Empty name because it's not intended to be classified as a bugreport section.
            // Actual tracing files can be found in "/data/misc/wmtrace/" in the bugreport.
            "", {"cmd", service, "tracing", "save-for-bugreport"},
            "", command,
            CommandOptions::WithTimeout(10).Always().DropRoot().RedirectStderr().Build());
    }

    // This command needs to be run as root
    static const auto SURFACEFLINGER_COMMAND_SAVE_ALL_TRACES = std::vector<std::string> {
        "service", "call", "SurfaceFlinger", "1042"
    };
+14 −9
Original line number Diff line number Diff line
@@ -997,17 +997,22 @@ TEST_F(DumpstateTest, DumpPool_withParallelRunDisabled_isNull) {
    EXPECT_FALSE(ds.dump_pool_);
}

TEST_F(DumpstateBaseTest, PreDumpUiData) {
    // SurfaceFlinger's transactions trace is always enabled, i.e. it is always pre-dumped
    static const auto kTransactionsTrace =
            std::filesystem::path {"/data/misc/wmtrace/transactions_trace.winscope"};
TEST_F(DumpstateTest, PreDumpUiData) {
    // These traces are always enabled, i.e. they are always pre-dumped
    const std::vector<std::filesystem::path> uiTraces = {
        std::filesystem::path{"/data/misc/wmtrace/transactions_trace.winscope"},
        std::filesystem::path{"/data/misc/wmtrace/transition_trace.winscope"},
        std::filesystem::path{"/data/misc/wmtrace/shell_transition_trace.winscope"},
    };

    std::system(("rm " + kTransactionsTrace.string()).c_str());
    EXPECT_FALSE(std::filesystem::exists(kTransactionsTrace));
    for (const auto traceFile : uiTraces) {
        std::system(("rm -f " + traceFile.string()).c_str());
        EXPECT_FALSE(std::filesystem::exists(traceFile)) << traceFile << " was not deleted.";

        Dumpstate& ds_ = Dumpstate::GetInstance();
        ds_.PreDumpUiData();
    EXPECT_TRUE(std::filesystem::exists(kTransactionsTrace));
        EXPECT_TRUE(std::filesystem::exists(traceFile)) << traceFile << " was not created.";
    }
}

class ZippedBugReportStreamTest : public DumpstateBaseTest {