Cosimo Lupo
d4565155b8
[varStore] remove unused _Encoding methods
2025-02-06 19:11:30 +00:00
Cosimo Lupo
548ffda37b
[varStore] use the same sorting for both input/output
...
When the VarStore.optimize() algorithm was improved with the addition of a priority queue where pairs of encodings are sorted by decreasing gain (from merging one into the other), specifically with this commit https://github.com/fonttools/fonttools/commit/47ec18f788 , the pre-sorting step of the todo list (before the queue itself was populated) was kept to make sure the algorithm produces stable results no matter the order of the inputs.
The optimizer's output was itself sorted, again for stability, but using a different key function with_sort_key() from the one used on the input todo list gain_sort_key().
The rationale for a distinct gain_sort_key, where encodings get sorted by maximum theoretical gain (decreasing, initally, when reverse=True was set, then incrasing as reverse was somehow dropped), is no longer needed now that a priority queue is used (which sorts by actual gains from merging specific pairs of encodings) and is a remnant of the previous algorithm.
I propose we keep some pre-sorting to ensure stability (in case the priority queue initially contains multiple pairs with the same gain), but we use the same width_sort_key that is used at the end.
Note this doesn't change the overall level of compression achieved by the optimizer, but makes the algorithm a bit less complicated, and easier to match in our alternative Rust implementation.
2025-02-06 19:01:38 +00:00
Behdad Esfahbod
c91984ef77
[VARC] Use sparse-regions in MultiVarStore
...
Might revert as the savings are small.
https://github.com/harfbuzz/boring-expansion-spec/issues/103#issuecomment-1861531669
2024-05-22 18:46:06 -06:00
Behdad Esfahbod
5c278464e0
[subset/VARC] Subset MultiVarStore
2024-05-22 18:45:28 -06:00
Behdad Esfahbod
6bcab786a1
[varStore] Fix caching when setModel() is called repeatedly
2024-05-22 18:45:27 -06:00
Behdad Esfahbod
b7ab1d8c12
[varStore] Fix overflow logic
2024-05-22 18:45:27 -06:00
Behdad Esfahbod
a8005130cc
[varStore] Cache individual items in store*Many()
2024-05-22 18:45:27 -06:00
Behdad Esfahbod
6f4feffa11
[varStore] Add storeMastersMany / storeDeltasMany
2024-05-22 18:45:27 -06:00
Behdad Esfahbod
5cd2b1cc50
[varStore] Document sorting
2023-10-24 12:47:58 -06:00
Behdad Esfahbod
0a6b95af1e
[varLib.varStore] Revert micro-optimizations
...
Based on review.
2023-10-24 11:50:47 -06:00
Behdad Esfahbod
bf402b9fde
[varStore] Micro-optimize addItem()
2023-10-23 15:28:14 -06:00
Behdad Esfahbod
9e36b9465d
[varStore] Micro-optimize storeDeltas()
...
Also speed up the test slightly by skipping rounding.
2023-10-23 15:18:11 -06:00
Behdad Esfahbod
c7ce5b0f3c
[varStore] Handle >65535 items per encoding
...
By creating a new major for each 65535.
2023-10-23 14:43:10 -06:00
Qunxin Liu
a51b3c9d68
fix the order of prune_unused_regions, should be after vardata optimization
2023-09-05 10:44:29 -07:00
Behdad Esfahbod
59058bb54f
[varStore.optimize] Address review comment
...
Harmless thinko.
2023-05-25 12:24:46 -06:00
Behdad Esfahbod
4e7cdeb8b1
[varStore.optimize] More idiomatic
2023-05-25 11:35:50 -06:00
Behdad Esfahbod
0a239f15d8
[varStore.optimize] Comment
2023-05-25 11:33:08 -06:00
Behdad Esfahbod
f5e62a1375
[varLib.optimize] Minor more idiomatic
2023-05-25 10:54:13 -06:00
Behdad Esfahbod
dbc91b1b5b
[varStore.optimize] Remove unused variable
2023-05-25 08:52:13 -06:00
Behdad Esfahbod
12aba9070f
[varStore.optimize] Combine a couple of loops
2023-05-25 08:50:01 -06:00
Behdad Esfahbod
b0a0f74492
[varStore.optimize] Speed up some more
2023-05-25 08:47:47 -06:00
Behdad Esfahbod
b6ebb4c411
[varStore.optimize] Further speedup
2023-05-25 08:45:53 -06:00
Behdad Esfahbod
d8fabfa362
[varStore.optimize] Remove unused method
2023-05-25 08:28:12 -06:00
Behdad Esfahbod
832f2f766f
[varStore.optimize] Use faster intTools.bit_count as popcount
2023-05-25 08:19:15 -06:00
Behdad Esfahbod
9cbde09cdc
[varStore.optimize] Speed up
2023-05-25 08:09:27 -06:00
Behdad Esfahbod
f12f3d863c
[varStore.optimize] Remove unused best_new_encoding
2023-05-25 07:56:33 -06:00
Behdad Esfahbod
da305615d0
[varStore.optimize] Simplify algorithm
...
Produces better results even.
2023-05-25 07:49:13 -06:00
Behdad Esfahbod
47ec18f788
[varStore] Better optimize() algorithm
...
See comments.
Produces better results.
2023-05-25 07:39:41 -06:00
Behdad Esfahbod
93d87df315
[varStore] Refactor code into a method
2023-05-25 07:12:27 -06:00
Behdad Esfahbod
035529883c
[varStore] Minor rename a method
2023-05-25 07:06:48 -06:00
Behdad Esfahbod
c1ab8995f2
[varStore] Minor adjustment to the optimize() algorithm
...
It's very unlikely that this path is needed, but it's correct
to have it.
2023-05-25 07:00:28 -06:00
Behdad Esfahbod
a08f5ebbc9
[varStore] Update comment
2023-05-25 06:24:00 -06:00
Behdad Esfahbod
ae7394e68a
[varLib.main] Accept --quantization
2023-05-24 18:10:08 -06:00
Behdad Esfahbod
d9649a7835
[varStore] Add test for quantization
2023-05-24 18:10:08 -06:00
Behdad Esfahbod
311bda2021
[varStore] Add optional quantization to optimize()
2023-05-24 18:10:08 -06:00
Behdad Esfahbod
47813b217c
[varStore] Make optimize() stable
...
Before, calling optimize() on its own output could generate different
result. I think it's stable now.
2023-05-24 18:09:58 -06:00
Behdad Esfahbod
6b20edf1fb
[varStore] Fix algorithm comment to match code
2023-05-24 17:08:20 -06:00
Behdad Esfahbod
1aa088e150
[varStore.main] Speed up if output is not requested
2023-05-24 17:05:00 -06:00
Behdad Esfahbod
2f78605c27
[varStore] Change a sort key in optimize()
...
Produces more optimized results in empirical testing.
2023-05-24 16:55:16 -06:00
Behdad Esfahbod
aeaf98a438
[varStore] Another fix and test
2023-05-24 16:34:15 -06:00
Behdad Esfahbod
8ae33a7ef3
[varStore] Add a round=round parameter to storeMasters
2023-05-24 14:24:36 -06:00
Behdad Esfahbod
b72a8da045
[varStore] Adjust encoding overhead in optimize()
...
Previously we were not accounting for the LOffset to VarData.
2023-05-24 13:21:33 -06:00
Behdad Esfahbod
0677c0e705
[varStore] Another bugfix in optimize()
2023-05-24 13:18:58 -06:00
Behdad Esfahbod
cb2f5aacd3
[varStore] More documentation
2023-05-24 12:19:46 -06:00
Behdad Esfahbod
cdcbf64d36
[varStore] Document the optimize algorithm
2023-05-24 12:09:43 -06:00
Behdad Esfahbod
58954179ec
[varStore] Another fix to the optimize algorithm
...
Previously we were disregarding the best_gain. Ouch!
2023-05-24 12:02:05 -06:00
Behdad Esfahbod
6097b3293b
[varStore] Improve optimize algorithm
...
This was always supposed to be how it works, but was missed in
the initial implementation apparently.
2023-05-24 11:07:19 -06:00
Nikolaus Waxweiler
d584daa8fd
Blacken code
2022-12-13 11:26:36 +00:00
Cosimo Lupo
a08140dc76
[varStore/subset] correctly handle NO_VARIATION_INDEX when subsetting varidxes
...
otherwise GDEF/GPOS.remap_device_varidxes may fail with KeyError attempting to map a NO_VARIATION_INDEX
2022-07-06 17:29:00 +01:00
Cosimo Lupo
7ab7940761
varLib: simplify a bit following varStore.py recent changes
...
#2662
2022-06-24 10:20:48 +01:00