aboutsummaryrefslogtreecommitdiff
path: root/perf/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'perf/README.md')
-rw-r--r--perf/README.md54
1 files changed, 54 insertions, 0 deletions
diff --git a/perf/README.md b/perf/README.md
new file mode 100644
index 000000000..91f493514
--- /dev/null
+++ b/perf/README.md
@@ -0,0 +1,54 @@
+# 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