diff --git a/perf/Makefile.am b/perf/Makefile.am index 5e08eebe7..78ca3bafb 100644 --- a/perf/Makefile.am +++ b/perf/Makefile.am @@ -6,9 +6,7 @@ SUBDIRS = EXTRA_DIST += meson.build \ - perf-draw.hh \ - perf-extents.hh \ - perf.cc \ + benchmark-font.cc \ benchmark-map.cc \ benchmark-set.cc \ benchmark-shape.cc \ diff --git a/perf/benchmark-font.cc b/perf/benchmark-font.cc new file mode 100644 index 000000000..e56fb60fc --- /dev/null +++ b/perf/benchmark-font.cc @@ -0,0 +1,157 @@ +#include "benchmark/benchmark.h" + +#include "hb.h" +#include "hb-ot.h" +#include "hb-ft.h" + + +#define SUBSET_FONT_BASE_PATH "test/subset/data/fonts/" + +struct test_input_t +{ + const char *font_path; +} tests[] = +{ + {SUBSET_FONT_BASE_PATH "SourceSansPro-Regular.otf"}, + {SUBSET_FONT_BASE_PATH "AdobeVFPrototype.otf"}, + {SUBSET_FONT_BASE_PATH "AdobeVFPrototype.otf"}, + {SUBSET_FONT_BASE_PATH "SourceSerifVariable-Roman.ttf"}, + {SUBSET_FONT_BASE_PATH "SourceSerifVariable-Roman.ttf"}, + {SUBSET_FONT_BASE_PATH "Comfortaa-Regular-new.ttf"}, + {SUBSET_FONT_BASE_PATH "Comfortaa-Regular-new.ttf"}, + {SUBSET_FONT_BASE_PATH "Roboto-Regular.ttf"}, +}; + + +enum backend_t { HARFBUZZ, FREETYPE }; + +enum operation_t +{ + glyph_extents, + glyph_shape, +}; + +static void +_hb_move_to (hb_draw_funcs_t *, void *, hb_draw_state_t *, float, float, void *) {} + +static void +_hb_line_to (hb_draw_funcs_t *, void *, hb_draw_state_t *, float, float, void *) {} + +static void +_hb_quadratic_to (hb_draw_funcs_t *, void *, hb_draw_state_t *, float, float, float, float, void *) {} + +static void +_hb_cubic_to (hb_draw_funcs_t *, void *, hb_draw_state_t *, float, float, float, float, float, float, void *) {} + +static void +_hb_close_path (hb_draw_funcs_t *, void *, hb_draw_state_t *, void *) {} + +static hb_draw_funcs_t * +_draw_funcs_create (void) +{ + hb_draw_funcs_t *draw_funcs = hb_draw_funcs_create (); + hb_draw_funcs_set_move_to_func (draw_funcs, _hb_move_to, nullptr, nullptr); + hb_draw_funcs_set_line_to_func (draw_funcs, _hb_line_to, nullptr, nullptr); + hb_draw_funcs_set_quadratic_to_func (draw_funcs, _hb_quadratic_to, nullptr, nullptr); + hb_draw_funcs_set_cubic_to_func (draw_funcs, _hb_cubic_to, nullptr, nullptr); + hb_draw_funcs_set_close_path_func (draw_funcs, _hb_close_path, nullptr, nullptr); + return draw_funcs; +} + +static void BM_Font (benchmark::State &state, + bool is_var, backend_t backend, operation_t operation, + const test_input_t &test_input) +{ + hb_font_t *font; + unsigned num_glyphs; + { + hb_blob_t *blob = hb_blob_create_from_file_or_fail (test_input.font_path); + assert (blob); + hb_face_t *face = hb_face_create (blob, 0); + hb_blob_destroy (blob); + num_glyphs = hb_face_get_glyph_count (face); + font = hb_font_create (face); + hb_face_destroy (face); + } + + if (is_var) + { + hb_variation_t wght = {HB_TAG ('w','g','h','t'), 500}; + hb_font_set_variations (font, &wght, 1); + } + + switch (backend) + { + case HARFBUZZ: + hb_ot_font_set_funcs (font); + break; + + case FREETYPE: + hb_ft_font_set_funcs (font); + break; + } + + switch (operation) + { + case glyph_extents: + { + hb_glyph_extents_t extents; + for (auto _ : state) + for (unsigned gid = 0; gid < num_glyphs; ++gid) + hb_font_get_glyph_extents (font, gid, &extents); + break; + } + case glyph_shape: + { + hb_draw_funcs_t *draw_funcs = _draw_funcs_create (); + for (auto _ : state) + for (unsigned gid = 0; gid < num_glyphs; ++gid) + hb_font_get_glyph_shape (font, gid, draw_funcs, nullptr); + break; + hb_draw_funcs_destroy (draw_funcs); + } + } + + + hb_font_destroy (font); +} + +static void test_backend (backend_t backend, + const char *backend_name, + operation_t op, + const char *op_name, + const test_input_t &test_input) +{ + char name[1024] = "BM_Font/"; + strcat (name, op_name); + strcat (name, "/"); + strcat (name, backend_name); + strcat (name, strrchr (test_input.font_path, '/')); + + benchmark::RegisterBenchmark (name, BM_Font, false, backend, op, test_input) + ->Unit(benchmark::kMicrosecond); +} + +static void test_operation (operation_t op, + const char *op_name) +{ + for (auto& test_input : tests) + { + test_backend (HARFBUZZ, "hb", op, op_name, test_input); + test_backend (FREETYPE, "ft", op, op_name, test_input); + } +} + +int main(int argc, char** argv) +{ +#define TEST_OPERATION(op) test_operation (op, #op) + + TEST_OPERATION (glyph_extents); + TEST_OPERATION (glyph_shape); + +#undef TEST_OPERATION + + benchmark::Initialize(&argc, argv); + benchmark::RunSpecifiedBenchmarks(); + benchmark::Shutdown(); +} diff --git a/perf/benchmark-shape.cc b/perf/benchmark-shape.cc index d19470f81..924f4870e 100644 --- a/perf/benchmark-shape.cc +++ b/perf/benchmark-shape.cc @@ -3,6 +3,7 @@ #include "hb.h" + struct test_input_t { const char *text_path; @@ -28,6 +29,7 @@ struct test_input_t "perf/fonts/Roboto-Regular.ttf"}, }; + static void BM_Shape (benchmark::State &state, const test_input_t &input) { hb_font_t *font; diff --git a/perf/meson.build b/perf/meson.build index 97e8730af..93d7b4d7c 100644 --- a/perf/meson.build +++ b/perf/meson.build @@ -1,27 +1,17 @@ google_benchmark = subproject('google-benchmark') google_benchmark_dep = google_benchmark.get_variable('google_benchmark_dep') -ttf_parser_dep = null_dep -if get_option('experimental_api') and add_languages('rust', required: false, native: true) - ttf_parser_dep = subproject('ttf-parser').get_variable('ttf_parser_dep') -endif - -benchmark('perf', executable('perf', 'perf.cc', +benchmark('benchmark-font', executable('benchmark-font', 'benchmark-font.cc', dependencies: [ google_benchmark_dep, freetype_dep, - - # the last two, thread and dl, aren't nice as ttf-parser isn't no_std yet - # https://github.com/RazrFalcon/ttf-parser/issues/29 - ttf_parser_dep, thread_dep, cpp.find_library('dl'), ], - cpp_args: ttf_parser_dep.found() ? ['-DHAVE_TTFPARSER'] : [], + cpp_args: [], include_directories: [incconfig, incsrc], link_with: [libharfbuzz], install: false, ), workdir: meson.current_source_dir() / '..', timeout: 100) - -benchmark('benchmark-shape', executable('benchmark-shape', 'benchmark-shape.cc', +benchmark('benchmark-map', executable('benchmark-map', 'benchmark-map.cc', dependencies: [ google_benchmark_dep, ], @@ -41,7 +31,7 @@ benchmark('benchmark-set', executable('benchmark-set', 'benchmark-set.cc', install: false, ), workdir: meson.current_source_dir() / '..', timeout: 100) -benchmark('benchmark-map', executable('benchmark-map', 'benchmark-map.cc', +benchmark('benchmark-shape', executable('benchmark-shape', 'benchmark-shape.cc', dependencies: [ google_benchmark_dep, ], diff --git a/perf/perf-draw.hh b/perf/perf-draw.hh deleted file mode 100644 index d31201e37..000000000 --- a/perf/perf-draw.hh +++ /dev/null @@ -1,175 +0,0 @@ -#include "benchmark/benchmark.h" - -#include "hb.h" -#include "hb-ot.h" -#include "hb-ft.h" -#include FT_OUTLINE_H - -#ifdef HAVE_TTFPARSER -#include "ttfparser.h" -#endif - -#define HB_UNUSED __attribute__((unused)) - -static void -_hb_move_to (hb_draw_funcs_t *, void *, hb_draw_state_t *, float, float, void *) {} - -static void -_hb_line_to (hb_draw_funcs_t *, void *, hb_draw_state_t *, float, float, void *) {} - -static void -_hb_quadratic_to (hb_draw_funcs_t *, void *, hb_draw_state_t *, float, float, float, float, void *) {} - -static void -_hb_cubic_to (hb_draw_funcs_t *, void *, hb_draw_state_t *, float, float, float, float, float, float, void *) {} - -static void -_hb_close_path (hb_draw_funcs_t *, void *, hb_draw_state_t *, void *) {} - -static void -_ft_move_to (const FT_Vector* to HB_UNUSED, void* user HB_UNUSED) {} - -static void -_ft_line_to (const FT_Vector* to HB_UNUSED, void* user HB_UNUSED) {} - -static void -_ft_conic_to (const FT_Vector* control HB_UNUSED, const FT_Vector* to HB_UNUSED, - void* user HB_UNUSED) {} - -static void -_ft_cubic_to (const FT_Vector* control1 HB_UNUSED, const FT_Vector* control2 HB_UNUSED, - const FT_Vector* to HB_UNUSED, void* user HB_UNUSED) {} - -#ifdef HAVE_TTFPARSER -static void _tp_move_to (float x HB_UNUSED, float y HB_UNUSED, void *data HB_UNUSED) {} -static void _tp_line_to (float x, float y, void *data) {} -static void _tp_quad_to (float x1, float y1, float x, float y, void *data) {} -static void _tp_curve_to (float x1, float y1, float x2, float y2, float x, float y, void *data) {} -static void _tp_close_path (void *data) {} -#endif - -static void draw (benchmark::State &state, const char *font_path, bool is_var, backend_t backend) -{ - hb_font_t *font; - unsigned num_glyphs; - { - hb_blob_t *blob = hb_blob_create_from_file_or_fail (font_path); - assert (blob); - hb_face_t *face = hb_face_create (blob, 0); - hb_blob_destroy (blob); - num_glyphs = hb_face_get_glyph_count (face); - font = hb_font_create (face); - hb_face_destroy (face); - } - - if (backend == HARFBUZZ) - { - if (is_var) - { - hb_variation_t wght = {HB_TAG ('w','g','h','t'), 500}; - hb_font_set_variations (font, &wght, 1); - } - hb_draw_funcs_t *draw_funcs = hb_draw_funcs_create (); - hb_draw_funcs_set_move_to_func (draw_funcs, _hb_move_to, nullptr, nullptr); - hb_draw_funcs_set_line_to_func (draw_funcs, _hb_line_to, nullptr, nullptr); - hb_draw_funcs_set_quadratic_to_func (draw_funcs, _hb_quadratic_to, nullptr, nullptr); - hb_draw_funcs_set_cubic_to_func (draw_funcs, _hb_cubic_to, nullptr, nullptr); - hb_draw_funcs_set_close_path_func (draw_funcs, _hb_close_path, nullptr, nullptr); - - for (auto _ : state) - for (unsigned gid = 0; gid < num_glyphs; ++gid) - hb_font_get_glyph_shape (font, gid, draw_funcs, nullptr); - - hb_draw_funcs_destroy (draw_funcs); - } - else if (backend == FREETYPE) - { - if (is_var) - { - hb_variation_t wght = {HB_TAG ('w','g','h','t'), 500}; - hb_font_set_variations (font, &wght, 1); - } - hb_ft_font_set_funcs (font); - FT_Face ft_face = hb_ft_font_get_face (font); - hb_ft_font_set_load_flags (font, FT_LOAD_NO_HINTING | FT_LOAD_NO_SCALE); - - FT_Outline_Funcs draw_funcs; - draw_funcs.move_to = (FT_Outline_MoveToFunc) _ft_move_to; - draw_funcs.line_to = (FT_Outline_LineToFunc) _ft_line_to; - draw_funcs.conic_to = (FT_Outline_ConicToFunc) _ft_conic_to; - draw_funcs.cubic_to = (FT_Outline_CubicToFunc) _ft_cubic_to; - draw_funcs.shift = 0; - draw_funcs.delta = 0; - - for (auto _ : state) - for (unsigned gid = 0; gid < num_glyphs; ++gid) - { - FT_Load_Glyph (ft_face, gid, FT_LOAD_NO_HINTING | FT_LOAD_NO_SCALE); - FT_Outline_Decompose (&ft_face->glyph->outline, &draw_funcs, nullptr); - } - } - else if (backend == TTF_PARSER) - { -#ifdef HAVE_TTFPARSER - ttfp_face *tp_font = (ttfp_face *) malloc (ttfp_face_size_of ()); - hb_blob_t *blob = hb_face_reference_blob (hb_font_get_face (font)); - assert (ttfp_face_init (hb_blob_get_data (blob, nullptr), hb_blob_get_length (blob), 0, tp_font)); - if (is_var) ttfp_set_variation (tp_font, TTFP_TAG('w','g','h','t'), 500); - - ttfp_outline_builder builder; - builder.move_to = _tp_move_to; - builder.line_to = _tp_line_to; - builder.quad_to = _tp_quad_to; - builder.curve_to = _tp_curve_to; - builder.close_path = _tp_close_path; - - ttfp_rect bbox; - for (auto _ : state) - for (unsigned gid = 0; gid < num_glyphs; ++gid) - ttfp_outline_glyph (tp_font, builder, &builder, gid, &bbox); - - hb_blob_destroy (blob); - free (tp_font); -#else - state.SkipWithError("ttfparser not available."); - return; -#endif - } - else abort (); - - hb_font_destroy (font); -} - -#define FONT_BASE_PATH "test/subset/data/fonts/" - -BENCHMARK_CAPTURE (draw, cff - ot - SourceSansPro, FONT_BASE_PATH "SourceSansPro-Regular.otf", false, HARFBUZZ); -BENCHMARK_CAPTURE (draw, cff - ft - SourceSansPro, FONT_BASE_PATH "SourceSansPro-Regular.otf", false, FREETYPE); -BENCHMARK_CAPTURE (draw, cff - tp - SourceSansPro, FONT_BASE_PATH "SourceSansPro-Regular.otf", false, TTF_PARSER); - -BENCHMARK_CAPTURE (draw, cff2 - ot - AdobeVFPrototype, FONT_BASE_PATH "AdobeVFPrototype.otf", false, HARFBUZZ); -BENCHMARK_CAPTURE (draw, cff2 - ft - AdobeVFPrototype, FONT_BASE_PATH "AdobeVFPrototype.otf", false, FREETYPE); -BENCHMARK_CAPTURE (draw, cff2 - tp - AdobeVFPrototype, FONT_BASE_PATH "AdobeVFPrototype.otf", false, TTF_PARSER); - -BENCHMARK_CAPTURE (draw, cff2/vf - ot - AdobeVFPrototype, FONT_BASE_PATH "AdobeVFPrototype.otf", true, HARFBUZZ); -BENCHMARK_CAPTURE (draw, cff2/vf - ft - AdobeVFPrototype, FONT_BASE_PATH "AdobeVFPrototype.otf", true, FREETYPE); -BENCHMARK_CAPTURE (draw, cff2/vf - tp - AdobeVFPrototype, FONT_BASE_PATH "AdobeVFPrototype.otf", true, TTF_PARSER); - -BENCHMARK_CAPTURE (draw, glyf - ot - SourceSerifVariable, FONT_BASE_PATH "SourceSerifVariable-Roman.ttf", false, HARFBUZZ); -BENCHMARK_CAPTURE (draw, glyf - ft - SourceSerifVariable, FONT_BASE_PATH "SourceSerifVariable-Roman.ttf", false, FREETYPE); -BENCHMARK_CAPTURE (draw, glyf - tp - SourceSerifVariable, FONT_BASE_PATH "SourceSerifVariable-Roman.ttf", false, TTF_PARSER); - -BENCHMARK_CAPTURE (draw, glyf/vf - ot - SourceSerifVariable, FONT_BASE_PATH "SourceSerifVariable-Roman.ttf", true, HARFBUZZ); -BENCHMARK_CAPTURE (draw, glyf/vf - ft - SourceSerifVariable, FONT_BASE_PATH "SourceSerifVariable-Roman.ttf", true, FREETYPE); -BENCHMARK_CAPTURE (draw, glyf/vf - tp - SourceSerifVariable, FONT_BASE_PATH "SourceSerifVariable-Roman.ttf", true, TTF_PARSER); - -BENCHMARK_CAPTURE (draw, glyf - ot - Comfortaa, FONT_BASE_PATH "Comfortaa-Regular-new.ttf", false, HARFBUZZ); -BENCHMARK_CAPTURE (draw, glyf - ft - Comfortaa, FONT_BASE_PATH "Comfortaa-Regular-new.ttf", false, FREETYPE); -BENCHMARK_CAPTURE (draw, glyf - tp - Comfortaa, FONT_BASE_PATH "Comfortaa-Regular-new.ttf", false, TTF_PARSER); - -BENCHMARK_CAPTURE (draw, glyf/vf - ot - Comfortaa, FONT_BASE_PATH "Comfortaa-Regular-new.ttf", true, HARFBUZZ); -BENCHMARK_CAPTURE (draw, glyf/vf - ft - Comfortaa, FONT_BASE_PATH "Comfortaa-Regular-new.ttf", true, FREETYPE); -BENCHMARK_CAPTURE (draw, glyf/vf - tp - Comfortaa, FONT_BASE_PATH "Comfortaa-Regular-new.ttf", true, TTF_PARSER); - -BENCHMARK_CAPTURE (draw, glyf - ot - Roboto, FONT_BASE_PATH "Roboto-Regular.ttf", false, HARFBUZZ); -BENCHMARK_CAPTURE (draw, glyf - ft - Roboto, FONT_BASE_PATH "Roboto-Regular.ttf", false, FREETYPE); -BENCHMARK_CAPTURE (draw, glyf - tp - Roboto, FONT_BASE_PATH "Roboto-Regular.ttf", false, TTF_PARSER); diff --git a/perf/perf-extents.hh b/perf/perf-extents.hh deleted file mode 100644 index c75252637..000000000 --- a/perf/perf-extents.hh +++ /dev/null @@ -1,101 +0,0 @@ -#include "benchmark/benchmark.h" - -#include "hb.h" -#include "hb-ft.h" -#include "hb-ot.h" - -#ifdef HAVE_TTFPARSER -#include "ttfparser.h" -#endif - -static void extents (benchmark::State &state, const char *font_path, bool is_var, backend_t backend) -{ - hb_font_t *font; - unsigned num_glyphs; - { - hb_blob_t *blob = hb_blob_create_from_file_or_fail (font_path); - assert (blob); - hb_face_t *face = hb_face_create (blob, 0); - hb_blob_destroy (blob); - num_glyphs = hb_face_get_glyph_count (face); - font = hb_font_create (face); - hb_face_destroy (face); - } - - if (is_var) - { - hb_variation_t wght = {HB_TAG ('w','g','h','t'), 500}; - hb_font_set_variations (font, &wght, 1); - } - - if (backend == HARFBUZZ || backend == FREETYPE) - { - if (backend == FREETYPE) - { - hb_ft_font_set_funcs (font); - hb_ft_font_set_load_flags (font, FT_LOAD_NO_HINTING | FT_LOAD_NO_SCALE); - } - - hb_glyph_extents_t extents; - for (auto _ : state) - for (unsigned gid = 0; gid < num_glyphs; ++gid) - hb_font_get_glyph_extents (font, gid, &extents); - } - else if (backend == TTF_PARSER) - { -#ifdef HAVE_TTFPARSER - ttfp_face *tp_font = (ttfp_face *) malloc (ttfp_face_size_of ()); - hb_blob_t *blob = hb_face_reference_blob (hb_font_get_face (font)); - assert (ttfp_face_init (hb_blob_get_data (blob, nullptr), hb_blob_get_length (blob), 0, tp_font)); - if (is_var) ttfp_set_variation (tp_font, TTFP_TAG('w','g','h','t'), 500); - - ttfp_rect bbox; - for (auto _ : state) - for (unsigned gid = 0; gid < num_glyphs; ++gid) - ttfp_get_glyph_bbox(tp_font, gid, &bbox); - - hb_blob_destroy (blob); - free (tp_font); -#else - state.SkipWithError("ttfparser not available."); - return; -#endif - } - - hb_font_destroy (font); -} - -#define FONT_BASE_PATH "test/subset/data/fonts/" - -BENCHMARK_CAPTURE (extents, cff - ot - SourceSansPro, FONT_BASE_PATH "SourceSansPro-Regular.otf", false, HARFBUZZ); -BENCHMARK_CAPTURE (extents, cff - ft - SourceSansPro, FONT_BASE_PATH "SourceSansPro-Regular.otf", false, FREETYPE); -BENCHMARK_CAPTURE (extents, cff - tp - SourceSansPro, FONT_BASE_PATH "SourceSansPro-Regular.otf", false, TTF_PARSER); - -BENCHMARK_CAPTURE (extents, cff2 - ot - AdobeVFPrototype, FONT_BASE_PATH "AdobeVFPrototype.otf", false, HARFBUZZ); -BENCHMARK_CAPTURE (extents, cff2 - ft - AdobeVFPrototype, FONT_BASE_PATH "AdobeVFPrototype.otf", false, FREETYPE); -BENCHMARK_CAPTURE (extents, cff2 - tp - AdobeVFPrototype, FONT_BASE_PATH "AdobeVFPrototype.otf", false, TTF_PARSER); - -BENCHMARK_CAPTURE (extents, cff2/vf - ot - AdobeVFPrototype, FONT_BASE_PATH "AdobeVFPrototype.otf", true, HARFBUZZ); -BENCHMARK_CAPTURE (extents, cff2/vf - ft - AdobeVFPrototype, FONT_BASE_PATH "AdobeVFPrototype.otf", true, FREETYPE); -BENCHMARK_CAPTURE (extents, cff2/vf - tp - AdobeVFPrototype, FONT_BASE_PATH "AdobeVFPrototype.otf", true, TTF_PARSER); - -BENCHMARK_CAPTURE (extents, glyf - ot - SourceSerifVariable, FONT_BASE_PATH "SourceSerifVariable-Roman.ttf", false, HARFBUZZ); -BENCHMARK_CAPTURE (extents, glyf - ft - SourceSerifVariable, FONT_BASE_PATH "SourceSerifVariable-Roman.ttf", false, FREETYPE); -BENCHMARK_CAPTURE (extents, glyf - tp - SourceSerifVariable, FONT_BASE_PATH "SourceSerifVariable-Roman.ttf", false, TTF_PARSER); - -BENCHMARK_CAPTURE (extents, glyf/vf - ot - SourceSerifVariable, FONT_BASE_PATH "SourceSerifVariable-Roman.ttf", true, HARFBUZZ); -BENCHMARK_CAPTURE (extents, glyf/vf - ft - SourceSerifVariable, FONT_BASE_PATH "SourceSerifVariable-Roman.ttf", true, FREETYPE); -BENCHMARK_CAPTURE (extents, glyf/vf - tp - SourceSerifVariable, FONT_BASE_PATH "SourceSerifVariable-Roman.ttf", true, TTF_PARSER); - -BENCHMARK_CAPTURE (extents, glyf - ot - Comfortaa, FONT_BASE_PATH "Comfortaa-Regular-new.ttf", false, HARFBUZZ); -BENCHMARK_CAPTURE (extents, glyf - ft - Comfortaa, FONT_BASE_PATH "Comfortaa-Regular-new.ttf", false, FREETYPE); -BENCHMARK_CAPTURE (extents, glyf - tp - Comfortaa, FONT_BASE_PATH "Comfortaa-Regular-new.ttf", false, TTF_PARSER); - -BENCHMARK_CAPTURE (extents, glyf/vf - ot - Comfortaa, FONT_BASE_PATH "Comfortaa-Regular-new.ttf", true, HARFBUZZ); -BENCHMARK_CAPTURE (extents, glyf/vf - ft - Comfortaa, FONT_BASE_PATH "Comfortaa-Regular-new.ttf", true, FREETYPE); -BENCHMARK_CAPTURE (extents, glyf/vf - tp - Comfortaa, FONT_BASE_PATH "Comfortaa-Regular-new.ttf", true, TTF_PARSER); - -BENCHMARK_CAPTURE (extents, glyf - ot - Roboto, FONT_BASE_PATH "Roboto-Regular.ttf", false, HARFBUZZ); -BENCHMARK_CAPTURE (extents, glyf - ft - Roboto, FONT_BASE_PATH "Roboto-Regular.ttf", false, FREETYPE); -BENCHMARK_CAPTURE (extents, glyf - tp - Roboto, FONT_BASE_PATH "Roboto-Regular.ttf", false, TTF_PARSER); - diff --git a/perf/perf.cc b/perf/perf.cc deleted file mode 100644 index bfe65d04b..000000000 --- a/perf/perf.cc +++ /dev/null @@ -1,13 +0,0 @@ -#include "benchmark/benchmark.h" - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#ifdef HAVE_FREETYPE -enum backend_t { HARFBUZZ, FREETYPE, TTF_PARSER }; -#include "perf-extents.hh" -#include "perf-draw.hh" -#endif - -BENCHMARK_MAIN ();