Commit graph

16324 commits

Author SHA1 Message Date
Behdad Esfahbod
841e86fd98 [subset/hmtx] Further speedup! 2023-06-03 16:09:45 -06:00
Behdad Esfahbod
de729ec105 [meta] Return reference from reference-wrapper 2023-06-03 15:48:54 -06:00
Behdad Esfahbod
c7493efeaf [subset/loca] Micro-optimize 2023-06-03 15:39:27 -06:00
Behdad Esfahbod
13a4c7b3d3 [subset/hmtx] Comment 2023-06-03 15:12:53 -06:00
Behdad Esfahbod
4da2996fe2 [doc] Fix 2023-06-03 15:08:20 -06:00
Behdad Esfahbod
c3e7f45166 Add HB_CODEPOINT_INVALID
Fixes https://github.com/harfbuzz/harfbuzz/issues/4262
2023-06-03 14:56:47 -06:00
Behdad Esfahbod
efefec13cc [subset/glyf] Remove unneeded codepath 2023-06-02 20:33:52 -06:00
Behdad Esfahbod
ac1f5ca0d9 [subset/loca] Micro-optimize 2023-06-02 17:07:44 -06:00
Behdad Esfahbod
6eae932566 [subset/loca] Reduce a vector allocation 2023-06-02 17:05:27 -06:00
Behdad Esfahbod
cd249d2364 [subset/hmtx] Micro-optimize 2023-06-02 16:15:05 -06:00
Behdad Esfahbod
ec8965e432 [subset/glyf] Don't clear loca allocation 2023-06-02 16:10:25 -06:00
Behdad Esfahbod
916629d182 [subset/hmtx] Don't clear allocation 2023-06-02 16:08:49 -06:00
Behdad Esfahbod
24b069cd53 [subset] Pre-alloc a few maps 2023-06-02 15:55:53 -06:00
Behdad Esfahbod
7319d0d712 [subset-plan] Add a couple of map pre-allocations
Approximate...
2023-06-02 15:41:47 -06:00
Behdad Esfahbod
76904b0423 [subset-plan] Simplify / speedup planning glyphset 2023-06-02 15:30:12 -06:00
Behdad Esfahbod
965ce7bba4 [subset-plan] Speed up planning new_to_old_gid_list 2023-06-02 15:24:00 -06:00
Behdad Esfahbod
b67e464b1c [subset/retaingid] Regain perf lost
In 0f12fd5a66
2023-06-02 15:11:06 -06:00
Behdad Esfahbod
0f12fd5a66 [subset/glyf] Fix for non-monotonic glyphmap
Slows things down again, but is correct. Still a good win
combined with the previous changes.
2023-06-02 13:58:55 -06:00
Behdad Esfahbod
66ce902c3a [glyf] Reduce allocation again 2023-06-02 13:53:21 -06:00
Behdad Esfahbod
0e0110e7f2 [glyf] Avoid a SubsetGlyph copy
Unfortunately hb_second() always does a copy...
2023-06-02 13:34:58 -06:00
Behdad Esfahbod
33ea8b5e5d [subset/glyf] Don't allocate empty SubsetGlyf's
Shows 33% speedup on Mplus/retaingid/10 benchmark:

Comparing before to after
Benchmark                                                                   Time             CPU      Time Old      Time New       CPU Old       CPU New
--------------------------------------------------------------------------------------------------------------------------------------------------------
BM_subset/subset_glyphs/Mplus1p-Regular.ttf/retaingids/10                -0.3296         -0.3294             0             0             0             0
2023-06-02 13:28:07 -06:00
Garret Rieger
ad872e2313 [subset] Optimize hmtx/vmtx serialization.
Make serializer allocation up front to avoid bounds checking overhead for each metric.

Benchmarks:
BM_subset/subset_glyphs/Mplus1p-Regular.ttf/retaingids/10_median                   -0.1005         -0.1005             0             0             0             0
BM_subset/subset_glyphs/Mplus1p-Regular.ttf/retaingids/64_median                   -0.0693         -0.0692             0             0             0             0
BM_subset/subset_glyphs/Mplus1p-Regular.ttf/retaingids/512_median                  -0.0294         -0.0293             1             1             1             1
BM_subset/subset_glyphs/Mplus1p-Regular.ttf/retaingids/4096_median                 -0.0033         -0.0032             3             3             3             3
BM_subset/subset_glyphs/Mplus1p-Regular.ttf/retaingids/10000_median                +0.0170         +0.0171             7             7             7             7
2023-06-02 12:41:44 -06:00
Behdad Esfahbod
c6368e014d [map] Return const reference from operator()
Like we do in operator[].
2023-06-01 20:51:17 -06:00
Behdad Esfahbod
b04ca1c188 Revert "[subset/glyf] Exact allocation"
This reverts commit a830f085c8.

Weirdly enough in a benchmark I'm running I see this show
some slowdown. Makes zero sense.
2023-06-01 20:43:07 -06:00
Behdad Esfahbod
a830f085c8 [subset/glyf] Exact allocation 2023-06-01 20:41:46 -06:00
Behdad Esfahbod
ff0b85cf57 [subset/glyf] Empty .notdef only if old-gid was also 0
Otherwise it wasn't a .notdef, even if new-gid is 0.
2023-06-01 20:30:56 -06:00
Behdad Esfahbod
65a7d8c6f0 [glyf] Empty glyphs need no padding 2023-06-01 20:20:00 -06:00
Behdad Esfahbod
73c18d1d42 [glyf] Micro-optimize padded_offsets 2023-06-01 20:11:22 -06:00
Behdad Esfahbod
88d8a6d69f [BEInt] Use packed-int trick for writing as well 2023-06-01 19:49:44 -06:00
Behdad Esfahbod
4d853b8ba6 [subset/regaingid/glyf] Add a fastpath for empty glyphs
Mplus benchmark:
Comparing before to after
Benchmark                                                                      Time             CPU      Time Old      Time New       CPU Old       CPU New
-----------------------------------------------------------------------------------------------------------------------------------------------------------
BM_subset/subset_glyphs/Mplus1p-Regular.ttf/retaingids/10                   -0.1764         -0.1771             0             0             0             0
BM_subset/subset_glyphs/Mplus1p-Regular.ttf/retaingids/64                   -0.1394         -0.1394             0             0             0             0
BM_subset/subset_glyphs/Mplus1p-Regular.ttf/retaingids/512                  -0.0644         -0.0645             0             0             0             0
BM_subset/subset_glyphs/Mplus1p-Regular.ttf/retaingids/4096                 +0.0132         +0.0131             1             1             1             1
BM_subset/subset_glyphs/Mplus1p-Regular.ttf/retaingids/10000                -0.0029         -0.0034             3             3             3             3
BM_subset/subset_glyphs/Mplus1p-Regular.ttf/10                              +0.0364         +0.0362             0             0             0             0
BM_subset/subset_glyphs/Mplus1p-Regular.ttf/64                              +0.0346         +0.0343             0             0             0             0
BM_subset/subset_glyphs/Mplus1p-Regular.ttf/512                             +0.0271         +0.0268             0             0             0             0
BM_subset/subset_glyphs/Mplus1p-Regular.ttf/4096                            +0.0193         +0.0193             1             1             1             1
BM_subset/subset_glyphs/Mplus1p-Regular.ttf/10000                           -0.0240         -0.0243             2             2             2             2
OVERALL_GEOMEAN                                                             -0.0305         -0.0307             0             0             0             0
2023-06-01 19:24:36 -06:00
Behdad Esfahbod
6ec7629fba [subset/glyf] Add a const 2023-06-01 18:18:30 -06:00
Behdad Esfahbod
9f54ab922f [subset-plan] Keep a reverse-gid vector
To speed up iteration.
2023-06-01 18:07:59 -06:00
Garret Rieger
6b0d386797 [subset] in subset benchmarks switch nohinting with retaingids.
retain gids is a more interesting case than no hinting for performance.
2023-06-01 18:04:21 -06:00
Qunxin Liu
1ae99d1a10 bug fix 2023-06-01 16:41:08 -06:00
Behdad Esfahbod
aa7dd70a86 [hmtx] Reduce map usage slightly 2023-06-01 14:24:33 -06:00
Garret Rieger
f41c5ec961 [map] update map benchmark to also test lookups that hit. 2023-06-01 12:39:58 -06:00
Qunxin Liu
4acf6a82bf [instancer-solver] port solver fix from fonttools
See https://github.com/fonttools/fonttools/issues/3139
2023-05-30 18:58:22 +02:00
Garret Rieger
f3b4d35f36 [subset] Fix fuzzer crash.
https://oss-fuzz.com/testcase-detail/6608005089853440
2023-05-30 18:56:48 +02:00
Garret Rieger
ff326fbe8f [repacker] check the result of add_buffer() in other places where it's called. 2023-05-30 01:40:57 +02:00
Behdad Esfahbod
66a84355ab [hash] Use unsigned types
Hopefully ubsan wouldn't complain about overflows now.
2023-05-29 17:17:15 -06:00
Behdad Esfahbod
4a93576bca Revert "[map] Speedup for int types"
This reverts commit c1b75f5ff0.

I was seeing very long chains (140) and a 17% slowdown in
BM_subset/subset_codepoints/RobotoFlex-Variable.ttf/512

Bummer.
2023-05-28 13:24:02 -06:00
Behdad Esfahbod
c1b75f5ff0 [map] Speedup for int types
Since our int hash is now good, we don't need the modulo prime
here, so forgo it.  Major speedup:

Comparing before to after
Benchmark                              Time             CPU      Time Old      Time New       CPU Old       CPU New
-------------------------------------------------------------------------------------------------------------------
BM_MapInsert/16                     -0.4136         -0.4137             6             4             6             4
BM_MapInsert/64                     -0.4442         -0.4441             6             3             6             3
BM_MapInsert/512                    -0.5382         -0.5383             8             4             8             4
BM_MapInsert/4096                   -0.4160         -0.4162             8             5             8             5
BM_MapInsert/32768                  -0.3256         -0.3258            12             8            12             8
BM_MapInsert/262144                 -0.1723         -0.1727            11            10            11             9
BM_MapInsert/1048576                -0.2310         -0.2309            28            22            28            22
BM_MapLookup/16                     -0.0247         -0.0247             3             3             3             3
BM_MapLookup/64                     -0.1039         -0.1038             3             3             3             3
BM_MapLookup/512                    -0.1076         -0.1079             4             3             4             3
BM_MapLookup/4096                   -0.3729         -0.3732             9             6             9             6
BM_MapLookup/32768                  +0.2467         +0.2468             9            12             9            12
BM_MapLookup/262144                 -0.1862         -0.1868            14            11            14            11
BM_MapLookup/1048576                +0.1159         +0.1160            15            17            15            17
OVERALL_GEOMEAN                     -0.2414         -0.2416             0             0             0             0
2023-05-28 13:03:04 -06:00
Behdad Esfahbod
7f111787e4 [benchmark-map] Remove overhead 2023-05-27 12:41:33 -06:00
Behdad Esfahbod
5666807328 [benchmark-map] Improve Insert benchmark
Previously it was enlarging the map depending on whatever
number of runs the benchmark-runner decided to run the loop.
That wasn't very useful...
2023-05-27 12:37:36 -06:00
Behdad Esfahbod
00900f761f [hash] Enable better hash for integers
https://github.com/harfbuzz/harfbuzz/pull/4228#issuecomment-1565079537
2023-05-27 10:14:09 -06:00
Garret Rieger
20c564bc76 [repacker] Fix fuzzer memory leak.
https://oss-fuzz.com/testcase-detail/6419865171525632
2023-05-27 01:16:46 +02:00
Behdad Esfahbod
5abe713203 [map] Resize map on long chain probes 2023-05-27 00:49:20 +02:00
Garret Rieger
a652281ed6 [subset] Fix fuzzer timeout.
Fixes https://oss-fuzz.com/testcase-detail/5979721620652032. Timeout was caused by degenerate map insert behaviour due to poor integer hash function. Presize the map to avoid it. Also fixes collect_mapping() for cmap format 13.
2023-05-27 00:25:47 +02:00
Behdad Esfahbod
208c9490cb [VarComposite] Limit number of axes that are copied
Bandaid for https://oss-fuzz.com/testcase-detail/4591122882887680
2023-05-26 12:03:34 -06:00
Behdad Esfahbod
5872bdf64d [vector] Add copy-constructor for array_t's 2023-05-26 11:44:18 -06:00