summaryrefslogtreecommitdiff
path: root/cmds/wm
diff options
context:
space:
mode:
authorRobert Carr <racarr@google.com>2016-08-16 16:02:21 -0700
committerRobert Carr <racarr@google.com>2016-09-19 11:19:31 -0700
commit3b716249cc2f94aa9842576b618998c28593be90 (patch)
treed4621c132d21655fe67852975c63d858d5998c59 /cmds/wm
parentfcdcf7f636ada244a635328e25fdc03959468c8e (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.java58
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();