From 727fee33dc6834da111a7a2bb63cb56a369e59b4 Mon Sep 17 00:00:00 2001 From: Pablo Gamito Date: Wed, 29 Mar 2023 15:39:43 +0000 Subject: [PATCH] Save transition trace in bugreports Bug: 275331993 Test: adb bugreport Change-Id: If65b355c419a3f303eb8dcc3859f486710bf04cf --- .../bugreports/tests/BugreportManagerTest.java | 2 ++ .../android/server/wm/TransitionTracer.java | 18 ++++++++++++++++++ .../server/wm/WindowManagerShellCommand.java | 3 +++ 3 files changed, 23 insertions(+) diff --git a/core/tests/bugreports/src/com/android/os/bugreports/tests/BugreportManagerTest.java b/core/tests/bugreports/src/com/android/os/bugreports/tests/BugreportManagerTest.java index 180a312a3f2b2..bf8c7c63590f9 100644 --- a/core/tests/bugreports/src/com/android/os/bugreports/tests/BugreportManagerTest.java +++ b/core/tests/bugreports/src/com/android/os/bugreports/tests/BugreportManagerTest.java @@ -108,8 +108,10 @@ public class BugreportManagerTest { Paths.get("/data/misc/wmtrace/ime_trace_managerservice.winscope"), Paths.get("/data/misc/wmtrace/ime_trace_service.winscope"), Paths.get("/data/misc/wmtrace/wm_trace.winscope"), + Paths.get("/data/misc/wmtrace/wm_log.winscope"), Paths.get("/data/misc/wmtrace/layers_trace.winscope"), Paths.get("/data/misc/wmtrace/transactions_trace.winscope"), + Paths.get("/data/misc/wmtrace/transition_trace.winscope"), }; private static final Path[] UI_TRACES_GENERATED_DURING_BUGREPORT = { Paths.get("/data/misc/wmtrace/layers_trace_from_transactions.winscope"), diff --git a/services/core/java/com/android/server/wm/TransitionTracer.java b/services/core/java/com/android/server/wm/TransitionTracer.java index 57c0d65b28eac..a4c931c17a666 100644 --- a/services/core/java/com/android/server/wm/TransitionTracer.java +++ b/services/core/java/com/android/server/wm/TransitionTracer.java @@ -365,6 +365,24 @@ public class TransitionTracer { Trace.endSection(); } + /** + * Being called while taking a bugreport so that tracing files can be included in the bugreport. + * + * @param pw Print writer + */ + public void saveForBugreport(@Nullable PrintWriter pw) { + if (IS_USER) { + LogAndPrintln.e(pw, "Tracing is not supported on user builds."); + return; + } + Trace.beginSection("TransitionTracer#saveForBugreport"); + synchronized (mEnabledLock) { + final File outputFile = new File(TRACE_FILE); + writeTraceToFileLocked(pw, outputFile); + } + Trace.endSection(); + } + boolean isActiveTracingEnabled() { return mActiveTracingEnabled; } diff --git a/services/core/java/com/android/server/wm/WindowManagerShellCommand.java b/services/core/java/com/android/server/wm/WindowManagerShellCommand.java index 437af4b4ac763..a153708c98d5a 100644 --- a/services/core/java/com/android/server/wm/WindowManagerShellCommand.java +++ b/services/core/java/com/android/server/wm/WindowManagerShellCommand.java @@ -1301,6 +1301,9 @@ public class WindowManagerShellCommand extends ShellCommand { case "stop": mInternal.mTransitionTracer.stopTrace(pw); break; + case "save-for-bugreport": + mInternal.mTransitionTracer.saveForBugreport(pw); + break; default: getErrPrintWriter() .println("Error: expected 'start' or 'stop', but got '" + arg + "'");