Add transaction tracing support, fix device id regex.
Added support for recording SF transactions with ADB Connect,
Fixed device regex not matching emulated devices.
Bug:
Test: yarn run dev & python3 adb_proxy/winscope_proxy.py
Change-Id: I43b45b978841309d3f011df919df69ae7ebc905a
diff --git a/tools/winscope/adb_proxy/winscope_proxy.py b/tools/winscope/adb_proxy/winscope_proxy.py
index 10b3bb7..098d08d 100755
--- a/tools/winscope/adb_proxy/winscope_proxy.py
+++ b/tools/winscope/adb_proxy/winscope_proxy.py
@@ -46,7 +46,7 @@
PORT = 5544
# Keep in sync with WINSCOPE_PROXY_VERSION in Winscope DataAdb.vue
-VERSION = '0.1'
+VERSION = '0.2'
WINSCOPE_VERSION_HEADER = "Winscope-Proxy-Version"
WINSCOPE_TOKEN_HEADER = "Winscope-Token"
@@ -92,6 +92,11 @@
"/data/local/tmp/screen.winscope.mp4",
'screenrecord --bit-rate 8M /data/local/tmp/screen.winscope.mp4 >/dev/null 2>&1 &\necho "ScreenRecorder started."',
'pkill -l SIGINT screenrecord >/dev/null 2>&1'
+ ),
+ "transaction": TraceTarget(
+ "/data/misc/wmtrace/transaction_trace.pb",
+ 'su root service call SurfaceFlinger 1020 i32 1\necho "SF transactions recording started."',
+ 'su root service call SurfaceFlinger 1020 i32 0 >/dev/null 2>&1'
)
}
@@ -230,14 +235,14 @@
class ListDevicesEndpoint(RequestEndpoint):
- ADB_INFO_RE = re.compile("^([A-Z0-9]+)\\s+(\\w+)(.*model:(\\w+))?")
+ ADB_INFO_RE = re.compile("^([A-Za-z0-9\\-]+)\\s+(\\w+)(.*model:(\\w+))?")
def process(self, server, path):
lines = list(filter(None, call_adb('devices -l').split('\n')))
devices = {m.group(1): {
'authorised': str(m.group(2)) != 'unauthorized',
'model': m.group(4).replace('_', ' ') if m.group(4) else ''
- } for m in [ListDevicesEndpoint.ADB_INFO_RE.match(d) for d in lines[1:]]}
+ } for m in [ListDevicesEndpoint.ADB_INFO_RE.match(d) for d in lines[1:]] if m}
j = json.dumps(devices)
log.debug("Detected devices: " + j)
server.respond(HTTPStatus.OK, j.encode("utf-8"), "text/json")
@@ -245,7 +250,7 @@
class DeviceRequestEndpoint(RequestEndpoint):
def process(self, server, path):
- if len(path) > 0 and re.fullmatch("[A-Z0-9]+", path[0]):
+ if len(path) > 0 and re.fullmatch("[A-Za-z0-9\\-]+", path[0]):
self.process_with_device(server, path[1:], path[0])
else:
raise BadRequest("Device id not specified")
@@ -423,8 +428,8 @@
server.respond(HTTPStatus.OK, out, "text/plain")
else:
raise AdbError(
- "Error tracing the device\nOutput:\n" + out.decode(
- "utf-8") + "\nCommand: adb -s {} shell\nInput:\n".format(device_id) + command.decode("utf-8"))
+ "Error tracing the device\n### Output ###\n" + out.decode(
+ "utf-8") + "\n### Command: adb -s {} shell ###\n### Input ###\n".format(device_id) + command.decode("utf-8"))
class StatusEndpoint(DeviceRequestEndpoint):
diff --git a/tools/winscope/src/DataAdb.vue b/tools/winscope/src/DataAdb.vue
index 4809bb6..d81006b 100644
--- a/tools/winscope/src/DataAdb.vue
+++ b/tools/winscope/src/DataAdb.vue
@@ -119,7 +119,7 @@
LOAD_DATA: 8,
}
-const WINSCOPE_PROXY_VERSION = "0.1"
+const WINSCOPE_PROXY_VERSION = "0.2"
const WINSCOPE_PROXY_URL = "http://localhost:5544"
const PROXY_ENDPOINTS = {
DEVICES: "/devices/",
@@ -132,6 +132,7 @@
"window_trace",
"layers_trace",
"screen_recording",
+ "transaction"
]
export default {