[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,