Commit Graph

12055 Commits

Author SHA1 Message Date
Behdad Esfahbod 6ae35365f8 Fix build 2022-12-16 11:43:38 -07:00
Behdad Esfahbod e957391efe [colr] Add NoVariable::varIdxBase 2022-12-16 11:33:04 -07:00
Behdad Esfahbod e06de98c36 [var-common] Make VarInstancer take an offset 2022-12-16 11:31:00 -07:00
Behdad Esfahbod 251f9f6213 [open-type] Add VarIdx::add() 2022-12-16 11:29:51 -07:00
Behdad Esfahbod bf2ae3f0ca [open-type] Add static_assert for NO_VARIATION 2022-12-16 11:26:24 -07:00
Matthias Clasen d4496e6405 COLRv1: Apply variations correctly
The variations are for xMin, yMin, xMAx, yMax.
Apply them before converting to extents..
2022-12-16 11:14:42 -07:00
Matthias Clasen 193e0e3e8e Cosmetic: typo fix 2022-12-14 22:34:06 -07:00
Garret Rieger b5acde43ed [subset] check pending/subsetted tag sets for alloc failure. 2022-12-13 15:31:40 -07:00
Jordan Petridis 79285a9983
VarC: cast ints (#3934)
msvc is rightfully complaining that the types on the sides of
the ternary are not matching:

```
C:\pango\subprojects\harfbuzz\src\OT\glyf\VarCompositeGlyph.hh(317): error C2446: ':': no conversion from 'const OT::HBUINT16' to 'const OT::HBUINT8'
```
2022-12-13 11:14:20 -07:00
Behdad Esfahbod 300d82ce2e Fix compiler warning 2022-12-13 11:01:03 -07:00
Behdad Esfahbod 199345eb29
Merge pull request #3928 from harfbuzz/colrv1-extents
COLRv1: use ClipBoxes for extents
2022-12-12 18:37:10 -07:00
Behdad Esfahbod bd7cb384cf [VarC] Remove unused variable 2022-12-12 14:10:48 -07:00
Behdad Esfahbod 51d3ce39ba
Merge pull request #3933 from googlefonts/cff
[subset] Fix infinite loop when instancing CFF fonts
2022-12-12 14:07:44 -07:00
Behdad Esfahbod 1b278c7658 [VarC] Update for new format
https://github.com/harfbuzz/boring-expansion-spec/issues/71
2022-12-12 13:57:05 -07:00
Garret Rieger 64cbe8b962 [subset] Also note that only full instancing works. 2022-12-12 20:41:40 +00:00
Garret Rieger 0da59f86a8 [subset] note that CFF/CFF2 instancing is not yet supported. 2022-12-12 20:26:11 +00:00
Garret Rieger 38a9628885 [subset] simplify handling of table subsetting depedencies.
Allow the dependency checker to see all tables that will be subset. Use this to fix the HMTX/VMTX dep check against glyf. Don't delay hmtx/vmtx subsetting if no glyf table is present.
2022-12-12 20:13:17 +00:00
Garret Rieger 0853e5d9d7 [subset] if table dependencies can't be resolved fail the subset.
Avoids getting stuck in an infinite loop.
2022-12-12 19:43:31 +00:00
Behdad Esfahbod 6bb478eeeb [VarC] Clamp after addition 2022-12-12 11:39:06 -07:00
Behdad Esfahbod 80a5011eb6 [VarC] Fix coord setting
Those are additive.
2022-12-12 11:37:59 -07:00
Behdad Esfahbod 4e9a6cfb49 [COLR] Use VarStoreInstancer 2022-12-12 10:20:51 -07:00
Behdad Esfahbod a3a3d37b95 [var] Add VarStoreInstancer 2022-12-12 10:17:41 -07:00
Behdad Esfahbod c64661b2f8 [COLR] Fix variation code 2022-12-12 10:11:02 -07:00
Behdad Esfahbod ff332b14ea [COLR] Handle HB_OT_LAYOUT_NO_VARIATIONS_INDEX 2022-12-11 21:05:14 -07:00
Behdad Esfahbod 9a3f0be291 [COLR] Apply variations in get_extent 2022-12-11 13:40:53 -07:00
Behdad Esfahbod 68964efa55 [COLR] Use bsearch in get_extents 2022-12-11 13:21:01 -07:00
Behdad Esfahbod d0ee5a452f [COLR] Return false from get_extents if table version not 1 2022-12-11 13:13:35 -07:00
Behdad Esfahbod b3d6a5ef86 [colr] Minor no behavior change 2022-12-11 13:12:30 -07:00
Matthias Clasen 7a748ad4ac COLRv1: use ClipBoxes for extents
This is a first step; ultimatively, we
should compute the extents is ClipBoxes
are missing.
2022-12-11 13:12:30 -07:00
Behdad Esfahbod d36a0f8c42 [COLR] Add TODO 2022-12-11 13:12:19 -07:00
Behdad Esfahbod a306820681 [colr] Use SortedArray instead of Array 2022-12-11 13:03:55 -07:00
Behdad Esfahbod b9d5e7a8bb [colr] Set HB_COLRV1_MAX_NESTING_LEVEL to 16
Was 100. That seemed excessive.
2022-12-11 12:54:19 -07:00
Behdad Esfahbod c17afa48de [colr] Remove COLRV1_ENABLE_SUBSETTING 2022-12-11 12:53:55 -07:00
Behdad Esfahbod 9ab2c8034e Revert "[glyf] Use component phantom points after transformation"
This reverts commit a756bd1944.

Fixes https://github.com/harfbuzz/harfbuzz/issues/3929
2022-12-11 12:04:29 -07:00
Behdad Esfahbod 7f73b57bc1 [subset] Graduate L1 instancing API from experimental
Fixes https://github.com/harfbuzz/harfbuzz/issues/3926
2022-12-10 17:35:52 -07:00
Khaled Hosny 0f4e38cd86 [subset] Small doc fixes 2022-12-10 16:39:26 +02:00
Behdad Esfahbod bf2e817549 [VarComposites] Support GID24 2022-12-09 23:15:26 -07:00
Behdad Esfahbod 10d38dcdfd [varc] Change format slightly
Fixes https://github.com/harfbuzz/boring-expansion-spec/issues/70
2022-12-09 19:19:57 -07:00
Behdad Esfahbod af450a757d [config] Use HB_EXPERIMENTAL_API instead of adhoc HB_EXPERIMENTAL 2022-12-09 19:05:16 -07:00
Behdad Esfahbod 5cf0b9ae7d [varc] Mark as experimental feature with HB_NO_VAR_COMPOSITES 2022-12-09 18:59:43 -07:00
Behdad Esfahbod 82b4f3791e [coord-setter] Don't modify font coords 2022-12-09 18:46:33 -07:00
Behdad Esfahbod e9e503b80b [Glyph] Pass down coords to get_points 2022-12-09 18:42:46 -07:00
Behdad Esfahbod 8e46870093 [gvar] Take coords in instead of font in apply_deltas_to_points 2022-12-09 18:35:30 -07:00
Behdad Esfahbod 3caa42a4a7 Fix build after rebase 2022-12-09 14:48:41 -07:00
Behdad Esfahbod bbe59e4211 Whitespace 2022-12-09 14:45:29 -07:00
Behdad Esfahbod 13deea7cbd [glyf/VarComposite] Clamp axis coordinates 2022-12-09 14:45:29 -07:00
Behdad Esfahbod a975be4c07 [glyf/VarComposite] Minor rename 2022-12-09 14:45:29 -07:00
Behdad Esfahbod 1e71db2d26 [glyf/VarComposite] Fix transformation 2022-12-09 14:45:29 -07:00
Behdad Esfahbod 1233be61d8 [glyf/VarComposite] Remove unneeded resize 2022-12-09 14:45:29 -07:00
Behdad Esfahbod 1a906162cb [glyf/coord-setter] Fix memory issue 2022-12-09 14:45:29 -07:00
Behdad Esfahbod 7efd68da39 [glyf/VarComposite] Set coordinates
Code is untested but complete!
2022-12-09 14:45:29 -07:00
Behdad Esfahbod 4ec7781497 [glyf] Move coord-setter to its own file 2022-12-09 14:45:29 -07:00
Behdad Esfahbod dadb4ed71d [glyf/VarComposite] More, almost there 2022-12-09 14:45:29 -07:00
Behdad Esfahbod 0a939b48a6 [glyf/VarComposite] Implement more 2022-12-09 14:45:29 -07:00
Behdad Esfahbod 65cc3b5e2b [glyf/VarComposite] More 2022-12-09 14:45:29 -07:00
Behdad Esfahbod 12688ed386 [glyf] Fix distcheck 2022-12-09 14:45:29 -07:00
Behdad Esfahbod 60d959a6e7 [glyf/VarComposite] Add use_my_metrics() 2022-12-09 14:45:29 -07:00
Behdad Esfahbod 575d99406a [glyf] Flesh out VarCompositeGlyph 2022-12-09 14:45:29 -07:00
Behdad Esfahbod 21f671bc45 [glyf] Add stub VarCompositeGlyph 2022-12-09 14:45:29 -07:00
Behdad Esfahbod 435c5eeffe [glyf] Split composite-iter 2022-12-09 14:45:29 -07:00
Behdad Esfahbod 1024a013fd [glyf] Add CoordSetter 2022-12-09 14:45:29 -07:00
Garret Rieger e66d02126e [subset] replace subset-processing.md reference with link to it on github. 2022-12-08 16:32:24 -07:00
Garret Rieger 27201ed32b [subset] fix up hb_subset_preprocess api comment. 2022-12-08 16:32:24 -07:00
Garret Rieger 13b0388351 [subset] link to preprocessing doc from api comment. 2022-12-08 16:32:24 -07:00
Garret Rieger c097abab52 [subset] set no prune unicode ranges flag in preprocessor.
To avoid modifying the original unicode range values in the source font.
2022-12-08 16:32:24 -07:00
Garret Rieger bc87fe952e [subset] add note about memory management with preprocessed faces. 2022-12-08 16:32:24 -07:00
Garret Rieger 5e713e99bf Revert "[map] Speed up is_real()"
This reverts commit f5307c3ba8.

Found to slow down the benchmarks in some cases.
2022-12-08 16:32:24 -07:00
Garret Rieger eda02c2ebd [subset] Move hb_subset_preprocess to be non-experimental. 2022-12-08 16:32:24 -07:00
Garret Rieger 76d5482a7c [subset] always return a valid face from hb_subset_preprocess. 2022-12-08 16:32:24 -07:00
Garret Rieger 35233d2514 [repacker] fix fuzzer reported stack overflow.
Fixes https://oss-fuzz.com/testcase-detail/6014493291577344.
2022-12-07 10:32:56 -07:00
Garret Rieger f1d3489388 [repacker] bail on failure to alloc assigned_bytes set.
Fixes fuzzer issue https://oss-fuzz.com/testcase-detail/5390364397928448.
2022-12-05 14:13:47 -07:00
Garret Rieger 239a5aca02 [repacker] don't allow references to the null object in graph.
Fixes fuzzer issue https://oss-fuzz.com/testcase-detail/6714085985353728
2022-12-05 14:13:47 -07:00
Behdad Esfahbod 4ce0f08897 [coretext] Clamp variation settings to min/max
Like our native implementation does; CoreText doesn't itself.

Also fix leak of CFNumber's.
2022-12-05 13:18:34 -07:00
Behdad Esfahbod 22b0390e2d Revert "[VarData] Don't clear memory we are going to fill in completely"
This reverts commit e28e2dad03.

This made fuzzer unhappy. I'm not sure how.

https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=54044
2022-12-05 09:43:36 -07:00
Behdad Esfahbod 3c497e2458 [harfbuzz-subset.cc] Revert accidental change
These extra files are unnecessary, but our generator currently
isn't smart enough to know that. Will fix some time.
2022-12-04 15:35:01 -07:00
Behdad Esfahbod aa7f5e3742 [subset] Conditionalize call to hb_font_set_variations 2022-12-04 15:33:18 -07:00
Behdad Esfahbod ad5588e800 [config] If HB_NO_SHAPER then HB_NO_OT_SHAPE 2022-12-04 15:27:59 -07:00
Behdad Esfahbod 1a5c749581 [config] Flesh out HB_NO_SHAPER a bit more 2022-12-04 15:20:51 -07:00
Behdad Esfahbod 2c0abf0258 Revert "[harfbuzz-subset.cc] Trim down!"
This reverts commit a335458d57.

While this can be vastly trimmed down, what I did is not right.
It still depends on hb-face, hb-font, hb-blob, hb-set, and hb-map.
2022-12-04 15:03:36 -07:00
Behdad Esfahbod a335458d57 [harfbuzz-subset.cc] Trim down! 2022-12-04 14:56:20 -07:00
Behdad Esfahbod 765a3551da [face-builder] Minor cast 2022-12-04 14:48:32 -07:00
Behdad Esfahbod 3fff6d9084 [face-builder] Initialize face orders to -1 2022-12-04 14:47:38 -07:00
Behdad Esfahbod 805ce9ad3d [face-builer] Protect against wrong face
In hb_face_builder_sort_tables.
2022-12-04 14:43:17 -07:00
Behdad Esfahbod 0acfd2b714 [indic-machine] Regenerate line numbers 2022-12-04 14:01:05 -07:00
Behdad Esfahbod 9704f8354e Merge branch 'config-header' 2022-12-04 13:58:52 -07:00
Behdad Esfahbod c1aae14a68 [features.h] Fix autotools build rules 2022-12-04 13:58:39 -07:00
Behdad Esfahbod 0545949f01 [gvar] Minor use array get_size() 2022-12-04 12:44:09 -07:00
Behdad Esfahbod 1bd386515c [bit-set] Micro-optimize page_for 2022-12-04 12:30:20 -07:00
Behdad Esfahbod b182e2808a [bit-set] Don't clear pages when copying set 2022-12-04 12:22:17 -07:00
Behdad Esfahbod f5307c3ba8 [map] Speed up is_real() 2022-12-04 11:54:16 -07:00
Behdad Esfahbod 301f6e4b47 [Coverage] Remove TODO 2022-12-04 11:46:10 -07:00
Behdad Esfahbod dbbb8e8006 Revert "[map] Add hb_map_filter_invalid"
This reverts commit 8d7e921117.

Surprisingly this slowed NotoNastaliqUrdu benchmark down by a couple
percent instead of speeding it up.
2022-12-04 11:13:39 -07:00
Behdad Esfahbod 8d7e921117 [map] Add hb_map_filter_invalid
Use it in one place.
2022-12-04 11:02:15 -07:00
David Corbett 260df1fa32 [indic] Support <U+0A02, U+0A40> 2022-12-04 10:46:47 -07:00
Behdad Esfahbod 8b533763c0 Use hb_len() instead of .len() 2022-12-03 15:58:12 -07:00
Behdad Esfahbod e28e2dad03 [VarData] Don't clear memory we are going to fill in completely 2022-12-03 15:56:43 -07:00
Behdad Esfahbod 0e13b4abbc [VarData] Optimize main loop slightly 2022-12-03 15:50:24 -07:00
Behdad Esfahbod ad17c0acce [VarData] Whitespace 2022-12-03 14:56:57 -07:00
Behdad Esfahbod e7eb445d29 [VarData] Optimize longWord calculation 2022-12-03 14:56:00 -07:00
Behdad Esfahbod f2c980be29 [VarData] Optimize wordCount calculation
6% speedup in RobotoFlex-Variable/900 benchmark.
2022-12-03 14:49:38 -07:00
Behdad Esfahbod 3641b0e01e [VarData] Optimize serialize() 2022-12-03 14:26:21 -07:00
Behdad Esfahbod e155f12307 [VarData] Minor save a variable 2022-12-03 14:14:39 -07:00
Behdad Esfahbod 5596a73087 [layout] Speed up ClassDefFormat2 intersects 2022-12-03 13:33:48 -07:00
Behdad Esfahbod 85e7263b38 [VariationStore] Minor access array directly 2022-12-03 13:28:02 -07:00
Behdad Esfahbod 41a8597f38 [layout] Simplify CoverageFormat2 intersects_coverage() 2022-12-03 13:23:26 -07:00
Behdad Esfahbod 1f4d8ccaed [CoverageFormat2] Optimize intersects() 2022-12-03 13:17:15 -07:00
Behdad Esfahbod c482b06108 [gpos] Optimize PairPosFormat1::intersects 2022-12-03 13:14:31 -07:00
Behdad Esfahbod 58e9df132f [Device] Serialize VariationDevice zerocopy 2022-12-03 13:04:00 -07:00
Behdad Esfahbod 071a2bb4f7 [serialize] Support zerocopy while sharing 2022-12-03 13:03:38 -07:00
Behdad Esfahbod 44a5de3a97 [Device] Save a snap/revert 2022-12-03 12:50:32 -07:00
Behdad Esfahbod 93328cedfc [Device] Save a map get() 2022-12-03 12:49:26 -07:00
Behdad Esfahbod 630b874ae6 [gsubgpos] Add a cache to intersected_class_glyphs
30% gain on subset_codepoints/NotoNastaliqUrdu-Regular.ttf/nohinting/1400.
2022-12-03 12:13:15 -07:00
Behdad Esfahbod c044f4af3e [gsubgpos] Remove wrong const 2022-12-03 11:58:04 -07:00
Behdad Esfahbod 2680be1f22 [gsubgpos] Don't set unnecessary funcs 2022-12-03 11:54:52 -07:00
Behdad Esfahbod 023f595dec [cmap] Speed up DefaultUVS::copy even more
Another 14% on SourceHanSerifVF/10 benchmark.
2022-12-03 11:18:05 -07:00
Behdad Esfahbod 4ca6105108 [cmap] Remove double-min 2022-12-03 11:15:06 -07:00
Behdad Esfahbod cd29147e30 [cmap] Minor cast 2022-12-03 10:41:42 -07:00
Behdad Esfahbod 4cdb5cc69b [cmap] Minor change iterator 2022-12-03 10:40:24 -07:00
Behdad Esfahbod 2cdaedaf54 Use hb_enumerate in more places 2022-12-03 10:16:35 -07:00
Behdad Esfahbod 02bc4dd69b Use hb_enumerate instead of hand-coding 2022-12-03 10:10:01 -07:00
Behdad Esfahbod 4d19c724c0 [CoverageFormat1] Speed up intersects()
Speeds up SourceHanSerif/10000 benchmark (not in test suite) by
32%!
2022-12-03 09:57:29 -07:00
Behdad Esfahbod a2d33779e1 Fix arm bot build 2022-12-03 09:49:00 -07:00
Behdad Esfahbod dabbf13d40 [cmap] Speed up DefaultUVS::copy 2022-12-03 09:46:11 -07:00
Qunxin Liu 8eadb83640 [subset] Update hb_subset_input_override_name_table API
Override the name string for the NameRecord identified by name_id,
platform_id, encoding_id and language_ids specified by the user.
If a record with specified name_id does not exist, this API will create
a new NameRecord with provided info and insert it to the name table.
2022-12-02 18:05:53 -07:00
Behdad Esfahbod ddeac3658b [test-multimap] More tests 2022-12-02 16:51:07 -07:00
Behdad Esfahbod ff419789ef [subset-plan] Sort unicode_to_new_gid_list when needed 2022-12-02 16:43:33 -07:00
Behdad Esfahbod 1a40da4ad1 [subset-plan] Use add_array instead of add_sorted_array
That vector is not declared as sorted.
2022-12-02 16:13:37 -07:00
Behdad Esfahbod 32e049a315 [subset-plan] Use gid-to-unicodes multimap
One test fails. Need investigation.
2022-12-02 16:09:10 -07:00
Behdad Esfahbod da7961b2e8 . 2022-12-02 16:08:40 -07:00
Behdad Esfahbod 7d6893a803 [subset-accelerator] Cache gid-to-unicodes 2022-12-02 15:50:52 -07:00
Behdad Esfahbod 10c8fc5553 [multimap] Add a multimap datastructure 2022-12-02 15:50:49 -07:00
Behdad Esfahbod a42fc8ec4a [subset-accelerator] Adjust in_error() 2022-12-02 15:41:18 -07:00
Behdad Esfahbod 65d9630312 [subset-cff2] Whitespace 2022-12-02 14:59:26 -07:00
Behdad Esfahbod b33297ee26 [cff2] Remove unused typedef 2022-12-02 14:43:37 -07:00
Behdad Esfahbod 3ade2ffaa5 [serialize] Adjust pop_discard for zerocopy 2022-12-02 14:26:36 -07:00
Behdad Esfahbod 043eeb29a3 [subset-cff] Optimize encode_subrs
Don't loop over all original subrs. Just walk over closure subrs.
2022-12-02 13:58:36 -07:00
Behdad Esfahbod 0ad5977cd6 [subset-cff] Simplify hinting processing
We already have drop_hints in the params.
2022-12-02 13:41:36 -07:00
Behdad Esfahbod 16cbe41bca
Merge pull request #3910 from googlefonts/repacker_fuzz
[repacker] Add a fuzzer for the hb-subset-repacker api.
2022-12-02 12:43:13 -07:00
Behdad Esfahbod 2a7a1d5a73 [Coverage] Avoid timeout on broken ranges
Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=53929
2022-12-02 12:33:24 -07:00
Behdad Esfahbod c947652768 [subset-cff] Micro-optimize 2022-12-02 12:01:35 -07:00
Behdad Esfahbod a24d4e9261 [array] Oops. Fix memcpy copy()! 2022-12-02 12:01:35 -07:00
Behdad Esfahbod 5e41766bb9 [array] Fix hb_bytes_t memcpy copy
Wasn't being used!
2022-12-02 12:01:35 -07:00
Behdad Esfahbod a5616227ca [subset-cff] Fix buffer size calculation 2022-12-02 12:01:35 -07:00
Behdad Esfahbod 015af5a8e5 [subset-cff] Write a couple loops as range-based for 2022-12-02 12:01:35 -07:00
Behdad Esfahbod bfbbd4af25 [subset-cff] Copy str for call ops 2022-12-02 12:01:35 -07:00
Behdad Esfahbod c755b3884f [subset-cff] Pre-alloc enough for check-less copy 2022-12-02 12:01:35 -07:00
Behdad Esfahbod 062e59ae67 [subset-cff] Optimize vector allocation for preprocessed input 2022-12-02 12:01:35 -07:00
Behdad Esfahbod 8e9e94dba9 Revert "[vector] Optimize grow_vector() for size"
This reverts commit 1dd9396c7a.

Is faster indeed.

15% on SourceHanSans/10000 benchmark.
2022-12-02 12:01:35 -07:00
Behdad Esfahbod 2644540a74 [subset-cff] Compact parsed strings if using accelerator
Saves 32% on SourceHanSans/10000 benchmark!

Also, use memcmp now for writing out strings since now that our
ops are not super short, that's faster.

This makes cff-japanese test takes super long though; that needs
inspection.
2022-12-02 12:01:35 -07:00
Behdad Esfahbod 6012d3b228 [subset-cff] Write out charstrings zerocopy to serializer 2022-12-01 17:33:53 -07:00
Behdad Esfahbod 36e1a6339c [cff] Add total_size to INDEX 2022-12-01 17:00:03 -07:00
Behdad Esfahbod 3843000660 [serialize] Add start_zerocopy() 2022-12-01 16:48:22 -07:00
Garret Rieger de5a621322 [repacker] enforce root node having no incoming edges. 2022-12-01 23:37:16 +00:00
Behdad Esfahbod a2681c37c1 [cff-subset] Simplify INDEX serialize() more 2022-12-01 16:15:23 -07:00
Behdad Esfahbod c4b05878cb [subset-cff] Remove INDEX unused serialize() methods 2022-12-01 15:56:37 -07:00
Behdad Esfahbod b3ad4d72cc [cff] Another no-memset in INDEX 2022-12-01 15:46:00 -07:00
Behdad Esfahbod 5fd2f255fc [open-type] Don't memset 0 in serialize for ArrayOf family
Not necessary.
2022-12-01 15:18:59 -07:00
Garret Rieger 30e405e470 [repacker] ensure link obj indices are valid. 2022-12-01 22:12:59 +00:00
Behdad Esfahbod 70ac6dfb28 [subset-cff] Don't memset 0 INDEX and other serialize methods
Not necessary.
2022-12-01 14:58:25 -07:00
Garret Rieger 554ed06fac [repacker] add cycle detection to the graph sort.
This allows us to bail early if the graph is not acyclic.
2022-12-01 21:52:37 +00:00
Behdad Esfahbod a66de336fb [vector] Minor use get_size() in as_bytes() 2022-12-01 14:32:13 -07:00
Behdad Esfahbod 0b826368fd [serializer] Don't memset memory in embed
Not necessary.
2022-12-01 14:23:25 -07:00
Behdad Esfahbod 3b68c7146f [array] Don't clear serializer buffer when copying out
Not needed.
2022-12-01 14:19:27 -07:00
Behdad Esfahbod 57808609c9 [VarData] Move an unlikely 2022-12-01 14:03:56 -07:00
Garret Rieger 9e99d08470 [repacker] validate link widths during repacker setup. 2022-12-01 20:17:41 +00:00
Garret Rieger edf7a29595 [repacker] Validate link positions before running the repacker. 2022-12-01 20:17:41 +00:00
Garret Rieger deca30b268 [repacker] get repacker fuzzer working.
Additionally add helper method that allows a graph to be saved as a fuzzer seed.
2022-12-01 20:17:40 +00:00
Garret Rieger 985b19f678 [repacker] begin implementing a fuzzer for the repacker api. 2022-12-01 20:17:39 +00:00
Matthias Clasen c6d616cc41 Generate and install hb-features.h
This header has defines for all the optional
dependendencies that come with their own Harfbuzz
headers, so you can do:

  #include <hb-features.h>
  #ifdef HB_HAS_DIRECTWRITE
  #include <hb-directwrite.h>
  #endif
2022-12-01 18:16:55 +08:00
Behdad Esfahbod 8805a866b5 [ClassDef2] Write a few loops as range-based for 2022-11-30 17:18:04 -07:00
Behdad Esfahbod ac8b232a2d [gsub] Cache intersects_class results for closure
Benchmark                                                                                 Time             CPU      Time Old      Time New       CPU Old       CPU New
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
BM_subset/subset_codepoints/NotoNastaliqUrdu-Regular.ttf/nohinting/10                  +0.0246         +0.0240             0             0             0             0
BM_subset/subset_codepoints/NotoNastaliqUrdu-Regular.ttf/nohinting/64                  -0.5541         -0.5544             4             2             4             2
BM_subset/subset_codepoints/NotoNastaliqUrdu-Regular.ttf/nohinting/512                 -0.1120         -0.1123            43            38            43            38
BM_subset/subset_codepoints/NotoNastaliqUrdu-Regular.ttf/nohinting/1400                -0.1154         -0.1159            43            38            43            38
2022-11-30 17:09:04 -07:00
Behdad Esfahbod c6a4b60116 [gsubgpos] Add an unlikely 2022-11-30 15:02:42 -07:00
Behdad Esfahbod 32dd9810cf [subset-cff1] Cache glyph-to-sid-map in the accelerator
Benchmark                                                                                      Time             CPU      Time Old      Time New       CPU Old       CPU New
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
BM_subset/subset_codepoints/SourceHanSans-Regular_subset.otf/nohinting/10                   -0.0841         -0.0843             0             0             0             0
BM_subset/subset_codepoints/SourceHanSans-Regular_subset.otf/nohinting/64                   -0.1305         -0.1305             0             0             0             0
BM_subset/subset_codepoints/SourceHanSans-Regular_subset.otf/nohinting/512                  -0.1398         -0.1401             1             1             1             1
BM_subset/subset_codepoints/SourceHanSans-Regular_subset.otf/nohinting/4096                 +0.0382         +0.0380             9             9             9             9
BM_subset/subset_codepoints/SourceHanSans-Regular_subset.otf/nohinting/10000                +0.0213         +0.0211            11            11            11            11
2022-11-30 14:00:33 -07:00
Behdad Esfahbod 72fabef0a4 [SingleSubstFormat2] Speed up closure 2022-11-30 11:37:49 -07:00
Behdad Esfahbod 2dc2e016d4 [cff] Enable an unlikely 2022-11-30 11:25:50 -07:00
Behdad Esfahbod 582a87ef0a [cff] Speed up FDSelect0 sanitize 2022-11-30 11:20:19 -07:00
Garret Rieger 2658370f00 [subset] make the cmap cache in accelerator const. 2022-11-29 22:04:10 -07:00
Garret Rieger 7551a668e3 [subset] Make cff_accelerator const.
This gives more confidence that it won't be accidentally modified by the subset operation using it.
2022-11-29 22:04:10 -07:00
Behdad Esfahbod d8d0e06694 [array] Comment 2022-11-29 21:35:54 -07:00
Behdad Esfahbod 2fecf2aa19 [ClassDef] Minor rename 2022-11-29 21:25:01 -07:00
Behdad Esfahbod 8f632ca884 [ClassDef] Write another loop as range for 2022-11-29 21:23:35 -07:00
Behdad Esfahbod 87b12aee13 [ClassDef] Write a couple loops as range for 2022-11-29 21:18:48 -07:00
Behdad Esfahbod ccd40c842c [ClassDef] Optimize intersected_class_glyphs 2022-11-29 21:15:19 -07:00
Behdad Esfahbod 44c585a6df [ClassDef] Fix disabled codeblock 2022-11-29 20:52:48 -07:00
Behdad Esfahbod 9b7617d433 [ClassDef2] Use a faster algorithm in subset()
Speedup across the board; up to 40% for MPlus1 at small sizes.
2022-11-29 20:29:58 -07:00
Behdad Esfahbod ae5e6d562b [ClassDef2] Micro-optimize 2022-11-29 15:48:38 -07:00
Behdad Esfahbod 7129b79406 [open-type] Add faster range-based loop to array types 2022-11-29 15:33:07 -07:00
Behdad Esfahbod dc82334061 Remove a couple of unneeded .iter() invocations 2022-11-29 15:26:55 -07:00
Behdad Esfahbod 00f2657bb8 [subset] Accelerate sanitize-table-cache
Big wins all across small subsets

BM_subset/subset_codepoints/Roboto-Regular.ttf/nohinting/10                              -0.1140         -0.1129             0             0             0             0
BM_subset/subset_codepoints/Amiri-Regular.ttf/nohinting/10                               -0.4717         -0.4714             0             0             0             0
BM_subset/subset_codepoints/NotoNastaliqUrdu-Regular.ttf/nohinting/10                    -0.8147         -0.8146             0             0             0             0
BM_subset/subset_codepoints/NotoSansDevanagari-Regular.ttf/nohinting/10                  -0.3248         -0.3242             0             0             0             0
BM_subset/subset_codepoints/Mplus1p-Regular.ttf/nohinting/10                             -0.1262         -0.1260             0             0             0             0
BM_subset/subset_codepoints/SourceHanSans-Regular_subset.otf/nohinting/10                -0.0308         -0.0309             0             0             0             0
BM_subset/subset_codepoints/SourceSansPro-Regular.otf/nohinting/10                       -0.1374         -0.1373             0             0             0             0
BM_subset/subset_codepoints/AdobeVFPrototype.otf/nohinting/10                            -0.4555         -0.4555             0             0             0             0
BM_subset/subset_codepoints/MPLUS1-Variable.ttf/nohinting/10                             -0.4175         -0.4174             0             0             0             0
BM_subset/subset_codepoints/RobotoFlex-Variable.ttf/nohinting/10                         -0.4214         -0.4214             0             0             0
2022-11-29 15:20:13 -07:00
Behdad Esfahbod 33165f4848 [bit-page] Remove ELT_BITS_LOG_2
My compiler is smart enough to take care of it.
2022-11-29 15:15:43 -07:00
Garret Rieger 7a004a7ac2 [subset] Cache per subtable cmap unicode mappings. 2022-11-28 19:48:15 -07:00
Behdad Esfahbod d2a2670e54 [iter] Simplify has() interface implementations 2022-11-28 19:43:09 -07:00
Behdad Esfahbod cba82829ba [subset-cff1] Share subrs object
Multiple FDs might share the same subrs...
2022-11-28 16:19:54 -07:00
Behdad Esfahbod c7b998b355 [cff2] Don't share fd-array link
No point.
2022-11-28 16:18:21 -07:00
Behdad Esfahbod 3d9e3c2dc7 [subset-cff2] Don't share varstore object 2022-11-28 16:17:09 -07:00
Behdad Esfahbod c503cf003e [cmap] Store offset, not pointer, in cmap cache 2022-11-28 15:53:35 -07:00
Behdad Esfahbod 3e151139a8 [PairPos] Optimize get_effective_value_format
Speeds up BM_subset/subset_glyphs/SourceHanSans-Regular_subset.otf/nohinting/512
12%.
2022-11-28 14:23:49 -07:00
Behdad Esfahbod 3131aecf9f [array/hash] Fix asan issue
../src/hb-algs.hh:240:43: runtime error: reference binding to misaligned address 0x7ffe91a08b0e for type 'const unsigned int', which requires 4 byte alignment
2022-11-28 14:12:55 -07:00
Behdad Esfahbod 26ad7a6022 [gpos] Minor micro-optimize 2022-11-28 14:12:52 -07:00
Behdad Esfahbod c769d7e181 [gpos] Whitespace 2022-11-28 14:03:58 -07:00
Behdad Esfahbod 3ea0f37c30 [subset-cff] Move an init to constructor
The init was not called anyway.
2022-11-28 13:58:44 -07:00
Behdad Esfahbod 6c92c3e0cf [subset-cff] Remove unnecessary check 2022-11-28 13:54:24 -07:00
Behdad Esfahbod 7fd300dd9a [subset-cff] Use constructor for parsed_cs_op_t 2022-11-28 13:51:16 -07:00
Garret Rieger bd37900e0d [subset] use a reference to cached global/loca subrs.
Previously they were being copied in. Copying is no longer necessary now that hint dropping doesn't mutate the arrays.
2022-11-28 13:43:52 -07:00
Behdad Esfahbod ded9de9cd8 [cff] bsearch in fdselect
Saves 8% in NotoSansCJK / 10000 subset benchmark.
2022-11-28 13:32:08 -07:00
Behdad Esfahbod 0c33aba30c [subset-cff] Rename drop flag to hinting flag 2022-11-28 12:28:13 -07:00
Behdad Esfahbod 6f5b531986 [subset-cff] Make no-hinting use accelerator as well 2022-11-28 12:24:29 -07:00
Behdad Esfahbod f51a624e67 [subset-cff] Micro-optimize drop_hints_in_str 2022-11-27 14:54:39 -07:00
Behdad Esfahbod 3860326688 [subset-cff] Write loop more idiomatic 2022-11-27 13:23:13 -07:00
Behdad Esfahbod 3ff502d3ae [subset-cff] Remove unnecessary initialization 2022-11-27 12:58:04 -07:00
Behdad Esfahbod 6af4985bf9 [subset-cff] No need for bitflag here anymore 2022-11-26 18:20:20 -07:00
Behdad Esfahbod 69ce606d14 [subset-cff] Immediately drop subr numbers instead of marking for skip
Seems to work and saves ~2% time.
2022-11-26 18:18:35 -07:00
Behdad Esfahbod 1cf4f3e083 [subset-cff] More comment 2022-11-26 18:15:28 -07:00
Behdad Esfahbod f68221ff43 [subset-cff] Add comment 2022-11-26 18:12:14 -07:00
Behdad Esfahbod 048ab8a066 [subset-cff] Remove unused bits 2022-11-26 18:00:43 -07:00
Behdad Esfahbod 37cbfc0c7e [subset-cff] Remove unneeded member 2022-11-26 17:57:44 -07:00
Behdad Esfahbod 46ab15137b [subset-cff] Add has_calls to parsed charstrings
Optimize closure based on it.
2022-11-26 17:49:21 -07:00
Behdad Esfahbod 6d53074e63 [subset-cff] Drop another unused parameter 2022-11-26 17:23:09 -07:00
Behdad Esfahbod 42615561b5 Optimize a couple array references 2022-11-26 17:13:20 -07:00
Behdad Esfahbod 04d23b7ca8 [subset-cff] Micro-optimize collect_subr_refs_in_str 2022-11-26 17:08:00 -07:00
Behdad Esfahbod 9d18180c3c [array] Use hb_hash instead of handrolling 2022-11-26 15:38:21 -07:00
Behdad Esfahbod e302b9d5da Fix build 2022-11-26 15:18:16 -07:00
Behdad Esfahbod 70d97d079b [subset-cff] Remove unused argument 2022-11-26 15:16:11 -07:00
Behdad Esfahbod 4167e93a15 [subset-cff2] Micro-optimize blend operator 2022-11-26 15:14:52 -07:00
Behdad Esfahbod f159bf075b [cff2] Micro-optimize blend operator 2022-11-26 15:11:32 -07:00
Behdad Esfahbod a331e913dc [bit-page] Hand-code equality
Faster than memcmp() because of alignment.
2022-11-26 14:59:37 -07:00
Behdad Esfahbod 9df06a2695 [bit-set] Fix is_subset() short-circut criteria
Ouch!
2022-11-26 14:56:45 -07:00
Behdad Esfahbod 915c1a00cf [vector] Add remove_unordered
Saves 5% in NotoNastaliq/1000 subset benchmark.
2022-11-26 14:48:57 -07:00
Behdad Esfahbod 4b8d8fbee4 [ot-map] Micro-optimize for size 2022-11-26 14:31:15 -07:00
Behdad Esfahbod 93f3a9dbc6 [ot-map] Micro-optimize more
Another 500 bytes.
2022-11-26 14:25:21 -07:00
Behdad Esfahbod f39f049870 [ot-map] Micro-optimize
Weird that shrinks size by 500 bytes.
2022-11-26 14:16:15 -07:00
Behdad Esfahbod 60bb32c454 [ot-map] Minor refactor 2022-11-26 14:12:57 -07:00
Behdad Esfahbod e3cc61838f [PairPos] Adjust kerning buffer messages 2022-11-26 13:58:04 -07:00
Behdad Esfahbod a81dd1053d [layout] Adjust printing feature tags
For required-feature, print spaces, not nul bytes.
2022-11-26 13:43:36 -07:00
Behdad Esfahbod 56e3868b52 [layout/buffer-message] Print feature name in lookup buffer messages 2022-11-26 13:14:23 -07:00
Garret Rieger a5d35fd80a [subset] use charstrings directly from accelerator cache if mutability isn't needed. 2022-11-25 16:50:55 -07:00
Behdad Esfahbod 026b64ef76 [subset-cff] Avoid set mallocation in hb_plan_subset_cff_fdselect 2022-11-25 14:57:40 -07:00
Behdad Esfahbod 74acf52f33 [subset-cff] Micro-optimize copy_str more 2022-11-25 14:43:44 -07:00
Behdad Esfahbod d2f3cde7ef [subset-cff] Micro-optimize copy_str 2022-11-25 14:38:30 -07:00
Behdad Esfahbod e333223f26 [array] Optimize serializing copy() 2022-11-25 14:26:02 -07:00
Behdad Esfahbod 22990fca1d
Merge pull request #3894 from googlefonts/cff_accel
[subset] Cache parsed char strings in CFF accelerator
2022-11-25 14:12:58 -07:00
Garret Rieger 8d5c899b0f [subset] In cff accelerator hold reference to CFF table instead of the whole font. 2022-11-25 20:53:20 +00:00
Behdad Esfahbod 7b197446ac [vector] Adjust for HB_OPTIMIZE_SIZE 2022-11-25 13:28:53 -07:00
Garret Rieger 75a99f28ab [subset] destruct cff accelerator if present. 2022-11-25 20:24:05 +00:00
Behdad Esfahbod 1d474194f0 [subset-cff] Micro-optimize encode_str 2022-11-25 13:21:35 -07:00
Behdad Esfahbod 3c4a610b59 [subset-cff] Micro-optimize copy_str some more 2022-11-25 13:16:30 -07:00
Behdad Esfahbod 535aadb309 [subset-cff] Micro-optimize collect_subr_refs_in_str more 2022-11-25 13:07:42 -07:00
Behdad Esfahbod 00a9df3a43 [subset-cff] Micro-optimize collect_subr_refs_in_str 2022-11-25 13:05:05 -07:00
Behdad Esfahbod d2a2f5bf4e [vector] Handroll copy 2022-11-25 12:44:02 -07:00
Behdad Esfahbod 1fed366d5b [serialize] Shut compiler warning off 2022-11-25 12:37:24 -07:00
Behdad Esfahbod f2297e6978 [buffer] Documentation
Fixes https://github.com/harfbuzz/harfbuzz/issues/3889
2022-11-25 11:33:00 -07:00
Garret Rieger 71c23c1c07 [subset] don't copy the entire global/loca subr lists from the accelerator.
Instead run a closure on the retained charstrings and copy only the referenced subrs. This significantly speeds up cases with small character sets.
2022-11-25 18:05:39 +00:00
Garret Rieger 4ff09274a8 [subset] In CFF accelerator keep a reference to original face.
The charstring objects reference memory from the original face so we need to maintain a reference to prevent it from being destroyed.
2022-11-24 22:47:29 +00:00
Behdad Esfahbod 6aaa16627c [Coverage] Comment 2022-11-24 14:58:42 -07:00
Behdad Esfahbod 06e2147a48 More call set->next() directly 2022-11-24 14:56:04 -07:00
Behdad Esfahbod 196c9db06f Call ->next() directly 2022-11-24 14:51:52 -07:00
Behdad Esfahbod 03d64b7469 [bit-set] Remove TODO that would never happen 2022-11-24 14:33:18 -07:00
Behdad Esfahbod 690df8a369 [bit-set] Micro-optimize prev() 2022-11-24 14:32:51 -07:00
Behdad Esfahbod fe5d9176ae [bit-set] Micro-optimize size
It's silly that this saves size at all. :(
2022-11-24 14:30:18 -07:00
Behdad Esfahbod cf9b9929df [bit-set] Micro-optimize process() 2022-11-24 14:26:28 -07:00
Behdad Esfahbod d77903db7b [bit-set] Micro-optimize 2022-11-24 14:22:32 -07:00
Behdad Esfahbod 13dd4b464b [bit-set] Micro-optimize access 2022-11-24 14:20:42 -07:00
Garret Rieger a3afa61ce8 [subset] use cached parsed char strings if available. 2022-11-24 21:14:00 +00:00
Garret Rieger 47c125845c [subset] Cache parsed charstrings in the cff accelerator. 2022-11-24 21:14:00 +00:00
Garret Rieger 48b6837074 [subset] add a CFF specific accelerator object.
This allows CFF specific accelerator structures to be isolated to the CFF code.
2022-11-24 21:13:59 +00:00
Behdad Esfahbod d77f346d1a [subset-cff] Minor rename 2022-11-24 14:02:46 -07:00
Behdad Esfahbod 29a0fa089a [subset-cff] Micro-optimize 2022-11-24 14:00:59 -07:00
Behdad Esfahbod d480ae1fac [cff] Remove unused function 2022-11-24 13:53:43 -07:00
Behdad Esfahbod 73046d53e5 [shaper] Disable dumber shaper if no AAT 2022-11-24 13:49:29 -07:00
Behdad Esfahbod e9f964c01a [ot-face] Declare more tables as core 2022-11-24 13:38:53 -07:00
Behdad Esfahbod 5bc27a128d [machinery] Comment 2022-11-24 13:30:12 -07:00
Behdad Esfahbod d21bfb0861 [normalize] Remove an unlikely
Keep unlikely for truely unlikely scenarios.
2022-11-24 13:14:05 -07:00
Behdad Esfahbod 9e1239f443 [config] Define HB_NO_VERTICAL in HB_LEAN and as such in HB_TINY 2022-11-24 13:00:47 -07:00
Behdad Esfahbod 6f133ccfde [glyf] Fix build with HB_NO_VERTICAL 2022-11-24 12:59:55 -07:00
Behdad Esfahbod 76420ef769 [machine.rl] Remove unlikely from what happens 1/16 of the time 2022-11-24 12:52:15 -07:00
Behdad Esfahbod 1248574454 [config] Disable Zawgyi shaper in HB_MINI/HB_TINY 2022-11-24 12:46:04 -07:00
Behdad Esfahbod 05aa084e67 [PairPos] Another attempt at fixing unsafe-to-break with ValueFormat2
Fixes https://github.com/harfbuzz/harfbuzz/issues/3888#issuecomment-1326781116

Test:
$ hb-shape XBRoya34.ttf  ' الأ' --show-flags --script=arab
2022-11-24 12:14:09 -07:00
Behdad Esfahbod 54ae3345b2 [buffer] Improve documentation of hb_buffer_add_codepoints()
Fixes https://github.com/harfbuzz/harfbuzz/issues/3889
2022-11-24 12:00:36 -07:00
Behdad Esfahbod a4a4078632
Merge pull request #3893 from googlefonts/preprocess_test
[subset] Fix testing of preprocess
2022-11-24 11:56:58 -07:00
Behdad Esfahbod 0c70bc7f32 [skippy-iter] Fix two logic errors
First, a signed underflow.

Second, a wrong condition.

Both were introduced in 42681bdb55
2022-11-24 11:48:48 -07:00
Behdad Esfahbod 3b43096ef3 [buffer] Whitespace 2022-11-23 22:04:02 -07:00
Behdad Esfahbod 094f80738a [buffer] Handle null buffer in set_message_func 2022-11-23 22:03:26 -07:00
Behdad Esfahbod 1fa64c0c23 [gsubgpos] Conditionalize skippy on unsafe-to-concat 2022-11-23 21:38:51 -07:00
Behdad Esfahbod 42681bdb55 [gsubgpos] No logic-change minor rewrite 2022-11-23 21:36:43 -07:00
Behdad Esfahbod c15efdec49 [gsubgpos] Comment 2022-11-23 21:14:28 -07:00
Behdad Esfahbod 7ec1c41a55 [gsubgpos] Skippy-iter: Prefer correctness to performance
Prefer unsafe-to-concat correctness, over performance.
2022-11-23 21:12:41 -07:00
Behdad Esfahbod dce3502e10 [array] Add commented-out static asserts
They don't work.
2022-11-23 18:34:54 -07:00
Behdad Esfahbod a7fee43cef [priority-queue] Minor micro-optimize 2022-11-23 17:46:32 -07:00
Garret Rieger ff3cac0ccd [subset] Fix unecessary trailing 0 bytes left by ContextFormat2 pruning.
Uneeded rules where beind removed from the count by the bytes for them was being left in the font.
2022-11-23 23:50:49 +00:00
Behdad Esfahbod f2851e4157 [test-map] Test has() getter with unique-ptr 2022-11-23 16:50:30 -07:00
Behdad Esfahbod 5f3a780614 [font] Protect against div-by-zero 2022-11-23 16:45:46 -07:00
Behdad Esfahbod 060ecac949 [font] Respect subfont slant setting in hb-draw
Fixes https://github.com/harfbuzz/harfbuzz/issues/3890
2022-11-23 16:31:37 -07:00
Garret Rieger 51028e63e6 [subset] Retain all glyphs in preprocessed face. 2022-11-23 22:51:16 +00:00
Behdad Esfahbod 404cb99d86 [buffer-diff] Fix check for glyph flag equality
I'm not sure if the old behavior was intentional, but it was checking
that the glyph flags were a subset of the reference buffer's glyph
flags.  I don't see why that is useful.  Fix that.

Then make the buffer-verify code ignore flag differences when verifying
buffers, since our unsafe-to-concat flag at least, is conservative and
not guaranteed to be produced the same in fragments.  See:

https://github.com/harfbuzz/harfbuzz/issues/3888
2022-11-23 15:37:03 -07:00
Garret Rieger 4c49daf7cd [subset] actually use the preprocessed face in hb-subset.
Tests weren't actually using the preprocessed face due to this typo in util/hb-subset.
2022-11-23 22:33:57 +00:00
Garret Rieger 2c0afde737 [subset] add an inprogress accelerator to plan.
This allows subset code to cache information into the accelerator during preprocess subset. Previously the accelerator was created at the end of subsetting.
2022-11-23 13:41:52 -07:00
Garret Rieger 81640fdffe [subset] fix leaked font in glyf::subset(...) 2022-11-23 13:41:52 -07:00
Behdad Esfahbod dcce53ddcb [cff] Micro-optimize fetch_op 2022-11-23 13:20:48 -07:00
Behdad Esfahbod 0bf7d9eb4d [subset-cff] Micro-optimize encode_byte 2022-11-23 13:20:48 -07:00
Behdad Esfahbod a23f820427 [subset-cff] Micro-optimize array access 2022-11-23 13:20:48 -07:00
Behdad Esfahbod 1e8f1ac677 [subset-glyf] Micro-optimize array access 2022-11-23 13:20:48 -07:00
Behdad Esfahbod 356d135ed6 [subset-glyf] Reduce roundf calls
Saves 7% on MPLUS1-Variable/6000 benchmark.
2022-11-23 13:20:48 -07:00
Garret Rieger 463ae07e99 [subset] In the preprocess subset call always use long loca.
Long loca is needed so that we can store the trimmed glyph bytes to allow us to safely skip trimming in the later subset.
2022-11-23 12:52:55 -07:00
Behdad Esfahbod 299ec902eb [glyf] Move instanciation to serialize() 2022-11-22 16:03:02 -07:00
Behdad Esfahbod d8d881f22d [subset-glyf] Don't create a second glyf accelerator 2022-11-22 15:24:16 -07:00
Behdad Esfahbod 7560930070 [glyf] Add _create_font_for_instancing 2022-11-22 15:22:25 -07:00
Behdad Esfahbod 40634ceeb0 [glyf] Adjust data types 2022-11-22 15:07:16 -07:00
Behdad Esfahbod ba0d28ea36 [glyf] Fix font error check 2022-11-22 15:01:48 -07:00
Behdad Esfahbod 04c525019c [glyf] Use a malloc instead of calloc 2022-11-22 14:54:55 -07:00
Behdad Esfahbod 024aa81805 [glyf] Micro-optimize encode_coord 2022-11-22 14:51:42 -07:00
Behdad Esfahbod b6694597f9 [glyf] Micro-optimize encode_flag() 2022-11-22 14:49:01 -07:00
Behdad Esfahbod d47cfe7936 [glyf] Minor use operator ++ 2022-11-22 14:45:04 -07:00
Behdad Esfahbod 03e6bde790 [glyf] Minor adjustment to lastflag handling
No logic change.
2022-11-22 14:40:50 -07:00
Behdad Esfahbod 0ca9fda889 [glyf] Remove misplaced comment 2022-11-22 14:39:10 -07:00
Behdad Esfahbod 44be8ef4ce [gvar] Skip degenerate all-untouched delta-sets 2022-11-22 14:21:25 -07:00
Behdad Esfahbod 656bb223f1 [gvar] Micro-optimize unpack_points 2022-11-22 14:16:40 -07:00
Behdad Esfahbod a383027262 [gvar] Cosmetic 2022-11-22 14:15:17 -07:00
Behdad Esfahbod be89919a70 [gvar] is_valid() remove a check
I don't know why this check was there, but it doesn't make sense
because that function never returns 0 / false.
2022-11-22 13:56:20 -07:00
Behdad Esfahbod e8ddf107d0 [gvar] Optimize a loop 2022-11-22 13:29:32 -07:00
Behdad Esfahbod dd6fcec92c [gvar] Remove a conditional 2022-11-22 13:27:40 -07:00
Behdad Esfahbod a02317238a [gvar] Refactor deltas array access 2022-11-22 13:24:39 -07:00
Behdad Esfahbod c34c77698c [gvar] Don't try IUP if all points are specified 2022-11-22 13:21:01 -07:00
Behdad Esfahbod 27c4037e59 [gvar] Micro-optimize boundary-checking 2022-11-22 13:12:22 -07:00
Behdad Esfahbod ab8346fb6f [gvar] Add an unlikely 2022-11-22 13:07:39 -07:00
Behdad Esfahbod 1e8a342ea2 [gvar] Micro-optimize int types 2022-11-22 13:04:32 -07:00
Behdad Esfahbod 4afcdf675b More hb_memcpy 2022-11-22 12:56:48 -07:00
Behdad Esfahbod 58a696d80e More hb_memset 2022-11-22 12:56:05 -07:00
Behdad Esfahbod 59c45f6deb Use hb_memcpy instead of memcpy consistently 2022-11-22 12:54:50 -07:00
Behdad Esfahbod ac0efaf818 Use hb_memset instead of memset consistently 2022-11-22 12:50:36 -07:00
Behdad Esfahbod 44a892a233 [shape] Use hb_memcmp instead of memcmp 2022-11-22 12:48:52 -07:00
Behdad Esfahbod c53c648127 [subset-cff] Another handrolled memcpy 2022-11-22 12:46:25 -07:00
Behdad Esfahbod ae578705c2 [array] Write hash as range for loop again
Now that our range loop is faster than our own iter.
2022-11-22 12:23:17 -07:00
Behdad Esfahbod 13e1ca9eb5 [cff] Micro-optimize memcpy 2022-11-22 12:19:28 -07:00
Behdad Esfahbod 2968dd7844 [gvar] Optimize as_array() access 2022-11-22 11:57:29 -07:00
Behdad Esfahbod bb3bb76450 [gvar] Optimize scalar = 1.0 case 2022-11-22 11:53:35 -07:00
Behdad Esfahbod 2d098d5d7f [gvar] Use memset 2022-11-22 11:51:04 -07:00
Behdad Esfahbod e630a65e60 [gvar] Micro-optize vector extend 2022-11-22 11:29:13 -07:00
Behdad Esfahbod 49d4f62135 [gvar] Micro-optimize 2022-11-22 11:14:56 -07:00
Behdad Esfahbod 1758ee6646 [glyf] Minor write loop more idiomatically 2022-11-22 10:55:16 -07:00
Behdad Esfahbod 16ec9dcc1b [gvar] Whitespace 2022-11-22 10:55:16 -07:00
Behdad Esfahbod b567ce51d3 [subset] Don't trim glyf's again if preprocessed
Speeds up M1/10000 benchmark by 30%!
2022-11-22 10:55:08 -07:00
Behdad Esfahbod 72059a4789 [gvar] Optimize IUP alg 2022-11-22 10:41:37 -07:00
Behdad Esfahbod ee9873b5ed [gvar] Disable initializing vectors when not necessary 2022-11-22 10:23:17 -07:00
Behdad Esfahbod b0d2641186 [vector] Add "initialize" argument to resize() 2022-11-22 10:20:11 -07:00
Behdad Esfahbod a2059f8f55 [gvar] Optimize unpack_points 2022-11-22 10:16:21 -07:00
Behdad Esfahbod 6d7206b68b [gvar] Optimize unpack_deltas 2022-11-22 10:13:14 -07:00
Behdad Esfahbod bca569ae53 [array] Speed up hash() for byte arrays 2022-11-21 23:19:42 -07:00
Behdad Esfahbod d7b492e3f5 Revert "[array] Remove hash specializations for bytes"
This reverts commit 213117317c.
2022-11-21 23:08:51 -07:00
Behdad Esfahbod 1572ba281a [subset-cff] Return in subr closure if already seen subr
Not sure why this was not done before.
2022-11-21 22:26:44 -07:00
Behdad Esfahbod a29ca6efbc [subset-cff] Comment 2022-11-21 22:02:17 -07:00
Behdad Esfahbod 28e767ddea [subset-cff] Really optimize op_str_t / parsed_cs_op_t layout
Now parsed_cs_op_t and op_str_t are both 16 bytes.

Saves another 7% in SourceHanSans/10000 benchmark.
2022-11-21 21:59:51 -07:00
Behdad Esfahbod 2d5ee23731 [subset-cff] Readjust parsed_cs_op_t
Now it doesn't matter anymore since op_str_t is adjusted and
is 16 bytes with 8byte alignment.
2022-11-21 21:55:21 -07:00
Behdad Esfahbod 4f056b923a [subset-cff] Optimize op_str_t layout 2022-11-21 21:37:57 -07:00
Behdad Esfahbod a750cb0128 Simplify rvalue creation 2022-11-21 21:03:32 -07:00
Behdad Esfahbod 86a763c651 [map] Make keys moveable 2022-11-21 20:53:44 -07:00
Behdad Esfahbod cf20d2ec5d [map] Take const key 2022-11-21 20:47:17 -07:00
Behdad Esfahbod 3d1c76f713 [serializer] Don't hash objects twice 2022-11-21 19:40:32 -07:00
Behdad Esfahbod 35878df215 [algs] Implement swap() for pair_t
Helps priority_queue::pop_minimum and friends, which help subsetter
repacker. Shows a few percentage improvement on NotoNastaliq benchmark.
2022-11-21 19:14:03 -07:00
Behdad Esfahbod a2984a2932 [cff] Remove unnecessary namespacing 2022-11-21 18:40:52 -07:00
Behdad Esfahbod dc3bb5e0ed [subset-cff] Pre-allocate values array for subroutines as well 2022-11-21 18:18:48 -07:00
Behdad Esfahbod c6279224db [cff] Adjust pre-allocation
This better matches actual usage, given that ops are one or two
bytes, and vector also allocates 50% extra.
2022-11-21 18:01:50 -07:00
Behdad Esfahbod bab8ec58b0 [subset-cff] Disable sharing when packing charstring INDEXes
Saves another 8%ish.
2022-11-21 17:46:32 -07:00
Behdad Esfahbod 2cadacad6c [cff] Simplify str_encoder_t error handling 2022-11-21 17:17:15 -07:00
Behdad Esfahbod f263e3fe2e [cff] Manually copy short strings instead of memcpy() 2022-11-21 17:04:55 -07:00
Behdad Esfahbod 38efd1862f [cff] Add a likely() 2022-11-21 17:02:11 -07:00
Behdad Esfahbod 191025cc96 [cff] Adjust buffer pre-allocation
Most ops take one or two bytes, so allocate count*2, not count*3.
Shows minor speedup in subsetting benchmark (around 2%).
2022-11-21 16:58:19 -07:00
Behdad Esfahbod 4b2caafea2 [subset-cff] Optimize parsed_cs_op_t size
Shows 5% speedup on SourceHanSans-Regular/10000 benchmark.
2022-11-21 16:46:20 -07:00
Behdad Esfahbod e0b06bd1b1 [subset] Cache has_seac in accelerator
Speeds up SourceHanSans-Regular/10000 benchmark by %25.
2022-11-21 16:30:34 -07:00
Garret Rieger dd1ba328a8 [repacker] fix fuzzer timeout.
For https://oss-fuzz.com/testcase-detail/5845846876356608. Only process the set of unique overflows.
2022-11-21 16:24:48 -07:00
Behdad Esfahbod 59451502e9 [cff] Optimize env error checking 2022-11-21 15:23:16 -07:00
Behdad Esfahbod b238578a9c [cff] Optimize INDEX operator[] 2022-11-21 14:36:57 -07:00
Behdad Esfahbod d9de515a38 [cff] Optimize byte_str_ref_t array access 2022-11-21 14:23:07 -07:00
Behdad Esfahbod a81ec9b2b6 [cff] Optimize byte_str_ref_t inc()
Shows a couple percent speedup.
2022-11-21 14:03:28 -07:00
Behdad Esfahbod 3ff75411bd [algs] Fix bot fail 2022-11-21 13:08:55 -07:00
Behdad Esfahbod b81e3989f8 Try fixing arm-eabi build after a10cfe3f32 2022-11-21 13:02:40 -07:00
Behdad Esfahbod 4c14043b06 [algs] Add output argument to hb_unsigned_mul_overflows() 2022-11-21 12:56:33 -07:00
Behdad Esfahbod 25adbb3825 [algs] Use __builtin_mul_overflow
Compiles to smaller binary.
2022-11-21 12:47:53 -07:00
Behdad Esfahbod a10cfe3f32 [algs] Write hb_in_ranges() recursively 2022-11-21 12:37:59 -07:00
Behdad Esfahbod 2e86700e30 [gvar] Add memory-barrier as in ArrayOf 2022-11-21 12:28:10 -07:00
Behdad Esfahbod b00a911fa7 [sorted-array] Add faster iterator implementation here as well 2022-11-21 12:11:30 -07:00
Behdad Esfahbod 7cc79a8a86 [vector] Adjust comment 2022-11-21 12:09:24 -07:00
Behdad Esfahbod e82a3c69dd [array/vector] Optimize range-based for-loop
Avoid bounds-checking.
2022-11-21 12:00:10 -07:00
Behdad Esfahbod 0387182c2a [ot-map] Minor refactor features[i] access 2022-11-21 11:05:47 -07:00
Behdad Esfahbod 5ee6d5d77e [cff] Add memory-barrier to INDEX
Like we do for ArrayOf.
2022-11-21 11:00:29 -07:00
Behdad Esfahbod 6905d36d73 [cff] Fix fetch_op() bounds-checking 2022-11-21 10:51:33 -07:00
Behdad Esfahbod b51ab1a9e5 [cff] Optimize byte_str_ref_t
Make it 16 bytes instead of 24.  This struct is used in the subroutine
call stack heavily.

This change makes the HB AdobeVFPrototype benchmark to become faster
than FT one, with about 6% speedup as a result of this change.
2022-11-21 10:27:07 -07:00
Behdad Esfahbod 7a39464b18 [cff] Hide members of byte_str_ref_t 2022-11-21 09:48:54 -07:00
Behdad Esfahbod 18141f0007 [cff] Move a sub_array call
No logic change.... I hope?!
2022-11-21 09:47:03 -07:00
Behdad Esfahbod f66415cdd1 [cff] Move initialization of a type to constructor 2022-11-21 09:40:16 -07:00
Behdad Esfahbod 70a5cd53f6 [algs] Assert trivial copy assignable in stable_sort 2022-11-21 08:52:33 -07:00
Behdad Esfahbod 9bb39423f5 [algs] Simplify stable_sort signatures 2022-11-20 17:40:54 -07:00
Behdad Esfahbod d119568df6 [cbdt] Use vector tail() 2022-11-20 14:11:51 -07:00
Behdad Esfahbod 87a88117c8 [object] Use vector tail() 2022-11-20 14:10:39 -07:00
Behdad Esfahbod 76ce390b5a [ucd] Document algorithms 2022-11-20 13:54:56 -07:00
Behdad Esfahbod ed43bc5118 [buffer] Move delete_glyphs_inplace() here 2022-11-20 13:10:19 -07:00
Behdad Esfahbod dd88dae8a9 [unicode] Simplify set_funcs a bit more 2022-11-19 15:23:53 -07:00
Behdad Esfahbod 2d8ff3bcbe [unicode] Destroy user_data in set_funcs fail paths
This is what the font_funcs / draw_funcs do.
2022-11-19 15:23:44 -07:00
Behdad Esfahbod 527823ccac [unicode] Destroy user_data in set_funcs fail paths
This is what the font_funcs / draw_funcs do.
2022-11-19 15:19:08 -07:00
Behdad Esfahbod 56d6b6992b [font/draw] Remove unneeded branch
The preamble sets user_data/destroy to nullptr if func is nullptr.
2022-11-19 15:11:59 -07:00
Behdad Esfahbod 976bb26cc1 [draw] Optimize set_func functions 2022-11-19 15:06:23 -07:00
Behdad Esfahbod 114167a933 [font] Optimize set_func functions 2022-11-19 14:47:45 -07:00
Behdad Esfahbod f9d7b303ed [thai] Use smaller type for arrays
No logic change.
2022-11-19 14:20:36 -07:00
Behdad Esfahbod 72c4e431af [use-table] Add a OPTIMIZE_SIZE version 2022-11-19 13:40:33 -07:00
Behdad Esfahbod 83c3a91dc6 [gen-use-table] Report fullCost 2022-11-19 13:34:58 -07:00
Behdad Esfahbod ba08de624e [ucd] Change OPTIMIZE_SIZE to compression level 9
Also changes default compression level from 3 to 5, but that shows
no change in the generated table size.
2022-11-19 13:25:19 -07:00
Behdad Esfahbod b68f9f3cfe [machinery] Adjust comment 2022-11-18 21:36:01 -07:00
Behdad Esfahbod a47ba1dc0e [lazy-pointer] Hide instance 2022-11-18 21:14:07 -07:00
Behdad Esfahbod 281b4705b4 [pool] Rewrite a loop as dagger 2022-11-18 20:25:05 -07:00
Behdad Esfahbod 3ff8abf272 Revert "[map] Allow std::move-ing keys into the map"
This reverts commit f657ef7e57.

This breaks many compilers with messages like this:

hb-subset-plan.hh:226: undefined reference to `OT::head::tableTag'

I'm out of my depth re how to fix it.
2022-11-18 19:38:12 -07:00
Behdad Esfahbod 039e476bac [test-vector] Test sink-move'ing 2022-11-18 19:26:02 -07:00
Behdad Esfahbod a3a218edb5 [map] Add a couple more sink interfaces 2022-11-18 19:24:41 -07:00
Behdad Esfahbod 90226eab89 [test-map] Test inserting shared_ptr key 2022-11-18 19:21:58 -07:00
Behdad Esfahbod f657ef7e57 [map] Allow std::move-ing keys into the map 2022-11-18 19:17:03 -07:00
Behdad Esfahbod a1768ad829 [map] Fix use of != 2022-11-18 19:08:34 -07:00
Behdad Esfahbod e74b372b59 [test-map] Test moving values 2022-11-18 18:43:31 -07:00
Behdad Esfahbod a9c6a20b19 [map] Support moving value in sink interface 2022-11-18 18:29:12 -07:00
Behdad Esfahbod 1bf9afaad0 [test-vector] Test sink interface 2022-11-18 18:20:50 -07:00
Behdad Esfahbod fa0e4b041d [test-map] Test sink interface 2022-11-18 18:20:14 -07:00
Behdad Esfahbod 1c612a8541 [test-set] Test sinking range 2022-11-18 18:19:31 -07:00
Behdad Esfahbod 356708e34a [test-set] Test length of iterator 2022-11-18 18:17:34 -07:00
Behdad Esfahbod 2892fc71e8 [vector] Add std::move to pop()
This was removed in 76fc27713f,
but I believe that was faultly. It was because of a bad move
implementation in the set.
2022-11-18 18:03:59 -07:00
Behdad Esfahbod 921f45f46d [array] Rewrite hash() as dagger 2022-11-18 17:26:58 -07:00
Behdad Esfahbod 213117317c [array] Remove hash specializations for bytes
Not needed.
2022-11-18 17:24:44 -07:00
Behdad Esfahbod bef5a1c8dc [vector] Comment 2022-11-18 17:22:17 -07:00
Behdad Esfahbod 69b41f92ec [vector] Simplify shift_down_vector()
Compiler is smarter than I am.
2022-11-18 17:04:34 -07:00
Behdad Esfahbod 1dd9396c7a [vector] Optimize grow_vector() for size
Again, compiler is smarter than I am.
2022-11-18 17:01:14 -07:00
Behdad Esfahbod d36f688131 [vector] Optimize shrink_vector for size
Compiler is smarter than I am.
2022-11-18 17:00:07 -07:00
Behdad Esfahbod bc8eded296 [vector] Remove a for loop 2022-11-18 16:51:24 -07:00
Behdad Esfahbod afd9a58bd7 [vector] Save a couple hb_iter() invocations 2022-11-18 16:47:32 -07:00
Behdad Esfahbod 3ead9863d2 [map] Add size() 2022-11-18 16:43:47 -07:00
Behdad Esfahbod 42db8be189 [map] Minor remove if condition 2022-11-18 16:41:50 -07:00
Behdad Esfahbod 4ec706980c [map] Rewrite hash() as dagger
Somehow our daggers instead of for loop save size. I cannot
pinpoint why, other than maybe not inlining.
2022-11-18 16:39:30 -07:00
Behdad Esfahbod 025a68cb07 [map] Optimize copy resizing logic 2022-11-18 16:33:04 -07:00
Behdad Esfahbod f1d716871d [map] Change bucket_for_hash() to item_for_hash() 2022-11-18 16:31:27 -07:00
Behdad Esfahbod d012f9a9b3 [map] Change bucket_for() to item_for() 2022-11-18 16:29:06 -07:00
Behdad Esfahbod 68a29020c5 [bit-page] Write hash() as dagger 2022-11-18 16:02:45 -07:00
Behdad Esfahbod 87271e1b2e [bit-page] Write get_population as dagger 2022-11-18 16:01:23 -07:00
Behdad Esfahbod 744eb6baf9 [bit-page] Write is_empty() as dagger 2022-11-18 15:56:06 -07:00
Behdad Esfahbod 43a4028f0e [algs] Move hb_vector_size_t to bit-page as only user 2022-11-18 15:54:34 -07:00
Behdad Esfahbod 01f961ac3a [gsubgpos] Minor call hb_iter() instead of ->iter() directly 2022-11-18 15:47:17 -07:00
Behdad Esfahbod bba5765583 [gsubgpos] Remove a few unnecessary namespace invocations 2022-11-18 14:52:17 -07:00
Behdad Esfahbod b4d0d1608d [gsubgpos] Rewrite a couple apply() functions as daggers 2022-11-18 14:47:33 -07:00
Behdad Esfahbod 76c8214eb5 [gsubgpos] Move member around 2022-11-18 12:30:46 -07:00
Behdad Esfahbod 81a573008e [map] Optimize storage 2022-11-17 16:59:36 -07:00
Behdad Esfahbod ae080bf202 [map] Initialize key and value explicitly
If they are of int time they won't be initialized otherwise.
2022-11-17 16:34:58 -07:00
Behdad Esfahbod 1d41b9cb3c [user-data] std::move item 2022-11-17 16:26:48 -07:00
Behdad Esfahbod ff0bb74895 [map] Call item_t constructor/destructor directly 2022-11-17 16:17:37 -07:00
Behdad Esfahbod 5c88715949 [map] Add item_t.destruct() 2022-11-17 16:14:16 -07:00
Behdad Esfahbod 7f83040836 [map] Simplify (de)construction of item_t 2022-11-17 16:10:37 -07:00
Behdad Esfahbod 99103bd976 [map] Destruct objects when clearing 2022-11-17 15:57:06 -07:00