Wraps the cargo-ndk/Gradle/keystore/apksigner build and the install/tap-by-label/read-report cycle that P0's work had been retyping by hand, so it stops costing time and mistakes. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
65 lines
2.3 KiB
Bash
Executable File
65 lines
2.3 KiB
Bash
Executable File
#!/bin/sh
|
|
# Installs and runs the iris `bench` build on this checkout's own emulator
|
|
# (per this-machine-android's per-checkout-AVD rule; `emu serial` picks it)
|
|
# and prints the report -- the iris half of `app/transcript-bench.sh`'s
|
|
# job. No coordinates: the button is found by its accessibility label
|
|
# through `ui-trace`, per AGENTS.md's "Driving the UI".
|
|
#
|
|
# Usage: ./run-bench.sh [--apk PATH]
|
|
# Defaults to this checkout's own release APK
|
|
# (app/build/outputs/apk/release/app-release.apk) if it exists, else the
|
|
# debug one -- build one first with ./build-apk.sh.
|
|
set -eu
|
|
cd "$(dirname "$0")"
|
|
|
|
APK=""
|
|
while [ $# -gt 0 ]; do
|
|
case "$1" in
|
|
--apk) APK="$2"; shift 2 ;;
|
|
*) echo "run-bench.sh: unknown argument: $1" >&2; exit 1 ;;
|
|
esac
|
|
done
|
|
if [ -z "$APK" ]; then
|
|
if [ -f app/build/outputs/apk/release/app-release.apk ]; then
|
|
APK=app/build/outputs/apk/release/app-release.apk
|
|
else
|
|
APK=app/build/outputs/apk/debug/app-debug.apk
|
|
fi
|
|
fi
|
|
if [ ! -f "$APK" ]; then
|
|
echo "run-bench.sh: no APK at $APK -- run ./build-apk.sh first" >&2
|
|
exit 1
|
|
fi
|
|
|
|
SERIAL=$(emu serial)
|
|
PKG=$(aapt2 dump badging "$APK" 2>/dev/null | sed -n "s/^package: name='\\([^']*\\)'.*/\\1/p")
|
|
if [ -z "$PKG" ]; then
|
|
BUILD_TOOLS=$(ls -d "$HOME"/Android/Sdk/build-tools/*/ | sort -V | tail -1)
|
|
PKG=$("${BUILD_TOOLS}aapt2" dump badging "$APK" | sed -n "s/^package: name='\\([^']*\\)'.*/\\1/p")
|
|
fi
|
|
|
|
echo "run-bench.sh: installing $APK ($PKG) on $SERIAL"
|
|
adb -s "$SERIAL" install -r "$APK" >/dev/null
|
|
adb -s "$SERIAL" shell am force-stop "$PKG"
|
|
adb -s "$SERIAL" logcat -c
|
|
adb -s "$SERIAL" shell am start -n "$PKG/dev.iris.android.demo.MainActivity" >/dev/null
|
|
|
|
ui-trace record -s "$SERIAL" -d 3000 --do "tap 'Run benchmark'" -o /tmp/run-bench-tap.txt >/dev/null
|
|
|
|
# Poll for the report line rather than a fixed sleep -- the run itself is a
|
|
# fixed script (24 swipes + a 20s streaming phase) but device speed varies.
|
|
i=0
|
|
while [ "$i" -lt 90 ]; do
|
|
LINE=$(adb -s "$SERIAL" logcat -d -s iris-android-app:I 2>/dev/null | grep "iris bench report:" || true)
|
|
if [ -n "$LINE" ]; then
|
|
break
|
|
fi
|
|
i=$((i + 1))
|
|
sleep 1
|
|
done
|
|
if [ -z "$LINE" ]; then
|
|
echo "run-bench.sh: no report after 90s -- check logcat by hand" >&2
|
|
exit 1
|
|
fi
|
|
adb -s "$SERIAL" logcat -d -s iris-android-app:I | grep -A 6 "iris bench report:"
|