1*c8dee2aaSAndroid Build Coastguard Worker# skpbench 2*c8dee2aaSAndroid Build Coastguard Worker 3*c8dee2aaSAndroid Build Coastguard Workerskpbench is a benchmarking tool for replaying skp or mksp files on android devices. 4*c8dee2aaSAndroid Build Coastguard Workerit achieves a lower variance in framerate by controlling the clock speed and stopping 5*c8dee2aaSAndroid Build Coastguard Workerall other processes that could cause interference. 6*c8dee2aaSAndroid Build Coastguard Worker 7*c8dee2aaSAndroid Build Coastguard Worker## Build 8*c8dee2aaSAndroid Build Coastguard Worker 9*c8dee2aaSAndroid Build Coastguard Workerskpbench consists of the skpbench binary which must be built for the phone you intend to run on, 10*c8dee2aaSAndroid Build Coastguard Workerand skpbench.py which runs on the machine the phone is connected to via ADB and is the entry point. 11*c8dee2aaSAndroid Build Coastguard Worker 12*c8dee2aaSAndroid Build Coastguard WorkerThe to build skia for android are at https://skia.org/user/build#android and reproduced here. 13*c8dee2aaSAndroid Build Coastguard Worker 14*c8dee2aaSAndroid Build Coastguard WorkerDownload the Android NDK 15*c8dee2aaSAndroid Build Coastguard Worker 16*c8dee2aaSAndroid Build Coastguard Worker``` 17*c8dee2aaSAndroid Build Coastguard Worker./bin/fetch-sk 18*c8dee2aaSAndroid Build Coastguard Worker./bin/sk asset download android_ndk_linux /tmp/ndk 19*c8dee2aaSAndroid Build Coastguard Worker``` 20*c8dee2aaSAndroid Build Coastguard Worker 21*c8dee2aaSAndroid Build Coastguard WorkerAfter this is set up once, build skpbench for your target cpu (assumed to be arm64 here for a Pixel 3) 22*c8dee2aaSAndroid Build Coastguard Worker 23*c8dee2aaSAndroid Build Coastguard Worker``` 24*c8dee2aaSAndroid Build Coastguard Workerbin/gn gen out/arm64 --args='ndk="/tmp/ndk" target_cpu="arm64" is_debug=false' 25*c8dee2aaSAndroid Build Coastguard Workerninja -C out/arm64 skpbench 26*c8dee2aaSAndroid Build Coastguard Worker``` 27*c8dee2aaSAndroid Build Coastguard Worker 28*c8dee2aaSAndroid Build Coastguard Worker## Benchmark an SKP on a connected device. 29*c8dee2aaSAndroid Build Coastguard Worker 30*c8dee2aaSAndroid Build Coastguard WorkerFirst, copy the built skpbench binary and an example skp file to the device. 31*c8dee2aaSAndroid Build Coastguard Worker(or pull a skp corpus using instructions in the section below) 32*c8dee2aaSAndroid Build Coastguard Worker 33*c8dee2aaSAndroid Build Coastguard Worker``` 34*c8dee2aaSAndroid Build Coastguard Workeradb push out/arm64/skpbench /data/local/tmp 35*c8dee2aaSAndroid Build Coastguard Workeradb push /home/nifong/Downloads/foo.skp /data/local/tmp/skps/ 36*c8dee2aaSAndroid Build Coastguard Worker``` 37*c8dee2aaSAndroid Build Coastguard Worker 38*c8dee2aaSAndroid Build Coastguard WorkerRun skpbench.py 39*c8dee2aaSAndroid Build Coastguard Worker 40*c8dee2aaSAndroid Build Coastguard Worker``` 41*c8dee2aaSAndroid Build Coastguard Workerpython tools/skpbench/skpbench.py \ 42*c8dee2aaSAndroid Build Coastguard Worker --adb \ 43*c8dee2aaSAndroid Build Coastguard Worker --config gles \ 44*c8dee2aaSAndroid Build Coastguard Worker /data/local/tmp/skpbench \ 45*c8dee2aaSAndroid Build Coastguard Worker /data/local/tmp/skps/foo.skp 46*c8dee2aaSAndroid Build Coastguard Worker``` 47*c8dee2aaSAndroid Build Coastguard Worker 48*c8dee2aaSAndroid Build Coastguard Worker`--adb` specifies that it should use adb to the only connected device and run skpbench there. 49*c8dee2aaSAndroid Build Coastguard Worker`--force` is necessary because we don't yet have a configuration to monitor vitals on the Pixel 3. 50*c8dee2aaSAndroid Build Coastguard Worker`--config gles` specifies Open GL ES is the backend GPU config to use. 51*c8dee2aaSAndroid Build Coastguard Worker 52*c8dee2aaSAndroid Build Coastguard WorkerAdditional documentation of arguments is printed by `python tools/skpbench/skpbench.py --help` 53*c8dee2aaSAndroid Build Coastguard Worker 54*c8dee2aaSAndroid Build Coastguard WorkerOutput appears in the following format 55*c8dee2aaSAndroid Build Coastguard Worker``` 56*c8dee2aaSAndroid Build Coastguard Worker accum median max min stddev samples sample_ms clock metric config bench 57*c8dee2aaSAndroid Build Coastguard Worker 0.1834 0.1832 0.1897 0.1707 1.59% 101 50 cpu ms gles foo.skp 58*c8dee2aaSAndroid Build Coastguard Worker``` 59*c8dee2aaSAndroid Build Coastguard Worker 60*c8dee2aaSAndroid Build Coastguard Worker`accum` is the time taken to draw all frames, divided by the number of frames. 61*c8dee2aaSAndroid Build Coastguard Worker`metric` specifies that the unit is ms (milliseconds per frame) 62*c8dee2aaSAndroid Build Coastguard Worker 63*c8dee2aaSAndroid Build Coastguard Worker## Production 64*c8dee2aaSAndroid Build Coastguard Worker 65*c8dee2aaSAndroid Build Coastguard Workerskpbench is run as a tryjob from gerrit, where it uploads the results to perf.skia.org. 66*c8dee2aaSAndroid Build Coastguard WorkerOnce such job name is `Perf-Android-Clang-Pixel4XL-GPU-Adreno640-arm64-Release-All-Android_Skpbench` 67*c8dee2aaSAndroid Build Coastguard Worker 68*c8dee2aaSAndroid Build Coastguard WorkerPerf results are available by querying with this or similar. 69*c8dee2aaSAndroid Build Coastguard Worker extra_config = Android_Skpbench 70*c8dee2aaSAndroid Build Coastguard Worker sub_result = accum_cpu_ms 71*c8dee2aaSAndroid Build Coastguard Worker 72*c8dee2aaSAndroid Build Coastguard WorkerExample perf query 73*c8dee2aaSAndroid Build Coastguard Workerhttps://perf.skia.org/e/?queries=extra_config%3DAndroid_Skpbench%26sub_result%3Daccum_cpu_ms 74