src/hb-ot-layout.cc | 6 ++++++ src/hb-ot-shape-complex-arabic-fallback.hh | 4 +++- src/hb-set-private.hh | 19 ++++++++++++++++--- src/hb-set.cc | 13 +++++++++++++ 4 files changed, 38 insertions(+), 4 deletions(-)
New commits: commit 893991fc9d2d3a57c4c148f3a9c3b98263cf3aed Author: Behdad Esfahbod <[email protected]> Date: Tue Apr 16 21:50:33 2013 -0400 Initialize set digests We were not initializing the digests properly and as a result they were being initialized to zero, making digest1 to never do any useful work. Speeds up Amiri shaping significantly. diff --git a/src/hb-ot-layout.cc b/src/hb-ot-layout.cc index 8161ce3..c80ca7d 100644 --- a/src/hb-ot-layout.cc +++ b/src/hb-ot-layout.cc @@ -70,9 +70,15 @@ _hb_ot_layout_create (hb_face_t *face) } for (unsigned int i = 0; i < layout->gsub_lookup_count; i++) + { + layout->gsub_digests[i].init (); layout->gsub->get_lookup (i).add_coverage (&layout->gsub_digests[i]); + } for (unsigned int i = 0; i < layout->gpos_lookup_count; i++) + { + layout->gpos_digests[i].init (); layout->gpos->get_lookup (i).add_coverage (&layout->gpos_digests[i]); + } return layout; } diff --git a/src/hb-ot-shape-complex-arabic-fallback.hh b/src/hb-ot-shape-complex-arabic-fallback.hh index 5e151f7..996e40e 100644 --- a/src/hb-ot-shape-complex-arabic-fallback.hh +++ b/src/hb-ot-shape-complex-arabic-fallback.hh @@ -212,7 +212,9 @@ arabic_fallback_plan_create (const hb_ot_shape_plan_t *plan, if (unlikely (!fallback_plan)) return const_cast<arabic_fallback_plan_t *> (&arabic_fallback_plan_nil); - for (unsigned int i = 0; i < ARABIC_NUM_FALLBACK_FEATURES; i++) { + for (unsigned int i = 0; i < ARABIC_NUM_FALLBACK_FEATURES; i++) + { + fallback_plan->digest_array[i].init (); fallback_plan->mask_array[i] = plan->map.get_1_mask (arabic_fallback_features[i]); if (fallback_plan->mask_array[i]) { fallback_plan->lookup_array[i] = arabic_fallback_synthesize_lookup (plan, font, i); commit 4d2813d3e980c8e6150caafa604a78cc44bf62a2 Author: Behdad Esfahbod <[email protected]> Date: Tue Apr 16 21:57:21 2013 -0400 Print set-digest hit ratio with HB_DEBUG_SET_DIGESTS diff --git a/src/hb-set-private.hh b/src/hb-set-private.hh index 1241e05..d9e0d29 100644 --- a/src/hb-set-private.hh +++ b/src/hb-set-private.hh @@ -102,6 +102,10 @@ struct hb_set_digest_lowest_bits_t mask_t mask; }; +#ifdef HB_DEBUG_SET_DIGESTS +extern unsigned long digest_total, digest_yes, digest_yes1, digest_yes2; +#endif + struct hb_set_digest_t { ASSERT_POD (); @@ -122,6 +126,15 @@ struct hb_set_digest_t } inline bool may_have (hb_codepoint_t g) const { +#ifdef HB_DEBUG_SET_DIGESTS + digest_total++; + if (digest1.may_have (g) && digest2.may_have (g)) + digest_yes++; + if (digest1.may_have (g)) + digest_yes1++; + if (digest2.may_have (g)) + digest_yes2++; +#endif return digest1.may_have (g) && digest2.may_have (g); } diff --git a/src/hb-set.cc b/src/hb-set.cc index 5f427a5..050cc24 100644 --- a/src/hb-set.cc +++ b/src/hb-set.cc @@ -27,6 +27,19 @@ #include "hb-set-private.hh" +#ifdef HB_DEBUG_SET_DIGESTS +unsigned long digest_total, digest_yes, digest_yes1, digest_yes2; +__attribute__((__destructor__)) +void digest_print (void) +{ + if (!digest_total) + return; + printf("Set digest summary: both %%%ld first %%%ld second %%%ld\n", + 100 * digest_yes / digest_total, + 100 * digest_yes1 / digest_total, + 100 * digest_yes2 / digest_total); +} +#endif /* Public API */ commit 1357c2dd120d005ceecfa83ed328d05dc634d7bc Author: Behdad Esfahbod <[email protected]> Date: Tue Apr 16 21:47:40 2013 -0400 Revert "Speed up hb_set_digest_common_bits_t calcs" This reverts commit 3d1b66a35e1ab3be19335705f310b278d76d66d2. The calculations were buggy. It's not worth optimizing right now. diff --git a/src/hb-set-private.hh b/src/hb-set-private.hh index 5e30a7e..1241e05 100644 --- a/src/hb-set-private.hh +++ b/src/hb-set-private.hh @@ -54,9 +54,9 @@ struct hb_set_digest_common_bits_t } inline void add_range (hb_codepoint_t a, hb_codepoint_t b) { - /* The negation here stands for ~(x-1). */ - mask &= -(1 << _hb_bit_storage (a ^ b)); - value &= mask; + /* TODO Speedup. */ + for (unsigned int i = a; i < b + 1; i++) + add (i); } inline bool may_have (hb_codepoint_t g) const { _______________________________________________ HarfBuzz mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/harfbuzz
