From 29903f46b92db764ba8e6b6422c2128c011c7223 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Fri, 2 Dec 2022 17:45:01 -0700 Subject: [PATCH] [benchmark-subset] Cache (preprocessed) face amongst runs --- perf/benchmark-subset.cc | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/perf/benchmark-subset.cc b/perf/benchmark-subset.cc index 4cd8d3f0c..237dbe480 100644 --- a/perf/benchmark-subset.cc +++ b/perf/benchmark-subset.cc @@ -123,7 +123,12 @@ static void BM_subset (benchmark::State &state, { unsigned subset_size = state.range(0); - hb_face_t *face; + hb_face_t *face = nullptr; + + static hb_face_t *cached_face; + static const char *cached_font_path; + + if (!cached_font_path || strcmp (cached_font_path, test_input.font_path)) { hb_blob_t *blob = hb_blob_create_from_file_or_fail (test_input.font_path); assert (blob); @@ -131,7 +136,15 @@ static void BM_subset (benchmark::State &state, hb_blob_destroy (blob); face = preprocess_face (face); + + if (cached_face) + hb_face_destroy (cached_face); + + cached_face = hb_face_reference (face); + cached_font_path = test_input.font_path; } + else + face = hb_face_reference (cached_face); hb_subset_input_t* input = hb_subset_input_create_or_fail (); assert (input);