1 /*
2 * Copyright © 2024 Google, Inc.
3 *
4 * This is part of HarfBuzz, a text shaping library.
5 *
6 * Permission is hereby granted, without written agreement and without
7 * license or royalty fees, to use, copy, modify, and distribute this
8 * software and its documentation for any purpose, provided that the
9 * above copyright notice and the following two paragraphs appear in
10 * all copies of this software.
11 *
12 * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
13 * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
14 * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
15 * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
16 * DAMAGE.
17 *
18 * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
19 * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
20 * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
21 * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
22 * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
23 *
24 * Author(s): Behdad Esfahbod
25 */
26
27 #ifndef HB_BENCHMARK_HH
28 #define HB_BENCHMARK_HH
29
30 #include <hb-config.hh>
31
32 #include <hb.h>
33 #include <hb-subset.h>
34
35 #include <hb-ot.h>
36 #ifdef HAVE_FREETYPE
37 #include <hb-ft.h>
38 #endif
39 #ifdef HAVE_CORETEXT
40 #include <hb-coretext.h>
41 #endif
42
43 #include <benchmark/benchmark.h>
44
45 #include <cassert>
46 #include <cstdlib>
47 #include <cstring>
48
49
50 HB_BEGIN_DECLS
51
52 static inline hb_face_t *
hb_benchmark_face_create_from_file_or_fail(const char * font_path,unsigned face_index)53 hb_benchmark_face_create_from_file_or_fail (const char *font_path,
54 unsigned face_index)
55 {
56 const char *loader = getenv ("HB_FACE_LOADER");
57 if (loader && !*loader)
58 loader = nullptr;
59
60 #ifdef HAVE_FREETYPE
61 if (loader && !strcmp (loader, "ft"))
62 return hb_ft_face_create_from_file_or_fail (font_path, face_index);
63 #endif
64 #ifdef HAVE_CORETEXT
65 if (loader && !strcmp (loader, "coretext"))
66 return hb_coretext_face_create_from_file_or_fail (font_path, face_index);
67 #endif
68 if (!loader || !strcmp (loader, "ot"))
69 return hb_face_create_from_file_or_fail (font_path, face_index);
70
71 assert (false);
72 }
73
74 HB_END_DECLS
75
76 #endif /* HB_BENCHMARK_HH */
77