Let dumpstate call "cmd window trace save-for-bugreport"
This is a preparation to rework our previous CL [1], which enabled
"adb bugreport" to include winscope tracing files into bugreport.
In that CL, we used dumpsys with "--dump-priority CRITICAL" and
"--proto" options as a trigger to save winscope files for bugreport.
In this CL, we let dumpstate explicitly call the following shell command
cmd window tracing save-for-bugreport
inspired by how Perfetto tracing is auto-included in bugreport [2].
void Dumpstate::MaybeSnapshotSystemTrace() {
...
int res = RunCommand(
"SERIALIZE PERFETTO TRACE",
{"perfetto", "--save-for-bugreport"},
CommandOptions::WithTimeout(10)
.DropRoot()
.CloseAllFileDescriptorsOnExec()
.Build());
has_system_trace_ = res == 0;
...
}
Note that with this CL winscope tracing files may contain more events
after saving WindowManager critical dump, it is supposed to be
ignorable as the command will be called immediately after taking
critical dumpsys.
On branches where WindowManagerService does not support the above
command, this CL will have no-op except for the following one-line log
will be seen in logcat.
02-20 00:56:30.754 root 5325 5325 E dumpstate: \
*** command 'cmd window tracing save-for-bugreport' \
failed: exit code 255
To summarize, WinScope logs continue to be dumped under
"/data/misc/wmtrace/"
in the bugreport, and size impact also remains to be the same.
wm_trace.pb: At most 2MB by default
wm_log.pb : At most 1MB by default
[1]: I102bc4afab5efff361633d75c09af1df4a11812e
9e2604688d4c64ea95128f9d8b3b08da508532dd
Bug: 177462676
Test: Manually done as follows.
1. adb logcat -d -s WindowTracing:*
Make sure wintrace is not yet running
2. adb logcat -d -s WindowTracing:*
Make sure there is no additional message
3. adb shell cmd window tracing start
4. adb logcat -d -s WindowTracing:*
Make sure wintrace is running
5. adb bugreport bugreport.zip
6. adb logcat -d -s WindowTracing:*
Make sure wintrace stopped then restarted if
WMS supports "tracing save-for-bugreport".
7. unzip -v bugreport.zip | grep wm_trace.pb
Make sure "wm_trace.pb" is included if
WMS supports "tracing save-for-bugreport"
Change-Id: I8be9dee9aa36c2b085596d58e418f8613d874500
diff --git a/cmds/dumpstate/dumpstate.cpp b/cmds/dumpstate/dumpstate.cpp
index 9e73dcc..c1a58c1 100644
--- a/cmds/dumpstate/dumpstate.cpp
+++ b/cmds/dumpstate/dumpstate.cpp
@@ -2911,6 +2911,10 @@
// own activity pushes out interesting data from the trace ring buffer.
// The trace file is added to the zip by MaybeAddSystemTraceToZip().
MaybeSnapshotSystemTrace();
+
+ // If a winscope trace is running, snapshot it now. It will be pulled into bugreport later
+ // from WMTRACE_DATA_DIR.
+ MaybeSnapshotWinTrace();
}
onUiIntensiveBugreportDumpsFinished(calling_uid);
MaybeCheckUserConsent(calling_uid, calling_package);
@@ -3022,6 +3026,14 @@
// file in the later stages.
}
+void Dumpstate::MaybeSnapshotWinTrace() {
+ 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", "window", "tracing", "save-for-bugreport"},
+ CommandOptions::WithTimeout(10).Always().DropRoot().RedirectStderr().Build());
+}
+
void Dumpstate::onUiIntensiveBugreportDumpsFinished(int32_t calling_uid) {
if (calling_uid == AID_SHELL || !CalledByApi()) {
return;