#!/bin/sh # Scrolls the transcript and prints the app's own render report -- the # standard measurement for "is the transcript smooth", so a perf session # starts from a number instead of re-inventing this loop in /tmp. # # ./transcript-bench.sh restart the app, open the first # session, scroll, report # ./transcript-bench.sh -k keep whatever screen is open now # ./transcript-bench.sh -n 4 swipe cycles (default 6; one cycle is # two swipes back and two forward) # # What it prints is the report the in-app copy button produces, plus any # duplicate-key warnings the flatten logged. Absolute frame times from the # emulator are worthless (it renders in software); what transfers is the # report's own accounting -- what was on screen, and where the draw phase # went. Compare two runs of this with the same gestures, not one run # against a phone. # # Coordinates are the ai-app AVD's 1080x2400 screen: the report button in # the session top bar, and the first row of the session list. set -eu cd "$(dirname "$0")" . ./android-env.sh >/dev/null 2>&1 keep="" cycles=6 while getopts kn: flag; do case $flag in k) keep=1 ;; n) cycles=$OPTARG ;; *) exit 2 ;; esac done if [ -z "$keep" ]; then adb shell am force-stop com.example.aiapp adb shell am start -n com.example.aiapp/.MainActivity >/dev/null sleep 5 ui-trace record -d 3000 --do 'tap 500 545' -o /tmp/bench-open.txt >/dev/null 2>&1 sleep 3 fi # First tap resets the report's "work since last copied" window, so the # numbers cover exactly the swipes between the two taps. ui-trace record -d 2000 --do 'tap 723 205' -o /tmp/bench-reset.txt >/dev/null 2>&1 adb logcat -c DO="" i=0 while [ "$i" -lt "$cycles" ]; do DO="$DO --do 'swipe 540 700 540 1600 200' --do 'wait 500'" DO="$DO --do 'swipe 540 700 540 1600 200' --do 'wait 500'" DO="$DO --do 'swipe 540 1600 540 700 200' --do 'wait 500'" DO="$DO --do 'swipe 540 1600 540 700 200' --do 'wait 500'" i=$((i + 1)) done eval ui-trace record -d $((cycles * 4400 + 2000)) $DO -o /tmp/bench-scroll.txt >/dev/null 2>&1 ui-trace record -d 2000 --do 'tap 723 205' -o /tmp/bench-report.txt >/dev/null 2>&1 sleep 1 adb logcat -d -s ai-app:I | sed -n '/ai-app render report/,$p' | sed 's/^.*ai-app : //' adb logcat -d 2>/dev/null | grep -i "duplicate unit key" | head -3 || true