Loading cmds/dumpstate/dumpstate.cpp +12 −10 Original line number Diff line number Diff line Loading @@ -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" }; Loading cmds/dumpstate/tests/dumpstate_test.cpp +14 −9 Original line number Diff line number Diff line Loading @@ -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 { Loading Loading
cmds/dumpstate/dumpstate.cpp +12 −10 Original line number Diff line number Diff line Loading @@ -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" }; Loading
cmds/dumpstate/tests/dumpstate_test.cpp +14 −9 Original line number Diff line number Diff line Loading @@ -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 { Loading