skia2/tools/perf-canvaskit-puppeteer/README.md
Kevin Lubick bd71936196 [canvaskit] Document perf-canvaskit-puppeteer
We also catch any errors that happen during running the
test or flushing. This allows them to show up in the CI logs.

For skottie-frames in particular, we stop clearing the canvas
before each render, as that was masking an error (and not how
we do things on skottie.skia.org).

Change-Id: I83936a35b6c314da76a0a64e15deaabd156e71f2
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/421923
Reviewed-by: Kevin Lubick <kjlubick@google.com>
2021-06-28 14:59:24 +00:00

2.9 KiB

Measuring the performance of CanvasKit using Puppeteer and Chrome.

Initial setup

Run npm ci to install the dependencies need to run the tests. In //modules/canvaskit, run make release to build the canvaskit that will be used. With modifications to the Makefile, other builds (e.g. make profile) can be used as well.

If needed, one can download the lottie-samples and/or skp assets from CIPD using the sk tool:

sk asset download lottie-samples ~/Downloads/lottie-samples
sk asset download skps ~/Downloads/skps

The actual location that these assets can be downloaded to is not important - the Makefile assumes them to be in Downloads, but that can be modified by the local user.

Basic Performance Tests

We have a harness for running benchmarks. Benchmark code snippets can be added to canvas_perf.js. The harness itself is the canvas_perf.html and benchmark.js. It will run the "test" portion of the code on multiple frames and gather data.

To run the benchmarks, run make perf_js. By default, this will use the most recent release build of canvaskit done locally. If you want to only run one or a few, modify the canvas_perf.js file by changing the relevent tests.push to onlytests.push and then run make perf_js.

On the CI, the results from these tests are uploaded to Perf. For example: https://perf.skia.org/e/?queries=test%3Dcanvas_drawOval We include metrics such as the 90th, 95th, and 99th percentile frame, average frame time, median frame time, and standard deviation. There are three types of measurements: without_flush_ms is the measurement of the test() function; with_flush_ms is the measurement of test() and the subsequent flush() call; total_frame_ms is the frame-to-frame time. Frame-to-frame is important to measure because it accounts for any work the GPU needs to do, even after CanvasKit flushes.

Skottie Frames Performance

There is a harness that gathers data about rendering 600 frames of a skottie animation, cycling through it in a similar fashion to how it would be displayed to a user (e.g. as it is on skottie.skia.org).

To test it locally with a specific skottie animation, feel free to modify the Makefile to adjust the input_lottie argument and then run make frames. The harness itself is skottie-frames.html and benchmark.js.

On the CI, the results from these tests are uploaded to Perf. For example: https://perf.skia.org/e/?queries=test%3Dlego_loader We include metrics such as the first 5 frame times, average frame times, 90th, 95th and 99th percentile frame time.

SKP Performance

There is a harness that repeatedly will draw an SKP and measure various metrics. This is handled by skottie-frames.html and benchmark.js. As before, feel free to modify the Makefile (the input_skp argument) and run make skp.

On the CI, the results from these tests are uploaded to Perf. For example: https://perf.skia.org/e/?queries=binary%3DCanvasKit%26test%3Ddesk_chalkboard.skp