harfbuzz/perf
Behdad Esfahbod dd005911b9 [benchmark-set] Reduce lookup benchmark overhead
Turnsout 90% was overhead...  Now lookup is in the 4ns ballpark.
2022-04-29 12:23:53 -06:00
..
fonts [perf] Err. Remove HUGE font from perf suite 2022-04-21 13:51:37 -06:00
texts Rename HBGlyphID to HBGlyphID16 2021-09-19 16:30:12 -04:00
README.md [perf] Add missing ninja command in profiling instructions. 2022-04-21 11:16:12 -06:00
benchmark-map.cc [perf/benchmark-map] Adjust range specifiers 2022-04-21 11:16:12 -06:00
benchmark-set.cc [benchmark-set] Reduce lookup benchmark overhead 2022-04-29 12:23:53 -06:00
benchmark-subset.cc [perf] Err. Remove HUGE font from perf suite 2022-04-21 13:51:37 -06:00
meson.build [perf] Start writing subset benchmarks. 2022-04-21 11:16:12 -06:00
perf-draw.hh [perf/perf] Fix run when ttfparser is not available 2022-04-21 11:16:12 -06:00
perf-extents.hh [perf/perf] Fix run when ttfparser is not available 2022-04-21 11:16:12 -06:00
perf-shaping.hh [blob] Add failing versions of create API 2021-06-15 13:56:30 -06:00
perf.cc Remove remaining traces of HB_EXPERIMENTAL_API 2022-02-13 13:21:14 -06:00
run.sh [perf] More rename 2019-12-10 12:43:42 -06:00

README.md

Building and Running

Benchmarks are implemented using Google Benchmark.

To build the benchmarks in this directory you need to set the benchmark option while configuring the build with meson:

meson configure build -Dbenchmark=enabled --buildtype=release

Then build the benchmark binaries with ninja:

ninja -Cbuild perf/benchmark-set

Finally, to run one of the benchmarks:

./build/perf/benchmark-set

It's possible to filter the benchmarks being run and customize the output via flags to the benchmark binary. See the Google Benchmark User Guide for more details.

Profiling

Configure the build to include debug information for profiling:

CXXFLAGS="-fno-omit-frame-pointer" meson --reconfigure build -Dbenchmark=enabled --buildtype=debug
ninja -Cbuild

Then run the benchmark with perf:

perf record -g -o ~/tmp/profiles/subset.prof ./build/perf/benchmark-subset --benchmark_filter="BM_subset_codepoints/subset_notocjk/100000" --benchmark_repetitions=5

You probably want to filter to a specific benchmark of interest and set the number of repititions high enough to get a good sampling of profile data.

Finally view the profile with:

perf report -i ~/tmp/profiles/subset.prof