diff options
3 files changed, 42 insertions, 5 deletions
diff --git a/core/java/android/view/IWindowManager.aidl b/core/java/android/view/IWindowManager.aidl index 9e103a38263c..700106739665 100644 --- a/core/java/android/view/IWindowManager.aidl +++ b/core/java/android/view/IWindowManager.aidl @@ -396,4 +396,19 @@ interface IWindowManager * Return the touch region for the current IME window, or an empty region if there is none. */ Region getCurrentImeTouchRegion(); + + /** + * Starts a window trace. + */ + void startWindowTrace(); + + /** + * Stops a window trace. + */ + void stopWindowTrace(); + + /** + * Returns true if window trace is enabled. + */ + boolean isWindowTraceEnabled(); } diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index e91b16d013c6..c6eb12b1bd86 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -5327,6 +5327,25 @@ public class WindowManagerService extends IWindowManager.Stub reconfigureDisplayLocked(displayContent); } + @Override + public void startWindowTrace(){ + try { + mWindowTracing.startTrace(null /* printwriter */); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + @Override + public void stopWindowTrace(){ + mWindowTracing.stopTrace(null /* printwriter */); + } + + @Override + public boolean isWindowTraceEnabled() { + return mWindowTracing.isEnabled(); + } + // ------------------------------------------------------------- // Internals // ------------------------------------------------------------- diff --git a/services/core/java/com/android/server/wm/WindowTracing.java b/services/core/java/com/android/server/wm/WindowTracing.java index c858b198df4f..a29978154a92 100644 --- a/services/core/java/com/android/server/wm/WindowTracing.java +++ b/services/core/java/com/android/server/wm/WindowTracing.java @@ -29,6 +29,7 @@ import android.content.Context; import android.os.ShellCommand; import android.os.SystemClock; import android.os.Trace; +import android.annotation.Nullable; import android.util.Log; import android.util.proto.ProtoOutputStream; @@ -62,7 +63,7 @@ class WindowTracing { mTraceFile = file; } - void startTrace(PrintWriter pw) throws IOException { + void startTrace(@Nullable PrintWriter pw) throws IOException { if (IS_USER){ logAndPrintln(pw, "Error: Tracing is not supported on user builds."); return; @@ -81,13 +82,15 @@ class WindowTracing { } } - private void logAndPrintln(PrintWriter pw, String msg) { + private void logAndPrintln(@Nullable PrintWriter pw, String msg) { Log.i(TAG, msg); - pw.println(msg); - pw.flush(); + if (pw != null) { + pw.println(msg); + pw.flush(); + } } - void stopTrace(PrintWriter pw) { + void stopTrace(@Nullable PrintWriter pw) { if (IS_USER){ logAndPrintln(pw, "Error: Tracing is not supported on user builds."); return; |