Merge "Introduce a .winscope extension for all winscope files"

This commit is contained in:
Nataniel Borges
2021-08-02 08:07:20 +00:00
committed by Android (Google) Code Review
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: [