xref: /aosp_15_r20/external/skia/tools/skpbench/README.md (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
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