Files
MobileGL/tools/trace_replay/skills/trace-fixture-authoring-on-android-fcl/scripts/adb_capture.py
T

66 lines
2.2 KiB
Python

#!/usr/bin/env python3
import argparse
import subprocess
from pathlib import Path
REMOTE_ROOT = "/sdcard/FCL/mobilegl-trace"
SCRIPT_DIR = Path(__file__).resolve().parent
DEFAULT_WRAPPER = SCRIPT_DIR / "out" / "egltrace.so"
def adb(serial, args):
cmd = ["adb"]
if serial:
cmd += ["-s", serial]
cmd += args
print("+", " ".join(cmd), flush=True)
subprocess.run(cmd, check=True)
def main():
parser = argparse.ArgumentParser()
parser.add_argument("--serial")
sub = parser.add_subparsers(dest="command", required=True)
install = sub.add_parser("install-wrapper")
install.add_argument("--wrapper", default=str(DEFAULT_WRAPPER))
sub.add_parser("enable")
sub.add_parser("disable")
sub.add_parser("capture-once")
pull = sub.add_parser("pull-latest")
pull.add_argument("--output", default=".trace-work/pulled-mobilegl-captures")
args = parser.parse_args()
serial = args.serial
if args.command == "install-wrapper":
wrapper = Path(args.wrapper)
if not wrapper.exists():
raise SystemExit(f"missing wrapper: {wrapper}")
adb(serial, ["shell", "mkdir", "-p", REMOTE_ROOT])
adb(serial, ["push", str(wrapper), f"{REMOTE_ROOT}/egltrace.so"])
elif args.command == "enable":
adb(serial, ["shell", "mkdir", "-p", REMOTE_ROOT])
adb(serial, ["shell", f"printf enabled > {REMOTE_ROOT}/enable"])
elif args.command == "disable":
adb(serial, ["shell", "rm", "-f", f"{REMOTE_ROOT}/enable"])
elif args.command == "capture-once":
adb(serial, ["shell", "mkdir", "-p", REMOTE_ROOT])
adb(serial, ["shell", f"date +%s%3N > {REMOTE_ROOT}/capture-once.request"])
elif args.command == "pull-latest":
tmp = subprocess.check_output((["adb"] + (["-s", serial] if serial else []) +
["shell", "cat", f"{REMOTE_ROOT}/latest-session.txt"]),
text=True, encoding="utf-8", errors="replace").strip()
if not tmp:
raise SystemExit("no latest-session.txt on device")
output = Path(args.output)
output.mkdir(parents=True, exist_ok=True)
adb(serial, ["pull", tmp, str(output / Path(tmp).name)])
if __name__ == "__main__":
main()