Introduce a .winscope extension for all winscope files

This extension will be used to better integrate winscope traces and ABT, allowing trace files to be opened directly from ABT or buganizer

Bug: 192663722
Bug: 162813517
Test: (for winscope) build winscope, record traces, download traces, check if traces have the .winscope extension. (for flicker) run atest Flickertests. (for abt) on new extension, check if .winscope files show as "open in winscope" on buganizer

Change-Id: Iab7a80d0675aefe1a80d10a0f8b512506d063bba
This commit is contained in:
Nataniel Borges
2021-07-20 21:19:53 +02:00
parent 5203d6b08d
commit 2aa5a1d15e
4 changed files with 53 additions and 23 deletions

View File

@@ -55,6 +55,12 @@ WINSCOPE_TOKEN_HEADER = "Winscope-Token"
# Location to save the proxy security token
WINSCOPE_TOKEN_LOCATION = os.path.expanduser('~/.config/winscope/.token')
# Winscope traces extension
WINSCOPE_EXT = ".winscope"
# Winscope traces directory
WINSCOPE_DIR = "/data/misc/wmtrace/"
# Max interval between the client keep-alive requests in seconds
KEEP_ALIVE_INTERVAL_S = 5
@@ -111,51 +117,51 @@ class TraceTarget:
# Order of files matters as they will be expected in that order and decoded in that order
TRACE_TARGETS = {
"window_trace": TraceTarget(
File("/data/misc/wmtrace/wm_trace.pb", "window_trace"),
File(f'{WINSCOPE_DIR}wm_trace{WINSCOPE_EXT}', "window_trace"),
'su root cmd window tracing start\necho "WM trace started."',
'su root cmd window tracing stop >/dev/null 2>&1'
),
"accessibility_trace": TraceTarget(
File("/data/misc/a11ytrace/a11y_trace.pb", "accessibility_trace"),
File(f'/data/misc/a11ytrace/a11y_trace{WINSCOPE_EXT}', "accessibility_trace"),
'su root cmd accessibility start-trace\necho "Accessibility trace started."',
'su root cmd accessibility stop-trace >/dev/null 2>&1'
),
"layers_trace": TraceTarget(
File("/data/misc/wmtrace/layers_trace.pb", "layers_trace"),
File(f'{WINSCOPE_DIR}layers_trace{WINSCOPE_EXT}', "layers_trace"),
'su root service call SurfaceFlinger 1025 i32 1\necho "SF trace started."',
'su root service call SurfaceFlinger 1025 i32 0 >/dev/null 2>&1'
),
"screen_recording": TraceTarget(
File("/data/local/tmp/screen.winscope.mp4", "screen_recording"),
'screenrecord --bit-rate 8M /data/local/tmp/screen.winscope.mp4 >/dev/null 2>&1 &\necho "ScreenRecorder started."',
File(f'/data/local/tmp/screen{WINSCOPE_EXT}.mp4', "screen_recording"),
f'screenrecord --bit-rate 8M /data/local/tmp/screen{WINSCOPE_EXT}.mp4 >/dev/null 2>&1 &\necho "ScreenRecorder started."',
'pkill -l SIGINT screenrecord >/dev/null 2>&1'
),
"transaction": TraceTarget(
[
File("/data/misc/wmtrace/transaction_trace.pb", "transactions"),
FileMatcher("/data/misc/wmtrace/", "transaction_merges_*.pb",
File(f'{WINSCOPE_DIR}transaction_trace{WINSCOPE_EXT}', "transactions"),
FileMatcher(WINSCOPE_DIR, f'transaction_merges_*{WINSCOPE_EXT}',
"transaction_merges"),
],
'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'
),
"proto_log": TraceTarget(
File("/data/misc/wmtrace/wm_log.pb", "proto_log"),
File(f'{WINSCOPE_DIR}wm_log{WINSCOPE_EXT}', "proto_log"),
'su root cmd window logging start\necho "WM logging started."',
'su root cmd window logging stop >/dev/null 2>&1'
),
"ime_trace_clients": TraceTarget(
File("/data/misc/wmtrace/ime_trace_clients.pb", "ime_trace_clients"),
File(f'{WINSCOPE_DIR}ime_trace_clients{WINSCOPE_EXT}', "ime_trace_clients"),
'su root ime tracing start\necho "Clients IME trace started."',
'su root ime tracing stop >/dev/null 2>&1'
),
"ime_trace_service": TraceTarget(
File("/data/misc/wmtrace/ime_trace_service.pb", "ime_trace_service"),
File(f'{WINSCOPE_DIR}ime_trace_service{WINSCOPE_EXT}', "ime_trace_service"),
'su root ime tracing start\necho "Service IME trace started."',
'su root ime tracing stop >/dev/null 2>&1'
),
"ime_trace_managerservice": TraceTarget(
File("/data/misc/wmtrace/ime_trace_managerservice.pb", "ime_trace_managerservice"),
File(f'{WINSCOPE_DIR}ime_trace_managerservice{WINSCOPE_EXT}', "ime_trace_managerservice"),
'su root ime tracing start\necho "ManagerService IME trace started."',
'su root ime tracing stop >/dev/null 2>&1'
),
@@ -204,12 +210,12 @@ class DumpTarget:
DUMP_TARGETS = {
"window_dump": DumpTarget(
File("/data/local/tmp/wm_dump.pb", "window_dump"),
'su root dumpsys window --proto > /data/local/tmp/wm_dump.pb'
File(f'/data/local/tmp/wm_dump{WINSCOPE_EXT}', "window_dump"),
f'su root dumpsys window --proto > /data/local/tmp/wm_dump{WINSCOPE_EXT}'
),
"layers_dump": DumpTarget(
File("/data/local/tmp/sf_dump.pb", "layers_dump"),
'su root dumpsys SurfaceFlinger --proto > /data/local/tmp/sf_dump.pb'
File(f'/data/local/tmp/sf_dump{WINSCOPE_EXT}', "layers_dump"),
f'su root dumpsys SurfaceFlinger --proto > /data/local/tmp/sf_dump{WINSCOPE_EXT}'
)
}

View File

@@ -33,14 +33,37 @@ export default {
document.body.removeChild(a);
},
/**
* Returns the file name, if the file has an extension use its default,
* otherwise use ".mp4" for screen recording (name from proxy script) and
* ".winscope" for traces
* @param {*} fileName
*/
getFileName(fileName) {
var re = /(?:\.([^.]+))?$/;
var extension = re.exec(fileName)[1];
if (!extension) {
extension = "";
}
switch (extension) {
case "": {
if (fileName == "Screen recording") {
return fileName + ".mp4"
}
return fileName + ".winscope"
}
default: return fileName
}
},
async downloadAsZip(traces) {
const zip = new JSZip();
for (const trace of traces) {
const traceFolder = zip.folder(trace.type);
for (const file of trace.files) {
var fileName = this.getFileName(file.filename);
const blob = await fetch(file.blobUrl).then((r) => r.blob());
traceFolder.file(file.filename, blob);
traceFolder.file(fileName, blob);
}
}

View File

@@ -30,8 +30,9 @@ for arg in "$@"; do
esac
done
outfileTrans=${outfile}_transactiontrace.pb
outfileSurf=${outfile}_layerstrace.pb
WINSCOPE_EXT=.winscope
outfileTrans=${outfile}_transactiontrace$WINSCOPE_EXT
outfileSurf=${outfile}_layerstrace$WINSCOPE_EXT
outfileTrans_abs="$(cd "$(dirname "$outfileTrans")"; pwd)/$(basename "$outfileTrans")"
outfileSurf_abs="$(cd "$(dirname "$outfileSurf")"; pwd)/$(basename "$outfileSurf")"
@@ -39,8 +40,8 @@ outfileSurf_abs="$(cd "$(dirname "$outfileSurf")"; pwd)/$(basename "$outfileSurf
if [ "$help" != "" ]; then
echo "usage: $0 [-h | --help] [OUTFILE]"
echo
echo "Records Transaction traces (default transactiontrace.pb)."
echo "Records Surface traces (default layerstrace.pb)."
echo "Records Transaction traces (default transactiontrace$WINSCOPE_EXT)."
echo "Records Surface traces (default layerstrace$WINSCOPE_EXT)."
echo "To view the traces, use $WINSCOPE_URL."
exit 1
fi
@@ -75,8 +76,8 @@ start_tracing
read -p "Press ENTER to stop recording" -s x
echo
stop_tracing
adb exec-out su root cat /data/misc/wmtrace/transaction_trace.pb >"$outfileTrans"
adb exec-out su root cat /data/misc/wmtrace/layers_trace.pb >"$outfileSurf"
adb exec-out su root cat /data/misc/wmtrace/transaction_trace$WINSCOPE_EXT >"$outfileTrans"
adb exec-out su root cat /data/misc/wmtrace/layers_trace$WINSCOPE_EXT >"$outfileSurf"
echo
echo "To view the trace, go to $WINSCOPE_URL, and open"

View File

@@ -64,7 +64,7 @@ module.exports = {
},
},
{
test: /\.pb/,
test: /\.(pb|winscope)/,
loader: 'file-loader',
options: {
paths: [