src/hb-ot-layout-common.hh


Log

Author Commit Date CI Message
Behdad Esfahbod ae208963 2022-12-26T12:30:39 Add hb-limits.hh
Behdad Esfahbod 300d82ce 2022-12-13T10:48:56 Fix compiler warning
Behdad Esfahbod 9a3f0be2 2022-12-11T13:40:53 [COLR] Apply variations in get_extent
Behdad Esfahbod 22b0390e 2022-12-05T09:43:36 Revert "[VarData] Don't clear memory we are going to fill in completely" This reverts commit e28e2dad03a453c5e5c4c5a9d6fd276182c5f80b. This made fuzzer unhappy. I'm not sure how. https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=54044
Behdad Esfahbod e28e2dad 2022-12-03T15:56:43 [VarData] Don't clear memory we are going to fill in completely
Behdad Esfahbod 0e13b4ab 2022-12-03T15:50:24 [VarData] Optimize main loop slightly
Behdad Esfahbod ad17c0ac 2022-12-03T14:56:57 [VarData] Whitespace
Behdad Esfahbod e7eb445d 2022-12-03T14:56:00 [VarData] Optimize longWord calculation
Behdad Esfahbod f2c980be 2022-12-03T14:49:38 [VarData] Optimize wordCount calculation 6% speedup in RobotoFlex-Variable/900 benchmark.
Behdad Esfahbod 3641b0e0 2022-12-03T14:26:21 [VarData] Optimize serialize()
Behdad Esfahbod e155f123 2022-12-03T14:14:39 [VarData] Minor save a variable
Behdad Esfahbod 5596a730 2022-12-03T13:33:48 [layout] Speed up ClassDefFormat2 intersects
Behdad Esfahbod 85e7263b 2022-12-03T13:28:02 [VariationStore] Minor access array directly
Behdad Esfahbod 58e9df13 2022-12-03T13:04:00 [Device] Serialize VariationDevice zerocopy
Behdad Esfahbod 44a5de3a 2022-12-03T12:50:32 [Device] Save a snap/revert
Behdad Esfahbod 93328ced 2022-12-03T12:49:26 [Device] Save a map get()
Behdad Esfahbod 02bc4dd6 2022-12-03T10:07:16 Use hb_enumerate instead of hand-coding
Behdad Esfahbod 57808609 2022-12-01T14:03:56 [VarData] Move an unlikely
Behdad Esfahbod 8805a866 2022-11-30T17:15:00 [ClassDef2] Write a few loops as range-based for
Behdad Esfahbod 2fecf2aa 2022-11-29T21:25:01 [ClassDef] Minor rename
Behdad Esfahbod 8f632ca8 2022-11-29T21:23:35 [ClassDef] Write another loop as range for
Behdad Esfahbod 87b12aee 2022-11-29T21:18:48 [ClassDef] Write a couple loops as range for
Behdad Esfahbod ccd40c84 2022-11-29T21:14:44 [ClassDef] Optimize intersected_class_glyphs
Behdad Esfahbod 44c585a6 2022-11-29T20:51:58 [ClassDef] Fix disabled codeblock
Behdad Esfahbod 9b7617d4 2022-11-29T20:29:58 [ClassDef2] Use a faster algorithm in subset() Speedup across the board; up to 40% for MPlus1 at small sizes.
Behdad Esfahbod ae5e6d56 2022-11-29T15:48:38 [ClassDef2] Micro-optimize
Behdad Esfahbod dc823340 2022-11-29T15:26:55 Remove a couple of unneeded .iter() invocations
Behdad Esfahbod d2a2670e 2022-11-28T19:42:27 [iter] Simplify has() interface implementations
Behdad Esfahbod 06e2147a 2022-11-24T14:56:04 More call set->next() directly
Behdad Esfahbod 196c9db0 2022-11-24T14:51:52 Call ->next() directly
Behdad Esfahbod 59c45f6d 2022-11-22T12:54:50 Use hb_memcpy instead of memcpy consistently
Behdad Esfahbod a0bde1e1 2022-11-16T21:27:12 [open-type] Remove (Sorted)ArrayOf.sub_array()
Garret Rieger 83769b9c 2022-10-21T22:37:32 [subset] add comment for why we retain empty lookups.
Garret Rieger 70e2de2b 2022-10-21T22:33:17 [subset] Always output Lookup's even if they are empty. The rest of layout subsetting depends on lookup indices being consistent with those computed during planning. So if an empty lookup is discarded during the subset phase it will invalidate all subsequent lookup indices. Generally we shouldn't end up with an empty lookup as we pre-prune them during the planning phase, but it can happen in rare cases such as when a subtable is considered degenerate (eg. #3853)
Joel Auterson c813f842 2022-10-20T19:45:23 Make build work for arm-none-eabi
Qunxin Liu b706c6f7 2022-09-12T13:58:55 [instance] update FeatureList with variations
Qunxin Liu 8f3a7017 2022-09-09T15:00:37 [instance] support FeatureVariations table
Qunxin Liu f4813e3b 2022-09-09T10:34:09 [instance] update collect_lookups/prune_features()/closure_features() with variations Some features will be substituted with variations, so we do not collect lookups from the original feature tables.
Qunxin Liu 64e2f2fc 2022-09-09T09:36:19 [instance] store active featurevariation record/condition idxes in the plan
Qunxin Liu 9ab6605f 2022-08-02T09:54:29 [instance] update GDEF table
Qunxin Liu b72995ff 2022-08-01T14:48:01 [instance] GDEF table: collect both varidxes and deltas
Qunxin Liu e03043bd 2022-08-01T11:37:47 [subset] don't let VariationStore subset() produce inner_maps Make it a subset-planning object so VariationStore can subset to specified inner_maps. Also add a layout_variation_idx_delta_map in subset_plan
Qunxin Liu 7fde6ab0 2022-08-05T13:33:22 fuzzer fix: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=49790
Behdad Esfahbod c67c1b74 2022-08-04T11:42:22 VarStore: simplify again
Qunxin Liu d831e935 2022-08-04T10:15:21 bug fix in VarData get_delta () when LONG_WORDS flag is set, item row is not computed correctly lcursor should be interpreted as INT32
Behdad Esfahbod 3da50c50 2022-07-29T11:40:33 Remove unused const
Garret Rieger 3f7a74ff 2022-07-19T21:50:13 [repacker] WIP extension promotion implementation.
Behdad Esfahbod 4cb83967 2022-07-23T10:59:42 [subset/ClassDefFormat2] Fix timeout Fixes https://oss-fuzz.com/testcase-detail/5417800474165248
Behdad Esfahbod f94a3ba1 2022-07-23T10:36:08 [varStore] Better protect against HB_NO_VAR builds
Behdad Esfahbod 5a9c7930 2022-07-22T21:33:15 Add HB_NO_BEYOND_64K
Behdad Esfahbod 7cdde6a2 2022-07-21T17:17:59 [ClassDef] Write a loop as range for
Behdad Esfahbod 00dfbbce 2022-07-21T11:39:32 [Coverage] Rename and templatize intersected_coverage_glyphs
Behdad Esfahbod 8d923363 2022-07-20T12:08:18 [layout] Reduce number of closure rounds
Behdad Esfahbod f3151b65 2022-07-17T16:19:28 [ArrayOf family] Use memory barrier before accessing array Without it, the compiler was reordering and batching the read of array length and array[0] if the 0'th member was accessed constantly and function was inlined. This felt safe to the compiler because HB_VAR_ARRAY is 1, but could be unsafe actually. The memory barrier disallows that. This was found by afl/honggfuzz address sanitizers. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=49187
Behdad Esfahbod 1327d8e3 2022-07-15T16:03:38 [layout-common] Reshuffle code so Feature is defined before it's used
Garret Rieger c1e280ea 2022-07-13T22:43:38 [reorg] Move Coverage, RangeRecord into new namespace layout.
Behdad Esfahbod df7eebf4 2022-07-11T14:14:55 [>64k:layout] Fix layout of RangeRecord https://github.com/be-fonts/boring-expansion-spec/issues/30
Behdad Esfahbod 9ef9fc01 2022-07-11T13:29:23 [>64k:layout] Templatize GSUBGPOSFormat1
Behdad Esfahbod 5fd0a3f0 2022-07-11T13:10:04 [>64k:layout] Templatize GSUBGPOSFormat1
Behdad Esfahbod ca5c8a64 2022-07-06T13:02:49 [>64k:layout:Coverage] Implement format 3/4 Implements rest of https://github.com/be-fonts/boring-expansion-spec/issues/30
Behdad Esfahbod 25de6fb4 2022-07-06T12:52:03 [>64k:layout:ClassDef] Implement format 3/4 This implements part of https://github.com/be-fonts/boring-expansion-spec/issues/30
Behdad Esfahbod 9286526f 2022-07-06T12:26:58 [>64k:layout] Templatize Coverage & ClassDef Have not added new formats yet.
Behdad Esfahbod e8cce9d1 2022-07-05T14:05:43 [>64k:layout] Add SmallTypes & MediumTypes
Behdad Esfahbod 8a971d01 2022-07-06T12:37:43 [layout] Use is_source_of instead of is_iterator
Behdad Esfahbod 0dc0da05 2022-07-06T12:33:37 [iter] Add hb_is_sorted_iterator(_of)
Garret Rieger 587969af 2022-06-30T21:37:42 [subset] Drop scripts that are not in the layout_scripts list.
Behdad Esfahbod b96622d1 2022-06-05T02:45:41 [layout] Use a cache for main input ClassDef of (Chain)ContextLookupFormat2 This commit adds a per-lookup caching infrastructure to GSUB/GPOS, and uses it to cache input ClassDef.get_class value for (Chain)ContextLookupFormat2. For fonts heavy on use of heave class-based2 context matching, this shows a good speedup. For NotoNastaliqUrdu for example, I observe 17% speedup. Unfortunately not many other lookups can use a cache like this :(. https://github.com/harfbuzz/harfbuzz/pull/3636
Behdad Esfahbod e6409d39 2022-06-05T06:57:37 Revert "[layout] Use a cache for main input ClassDef of (Chain)ContextLookups" This reverts commit 57d1c08739d0acd94b96da2f9d5dd6c0ff3b3722. Err. This was an accident.
Behdad Esfahbod 57d1c087 2022-06-05T02:45:41 [layout] Use a cache for main input ClassDef of (Chain)ContextLookups
Behdad Esfahbod f13a7954 2022-06-03T01:17:20 [subset] Convert another use of hashmap to unique_ptr
Behdad Esfahbod 997d9cc4 2022-06-02T18:04:12 [map] Make unique_ptr hashable
Behdad Esfahbod 5af5a565 2022-05-30T08:32:50 [VarStore] Implement writing 32bit var-store Untested. Finishes fixing https://github.com/harfbuzz/harfbuzz/issues/2965
Behdad Esfahbod 75112098 2022-05-23T12:42:15 [VarStore] Implement reading 32bit var-store Untested. Part of https://github.com/harfbuzz/harfbuzz/issues/2965 Serializing is incomplete.
Behdad Esfahbod e5d6da79 2022-05-23T12:25:39 [varStore] rename shortCount to wordCount
Behdad Esfahbod 371e14d9 2022-05-28T13:40:30 Combine uses of map has() then get() with has(.., &..)
Behdad Esfahbod 6010feee 2022-05-24T09:00:44 [varStore] Rename variable as per review https://github.com/harfbuzz/harfbuzz/pull/3605
Behdad Esfahbod d9acc045 2022-05-21T14:16:21 [VarStore] Sprinkle cache_t type around It's available so no need to use void*.
Behdad Esfahbod da38312e 2022-05-20T17:32:56 [VarStore] Pepper cache with likely()
Behdad Esfahbod cf8f00e3 2022-05-20T17:14:10 [VarStore] Don't use NAN Is faster. With this, I'm seeing 25 to 28% speedup in glyph_h_advances benchmark of benchmark-font for var/hb tests.
Behdad Esfahbod 880f50f7 2022-05-20T16:50:00 Refactor varstore cache
Behdad Esfahbod f2a2fb91 2022-05-20T16:06:05 [GPOS] Cache VarStore region scalars
Behdad Esfahbod 5fbc70c5 2022-05-20T14:07:27 [VarStore] Add cache API
Garret Rieger 3ab2c793 2022-05-19T17:23:36 [subset-perf] Signficiantly speed up ClassDef*::subset. Eliminates the usage of a glyph -> klass hash map and replaces it with a vector storing the mapping. This allows us to use the vector directly as the iterator driving the serialize. Approximately 1% speedup for Noto Nastaliq.
Garret Rieger 0b1c2ff9 2022-05-18T23:32:03 [subset-perf] Remove extra map lookup in ClassDef subset methods.
Garret Rieger 13ace77f 2022-05-18T22:38:43 [subset-perf] Use glyph_map instead of set in ClassDefFormat.
Garret Rieger adae2f22 2022-05-18T21:42:28 [subset-perf] Cache a glyph map for gsub. This allows us in some cases to avoid using glyph_set_gsub as a filter.
Behdad Esfahbod cedf7396 2022-05-18T16:52:35 Add some commented-out code
Garret Rieger 48dfbd54 2022-05-18T21:03:56 [subset] minor cleanup.
Garret Rieger 482c6e5d 2022-05-18T19:58:55 [subset-perf] Speed up Coverage::serialize by caching iterator.
Behdad Esfahbod 14b18725 2022-05-18T15:14:32 In Coverage::iter_t, assume iterators are from same Coverage object No need to support otherwise.
Behdad Esfahbod 27141735 2022-05-18T15:12:49 [subset] Add Coverage::__end__ implementation
Behdad Esfahbod c476f58a 2022-05-18T14:20:23 [subset] Write CoverageFormat2::intersects_coverage() as bsearch()
Behdad Esfahbod 63c66951 2022-05-18T13:53:52 [ot-layout] Cosmetic The implementation of HBUINT16 operator == is slower than just comparing to ints.
Behdad Esfahbod 777debd7 2022-05-18T13:46:06 [subset] Rewrite CoverageFormat2::intersects as dagger
Behdad Esfahbod cf5001fa 2022-05-18T13:38:29 [subset] Optimize CoverageFormat2::intersected_coverage_glyphs
Behdad Esfahbod 6f37c207 2022-05-18T13:25:42 [subset] Minor rewrite in CoverageFormat2::serialize()
Behdad Esfahbod 175319cd 2022-05-11T13:47:17 [gsubgpos] Clean up OT::ClassDefFormat2::intersected_class_glyphs 0 case
Behdad Esfahbod 137af361 2022-05-11T13:39:30 [gsubgpos] Simplify OT::ClassDefFormat2::intersected_class_glyphs()
Behdad Esfahbod 3261e05b 2022-05-11T13:16:31 [subset] Optimize ClassDef1::intersected_class_glyphs() for class0
Behdad Esfahbod a792e16e 2022-03-24T13:08:51 [ot-layout] Change max nesting level of lookups from 6 to 64