src/OT/Layout


Log

Author Commit Date CI Message
Bruce Mitchener f380a328 2023-08-25T14:01:01 Fix some typos.
Behdad Esfahbod 483d4a87 2023-08-06T14:40:45 Fix bot
Behdad Esfahbod 7989702a 2023-08-06T14:17:50 Audit and fix up serialize_subset uses Fixes https://github.com/harfbuzz/harfbuzz/issues/4362
Behdad Esfahbod dcd3afca 2023-08-01T20:09:34 [skippy-iter] Remove unused num_items
Behdad Esfahbod 9cdc043c 2023-07-31T18:53:29 [Cursive] Only sanitize what we use
Behdad Esfahbod 44026aa8 2023-07-31T16:47:06 [Cursive] Minor, adjust unsafe-to-concat if prev didn't sanitize
Behdad Esfahbod b382e616 2023-07-31T16:29:28 [GPOS] Sanitize Cursive positioning anchors lazily Speeds up Duployan-Regular.otf load time by 30%. Doesn't seem to slow down shaping in a measurable way.
Behdad Esfahbod 62e6f783 2023-07-25T08:32:21 [Cursive] round
Behdad Esfahbod 60db1427 2023-07-24T20:49:32 [layout] Remove unused "max-size" cruft
Behdad Esfahbod c91899be 2023-07-21T11:43:47 [gdef] Use set-digest for mark-filterint-sets Speeds up Noto Duployan-Regular.otf by 45% percent!
Behdad Esfahbod 837885f0 2023-07-20T12:58:16 Revert "[sanitize/Coverage] Keep a map of sane coverages" This reverts commit a689114898cc3e8f1c6ba7cc49cd6c3639d91250.
Behdad Esfahbod 0ab90671 2023-07-20T12:57:16 [sanitize/Coverage] Keep a map of sane coverages Fonts like Gulzar reuse the same coverage over a thousand times sometimes. However, this doesn't speed up sanitize unfortunately. Looks like calling Coverage::sanitize() is already very fast. We're just doing A LOT of it. The map slowed it down in fact. A set was even slower. Going to revert.
Behdad Esfahbod aa381ae9 2023-07-18T10:42:13 [ReverseChain] Remove SIZE_MAX Oops. Can't set it since the struct has offsets.
Behdad Esfahbod e583c9e9 2023-07-18T10:34:26 [ReverseChain] Add max-size
Behdad Esfahbod 49730531 2023-07-16T13:09:49 Config
Behdad Esfahbod 645fabd1 2023-07-16T11:36:59 [gsubgpos] Vastly speed up ChainRuleSet / RuleSet matching Match the first component in a fast loop. Idea replicated from LigatureSet. Speeds up Gulzar shaping by 22%! 37% in NotoNastaliqUrdu!
Behdad Esfahbod 77080f86 2023-07-16T11:26:32 .
Behdad Esfahbod 62e10c9f 2023-07-16T08:43:18 Revert "[gsubgpos] Allocate iterators further up" This reverts commit b9f364b8fcacf8ab32d0272190d8509f214e55f2.
Behdad Esfahbod b9f364b8 2023-07-16T08:42:36 [gsubgpos] Allocate iterators further up To avoid calling set_match_func repeatedly. Doesn't show speedup. Going to revert.
Behdad Esfahbod f94508ed 2023-07-15T15:28:19 [Ligature] Micro-optimize
Behdad Esfahbod c41b0d7b 2023-07-10T17:23:58 [sanitize/PairValueRecord] Add a max_size for faster sanitize
Behdad Esfahbod d84c5f29 2023-07-08T15:22:51 Revert "[gsubgpos] Make (Chain)Context funcs templatized" This reverts commit 03ac08d267eb7ad2f1ac039115fc0030ea475fae.
Behdad Esfahbod e73223b9 2023-07-08T15:22:18 [gsubgpos] Make (Chain)Context funcs templatized Unfortunately they still won't be inlined because the matcher_t needs function pointers. So, no speed up. Going to revert.
Behdad Esfahbod 0b879afb 2023-07-07T22:35:43 [sanitize] Inline Coverage::sanitize
Behdad Esfahbod 2006d321 2023-07-07T17:07:11 [sanitize] Add "fastpath" for ArrayOfOffset16To<> objects with max size Unfortunately this doesn't speed up NotoNastaliq or Gulzar as I was hoping for. Their GSUB tables are not large enough for this to kick in...
Behdad Esfahbod 7a85663c 2023-07-07T19:21:18 Revert "[sanitize] Add "fastpath" for ArrayOfOffset16To<> objects with max size" This reverts commit 10f8556c73f3cf231c6b5a900a6a1903f9516f90. This was, unfortunately, wrong :(.
Behdad Esfahbod 10f8556c 2023-07-07T17:07:11 [sanitize] Add "fastpath" for ArrayOfOffset16To<> objects with max size
Behdad Esfahbod 68b78914 2023-07-07T17:07:11 [sanitize] Add "fastpath" for ArrayOfOffset16To<> objects with max size Unfortunately this doesn't speed up NotoNastaliq or Gulzar as I was hoping for. Their GSUB tables are not large enough for this to kick in...
Behdad Esfahbod 90752cd5 2023-07-07T15:47:28 [type] Add HeadlessArray16Of
Behdad Esfahbod eae82788 2023-07-02T13:07:26 [GPOS] Micro-optimize lazy_some_gpos check Speeds up 11% in: BM_Font/load_face_and_shape/Roboto-Regular.ttf/hb
Behdad Esfahbod 46e54a23 2023-07-02T13:03:16 [GPOS] Remove extra check
Behdad Esfahbod 2d6091fc 2023-06-30T11:48:56 [GPOS] Make AnchorMatrix sanitize lazy again Was reverted in the previous commit, because it was incomplete.
Behdad Esfahbod 0887382c 2023-06-30T11:39:46 [GPOS] Fix sanitize
Behdad Esfahbod 690af7aa 2023-06-30T10:36:01 [GPOS] Sanitize Device tables lazily This speeds up face loading for variable fonts by 80%! Comparing before to after Benchmark Time CPU Time Old Time New CPU Old CPU New --------------------------------------------------------------------------------------------------------------------------------------------------------------- BM_Font/load_face_and_shape/Roboto-Regular.ttf/hb -0.0368 -0.0366 20 20 20 19 BM_Font/load_face_and_shape/RobotoFlex-Variable.ttf/hb -0.7149 -0.7162 77 22 77 22 BM_Font/load_face_and_shape/RobotoFlex-Variable.ttf/var/hb -0.7241 -0.7255 80 22 79 22 BM_Font/load_face_and_shape/SourceSansPro-Regular.otf/hb -0.1441 -0.1445 28 24 28 24 BM_Font/load_face_and_shape/AdobeVFPrototype.otf/hb -0.7893 -0.7910 66 14 66 14 BM_Font/load_face_and_shape/AdobeVFPrototype.otf/var/hb -0.7865 -0.7882 67 14 66 14 BM_Font/load_face_and_shape/SourceSerifVariable-Roman.ttf/hb -0.8895 -0.8900 227 25 226 25 BM_Font/load_face_and_shape/SourceSerifVariable-Roman.ttf/var/hb -0.8895 -0.8900 226 25 225 25 BM_Font/load_face_and_shape/Comfortaa-Regular-new.ttf/hb -0.5512 -0.5531 42 19 42 19 BM_Font/load_face_and_shape/NotoNastaliqUrdu-Regular.ttf/hb -0.1511 -0.1510 227 192 225 191 BM_Font/load_face_and_shape/NotoSerifMyanmar-Regular.otf/hb -0.1494 -0.1498 41 35 40 34 OVERALL_GEOMEAN -0.6443 -0.6456 0 0 0 0
Behdad Esfahbod d338506c 2023-06-30T10:13:05 [GPOS] Reuse sanitize_values_stride_unsafe in another function
أحمد المحمودي (Ahmed El-Mahmoudy) 10b9ca54 2023-06-28T07:46:33 Fix typo: subtitution -> substitution
Behdad Esfahbod 67b16247 2023-06-07T16:15:48 [set] Simplify a few set iterations as range loop
Behdad Esfahbod dcecb4d1 2023-06-05T16:03:36 [subset/ValueFormat] Micro-optimize
Behdad Esfahbod 469e82a2 2023-06-05T15:23:22 [subset/PairPos] Micro-optimize
Behdad Esfahbod 6593d2aa 2023-06-05T15:11:43 [subset/PairPos] Speed up
Behdad Esfahbod 82741304 2023-06-04T09:41:41 [subset] start_embed never returns nullptr Remove checks.
Behdad Esfahbod ca27925d 2023-06-03T16:18:15 Use hb_codepoint_pair_t in more places
Behdad Esfahbod 2f05c32c 2023-05-08T14:29:07 [Coverage] Minor access arrayZ directly in a couple places
Behdad Esfahbod 4ad443d5 2023-05-08T10:14:43 [Coverage/ClassDef] Don't call qsort if sorted already
Behdad Esfahbod 8df5cdbc 2023-05-07T15:49:50 [Coverage/ClassDef] Handle glyphID overflow in serialize
Behdad Esfahbod 71910fdf 2023-05-05T15:37:07 [Coverage] Remove unnecessary check
Behdad Esfahbod ee9b631d 2023-05-05T10:26:57 [SingleSubst] Fix condition to upgrade to beyond-64k
Behdad Esfahbod 0e9ebf10 2023-05-05T06:57:51 [config] Add HB_OPTIMIZE_SIZE_MORE and enable in HB_TINY Part of https://github.com/harfbuzz/harfbuzz/issues/4220
Behdad Esfahbod 31949636 2023-05-04T16:29:48 Revert "[layout] Cache subtable coverages in hb_map_t" This reverts commit 7a715d74e06720c17d28ba7b4c3da0b583f8d1d3.
Behdad Esfahbod 7a715d74 2023-05-04T16:28:11 [layout] Cache subtable coverages in hb_map_t Proof-of-concept. Going to revert. Memory consumption is more than I like. It does speed up Roboto shaping another 15% though. Perhaps if we could add logic to choose which subtables to cache, this might be a useful approach.
Behdad Esfahbod 1be39729 2023-05-04T13:18:34 [subset] Support unordered glyphlist in Coverage/ClassDef serialize
Behdad Esfahbod a10fad7c 2023-05-04T11:32:07 [config] Add HB_NO_GDEF_CACHE
Behdad Esfahbod 319a488b 2023-05-04T10:36:48 [GDEF] Fix null check Fixes https://oss-fuzz.com/testcase-detail/5920994267889664
Behdad Esfahbod fb795dc3 2023-05-03T15:17:20 [GPOS] Optimize iterator reset Speeds up Gulzar shaping 5%.
Behdad Esfahbod 8a8fc37c 2023-05-03T14:57:00 [GDEF] Use a cache for glyph classes Shows 5% speedup for Roboto shaping.
Behdad Esfahbod 323a1fe4 2023-05-03T13:52:43 [PairPos] Fix what I broke
Behdad Esfahbod a6f5f0dc 2023-05-03T13:45:39 [PairSet] Micro-optimize
Behdad Esfahbod 4e495eb0 2023-05-03T13:40:46 [PairPos] Add an unlikely
Behdad Esfahbod 5528bdd4 2023-05-03T13:35:10 [PairPos] Remove a likely
Behdad Esfahbod ae0fe02d 2023-05-03T13:24:08 [Ligature] Use slow path if 2 or fewer ligatures
Behdad Esfahbod ddd6c2e7 2023-05-03T13:16:39 [Ligature] Micro-optimize more
Behdad Esfahbod 045ae4b0 2023-05-03T13:08:43 [GPOS] Micro-optimize
Behdad Esfahbod 0fe90ebc 2023-05-03T12:49:31 [Ligature] Micro-optimize
Behdad Esfahbod 51061d28 2023-05-03T12:46:04 [Ligature] Minor tweak to recent code
Behdad Esfahbod 7881eadf 2023-05-02T14:56:18 [Ligature] Speed up Match the first component of the ligature in the LigatureSet loop. Speeds up Roboto shaping by 25%. I don't think it breaks anything. The test suite seems happy.
Behdad Esfahbod 95f15557 2023-05-02T16:37:31 [PairPosFormat2] Micro-optimize and don't kern if class2=0 If class2=0 we expect no kerning to happen. Just bail out.
Behdad Esfahbod 59967154 2023-05-02T15:52:43 [PairPos2] Micro-optimize
Behdad Esfahbod a8b8eb53 2023-05-01T16:56:29 [Coverage] Micro-optimize
Behdad Esfahbod af21ea35 2023-05-01T16:34:50 [Coverage/serialize] Micro-optimize
Behdad Esfahbod e826d94a 2023-04-30T11:11:19 Call roundf() instead of _hb_roundf() The former is defined as a macro expanding to the latter.
Behdad Esfahbod 06504cb0 2023-04-28T13:13:18 [PairPosFormat2] Minor use false instead of 0
Behdad Esfahbod 9ed43dc5 2023-04-28T12:38:26 [PairPosFormat2] Reuse a value
Garret Rieger 8658c257 2023-04-17T19:46:46 [subset] In LigatureSubst subsetting, check if the ligature glyph is in glyphset. Otherwise coverage will not match the retained ligature sets.
Garret Rieger a84cae42 2023-03-15T02:39:57 [subset] Don't add invalid gids (-1) to the glyphset when loading glyph map from the accelerator.
Behdad Esfahbod 7327006d 2023-03-07T21:06:01 [GSUB] Support SingleSubst in get_glyph_alternates Fixes https://github.com/harfbuzz/harfbuzz/discussions/4146
Behdad Esfahbod 08784baf 2023-03-02T10:48:30 [GSUB/GPOS] Fix sanitization in Format1 Fixes https://oss-fuzz.com/testcase-detail/5120727025319936
Behdad Esfahbod c67c0086 2023-03-01T13:32:44 [GPOS] Fix indexing in MarkLigPos This was broken in 8708b9e081. Fixes https://github.com/harfbuzz/harfbuzz/issues/4142
Garret Rieger 918193eb 2023-02-22T23:11:29 [subset] fix a class of fuzzer timeouts caused by large shared coverage tables. More acurately estimates the op count for CoverageFormat2 tables as the population size instead of the size in bytes.
Behdad Esfahbod adccc535 2023-02-17T12:29:42 [MarkBase] Adjust base-finding logic Fixes https://github.com/harfbuzz/harfbuzz/issues/4124
Behdad Esfahbod 64fa5cd4 2023-02-07T15:50:36 [GPOS] Fix assert fail introduced recently Was introduced in 8708b9e081192786c027bb7f5f23d76dbe5c19e8. If these lookups are recursed to from (Chain)Context out-of-order, it was possible that last_base > buffer->idx, in which case we were attaching marks to a base after them... and an assertion was failing fortunately. Fixes https://oss-fuzz.com/testcase-detail/6377756666757120
Behdad Esfahbod 8708b9e0 2023-02-06T14:51:25 [GPOS] Avoid O(n^2) behavior in mark-attachment Better implementation; avoids arbitrary limit on look-back.
Matthias Clasen 09b7fce8 2023-01-28T13:21:27 Make includes relative
Matthias Clasen e25e4c9a 2023-01-28T00:10:47 Move GDEF table to src/OT/Layout/GDEF
Behdad Esfahbod 749df4ee 2023-01-21T16:00:54 [PairPosFormat1] One more
Behdad Esfahbod b648ceb7 2023-01-21T15:58:59 [PairSet] Optimize last commit
Behdad Esfahbod 89162324 2023-01-21T15:57:18 [PairSet] Unify get_size()
Behdad Esfahbod b63159e8 2023-01-21T15:50:48 [PairPosFormat1] Fix stride Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=55287 and generally the lookup with MediumTypes.
Behdad Esfahbod be8a87c4 2023-01-21T15:00:41 Move TRACE_DISPATCH after may_recurse() Such that we don't get memory access issues if DEBUG_SANITIZE is on and may_recurse() returns false.
Behdad Esfahbod ed023f66 2023-01-12T17:04:24 Enable -Wformat-signedness And fix the codebase.
Behdad Esfahbod b33eb9ec 2023-01-11T11:20:04 [subset-plan] Simplify layout_variation_idx_delta_map allocation
Behdad Esfahbod 0728098e 2023-01-10T10:18:29 [Coverage] Speed up subset for too-large Coverage tables Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=54980
Behdad Esfahbod 301f6e4b 2022-12-04T11:46:10 [Coverage] Remove TODO
Behdad Esfahbod dbbb8e80 2022-12-04T11:13:39 Revert "[map] Add hb_map_filter_invalid" This reverts commit 8d7e92111786b21906157127c24b72b1e444e6e7. Surprisingly this slowed NotoNastaliqUrdu benchmark down by a couple percent instead of speeding it up.
Behdad Esfahbod 8d7e9211 2022-12-04T11:01:45 [map] Add hb_map_filter_invalid Use it in one place.
Behdad Esfahbod 41a8597f 2022-12-03T13:23:26 [layout] Simplify CoverageFormat2 intersects_coverage()
Behdad Esfahbod 1f4d8cca 2022-12-03T13:17:15 [CoverageFormat2] Optimize intersects()
Behdad Esfahbod c482b061 2022-12-03T13:14:31 [gpos] Optimize PairPosFormat1::intersects
Behdad Esfahbod 4d19c724 2022-12-03T09:57:29 [CoverageFormat1] Speed up intersects() Speeds up SourceHanSerif/10000 benchmark (not in test suite) by 32%!
Behdad Esfahbod 2a7a1d5a 2022-12-02T12:33:24 [Coverage] Avoid timeout on broken ranges Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=53929
Behdad Esfahbod 72fabef0 2022-11-30T11:37:49 [SingleSubstFormat2] Speed up closure