| # Building and Running |
| |
| Benchmarks are implemented using [Google Benchmark](https://github.com/google/benchmark). |
| |
| To build the benchmarks in this directory you need to set the benchmark |
| option while configuring the build with meson: |
| |
| ``` |
| meson build -Dbenchmark=enabled --buildtype=release |
| ``` |
| or: |
| ``` |
| meson build -Dbenchmark=enabled --buildtype=debugoptimized |
| ``` |
| |
| |
| Then build a specific benchmark binaries with ninja: |
| ``` |
| ninja -Cbuild perf/benchmark-set |
| ``` |
| or just build the whole project: |
| ``` |
| ninja -Cbuild |
| ``` |
| |
| 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](https://github.com/google/benchmark/blob/main/docs/user_guide.md#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 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 |