diff options
author | Robert Carr <racarr@google.com> | 2016-08-16 16:02:21 -0700 |
---|---|---|
committer | Robert Carr <racarr@google.com> | 2016-09-19 11:19:31 -0700 |
commit | 3b716249cc2f94aa9842576b618998c28593be90 (patch) | |
tree | d4621c132d21655fe67852975c63d858d5998c59 /cmds/wm | |
parent | fcdcf7f636ada244a635328e25fdc03959468c8e (diff) |
WindowManager RemoteSurfaceTrace infrastructure
Add "wm surface-trace" command which enables tracing of surface
commands to be switched on at runtime. Primarily intended for use
by WM CTS tests. First target in CTS will be to use show/hide
events to eliminate polling in WM tests and increase speed. Next up
looking at things like verifying various transitions and relaunch
scenarios are flicker free. Later we may want to look at a smarter
or more structured format...but it's really not much hassle to parse
the commands off a pipe so I wanted to get us started.
Test: cts-tradefed run singleCommand cts -o --module CtsWindowManagerHostTestCases --test android.server.cts.SurfaceViewMovementTests#testSurfaceMovesWithParent
Change-Id: I1ff912c405a6cb9996ee9b6e2c465d57706191ba
Diffstat (limited to 'cmds/wm')
-rw-r--r-- | cmds/wm/src/com/android/commands/wm/Wm.java | 58 |
1 files changed, 57 insertions, 1 deletions
diff --git a/cmds/wm/src/com/android/commands/wm/Wm.java b/cmds/wm/src/com/android/commands/wm/Wm.java index 383cd01ddcd6..b46cd6767a73 100644 --- a/cmds/wm/src/com/android/commands/wm/Wm.java +++ b/cmds/wm/src/com/android/commands/wm/Wm.java @@ -21,16 +21,22 @@ package com.android.commands.wm; import android.content.Context; import android.graphics.Point; import android.graphics.Rect; +import android.os.ParcelFileDescriptor; import android.os.RemoteException; import android.os.ServiceManager; import android.os.UserHandle; import android.util.AndroidException; import android.util.DisplayMetrics; +import android.system.Os; import android.view.Display; import android.view.IWindowManager; import com.android.internal.os.BaseCommand; +import java.io.FileDescriptor; +import java.io.FileInputStream; +import java.io.DataInputStream; import java.io.PrintStream; +import java.lang.Runtime; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -69,7 +75,9 @@ public class Wm extends BaseCommand { "wm screen-capture: enable/disable screen capture.\n" + "\n" + "wm dismiss-keyguard: dismiss the keyguard, prompting the user for auth if " + - "necessary.\n" + "necessary.\n" + + "\n" + + "wm surface-trace: log surface commands to stdout.\n" ); } @@ -96,12 +104,60 @@ public class Wm extends BaseCommand { runSetScreenCapture(); } else if (op.equals("dismiss-keyguard")) { runDismissKeyguard(); + } else if (op.equals("surface-trace")) { + runSurfaceTrace(); } else { showError("Error: unknown command '" + op + "'"); return; } } + private void parseTrace(String next, DataInputStream is) throws Exception { + switch (next) { + case "Alpha": + System.out.println(is.readFloat()); + break; + case "Layer": + System.out.println(is.readInt()); + break; + case "Position": + System.out.println(is.readFloat() + ", " + is.readFloat()); + break; + case "Size": + System.out.println(is.readInt() + ", " + is.readInt()); + break; + case "LayerStack": + System.out.println(is.readInt()); + break; + case "Matrix": + System.out.println(is.readFloat() + "," + is.readFloat() + "," + is.readFloat() + "," + + is.readFloat()); + break; + case "Hide": + case "Show": + case "GeometryAppliesWithResize": + break; + } + } + + private void runSurfaceTrace() throws Exception { + ParcelFileDescriptor[] fds = ParcelFileDescriptor.createPipe(); + + mWm.enableSurfaceTrace(fds[1]); + DataInputStream is = new DataInputStream(new FileInputStream(fds[0].getFileDescriptor())); + + try { + while (true) { + String cmd = is.readUTF(); + String window = is.readUTF(); + System.out.print(cmd + "(" + window + "): "); + parseTrace(cmd, is); + } + } finally { + mWm.disableSurfaceTrace(); + } + } + private void runSetScreenCapture() throws Exception { String userIdStr = nextArg(); String enableStr = nextArg(); |