[perf] Add benchmark-ot
diff --git a/perf/Makefile.am b/perf/Makefile.am
index a28a3ef..1e67b92 100644
--- a/perf/Makefile.am
+++ b/perf/Makefile.am
@@ -8,6 +8,7 @@
meson.build \
benchmark-font.cc \
benchmark-map.cc \
+ benchmark-ot.cc \
benchmark-set.cc \
benchmark-shape.cc \
benchmark-subset.cc \
diff --git a/perf/benchmark-ot.cc b/perf/benchmark-ot.cc
new file mode 100644
index 0000000..88d443c
--- /dev/null
+++ b/perf/benchmark-ot.cc
@@ -0,0 +1,35 @@
+/*
+ * Benchmarks for hb_set_t operations.
+ */
+#include "benchmark/benchmark.h"
+
+#include "hb-ot.h"
+
+static void BM_hb_ot_tags_from_script_and_language (benchmark::State& state,
+ hb_script_t script,
+ const char *language_str) {
+
+ hb_language_t language = hb_language_from_string (language_str, -1);
+
+ hb_tag_t script_tags[HB_OT_MAX_TAGS_PER_SCRIPT];
+ unsigned script_count = HB_OT_MAX_TAGS_PER_SCRIPT;
+
+ hb_tag_t language_tags[HB_OT_MAX_TAGS_PER_LANGUAGE];
+ unsigned language_count = HB_OT_MAX_TAGS_PER_LANGUAGE;
+
+ for (auto _ : state) {
+ hb_ot_tags_from_script_and_language (script,
+ language,
+ &script_count /* IN/OUT */,
+ script_tags /* OUT */,
+ &language_count /* IN/OUT */,
+ language_tags /* OUT */);
+ }
+}
+BENCHMARK_CAPTURE (BM_hb_ot_tags_from_script_and_language, COMMON zh_CN, HB_SCRIPT_COMMON, "zh_CN");
+BENCHMARK_CAPTURE (BM_hb_ot_tags_from_script_and_language, COMMON en_US, HB_SCRIPT_COMMON, "en_US");
+BENCHMARK_CAPTURE (BM_hb_ot_tags_from_script_and_language, LATIN en_US, HB_SCRIPT_LATIN, "en_US");
+BENCHMARK_CAPTURE (BM_hb_ot_tags_from_script_and_language, COMMON none, HB_SCRIPT_LATIN, nullptr);
+BENCHMARK_CAPTURE (BM_hb_ot_tags_from_script_and_language, LATIN none, HB_SCRIPT_LATIN, nullptr);
+
+BENCHMARK_MAIN();
diff --git a/perf/meson.build b/perf/meson.build
index 93d7b4d..f2f181a 100644
--- a/perf/meson.build
+++ b/perf/meson.build
@@ -21,6 +21,16 @@
install: false,
), workdir: meson.current_source_dir() / '..', timeout: 100)
+benchmark('benchmark-ot', executable('benchmark-ot', 'benchmark-ot.cc',
+ dependencies: [
+ google_benchmark_dep,
+ ],
+ cpp_args: [],
+ include_directories: [incconfig, incsrc],
+ link_with: [libharfbuzz],
+ install: false,
+), workdir: meson.current_source_dir() / '..', timeout: 100)
+
benchmark('benchmark-set', executable('benchmark-set', 'benchmark-set.cc',
dependencies: [
google_benchmark_dep,