From 9eab3ac72dc9cbd404da3dc4ef82b798d5e42c0e Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Thu, 21 Jul 2022 12:35:19 -0600 Subject: [PATCH] [CoverageFormat2] Remove hand-written loop While on a fuzzer-found test case (added) that loop was faster, on real fonts, including NotoNastaliq in our benchmark, it was actually slower, which intuitively I would have expected. Still no idea why on that fuzzer case it's faster though. :( --- src/OT/Layout/Common/CoverageFormat2.hh | 35 +++--------------- ...inimized-hb-subset-fuzzer-4549523149553664 | Bin 0 -> 66032 bytes 2 files changed, 5 insertions(+), 30 deletions(-) create mode 100644 test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb-subset-fuzzer-4549523149553664 diff --git a/src/OT/Layout/Common/CoverageFormat2.hh b/src/OT/Layout/Common/CoverageFormat2.hh index 7548f0b47..4ddb2a73e 100644 --- a/src/OT/Layout/Common/CoverageFormat2.hh +++ b/src/OT/Layout/Common/CoverageFormat2.hh @@ -142,37 +142,12 @@ struct CoverageFormat2_4 hb_requires (hb_is_sink_of (IterableOut, hb_codepoint_t))> void intersect_set (const hb_set_t &glyphs, IterableOut &intersect_glyphs) const { - /* Why the second branch is >2x faster I have no idea, but it seems to be. */ - if (0) + for (const auto& range : rangeRecord) { - for (const auto& range : rangeRecord) - { - hb_codepoint_t last = range.last; - for (hb_codepoint_t g = range.first - 1; - glyphs.next (&g) && g <= last;) - intersect_glyphs << g; - } - } - else - { - iter_t c_iter; - c_iter.init (*this); - auto s_iter = hb_iter (glyphs); - while (c_iter.__more__ () && s_iter) - { - hb_codepoint_t cv = c_iter.get_glyph (); - hb_codepoint_t sv = *s_iter; - if (cv == sv) - { - intersect_glyphs << cv; - c_iter.__next__ (); - s_iter++; - } - else if (cv < sv) - c_iter.__next__ (); - else - s_iter++; - } + hb_codepoint_t last = range.last; + for (hb_codepoint_t g = range.first - 1; + glyphs.next (&g) && g <= last;) + intersect_glyphs << g; } } diff --git a/test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb-subset-fuzzer-4549523149553664 b/test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb-subset-fuzzer-4549523149553664 new file mode 100644 index 0000000000000000000000000000000000000000..4b2f3cb2f3c148fa16239cbfabf11c81aad2665c GIT binary patch literal 66032 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 BLs$R+ literal 0 HcmV?d00001