崮生(子虚) 1bc87763ad perf(gsub): fmt3 预检改用 coverageAllOutOfSubset 内联快判,跳过 readCoverageRemapped
isSubtableSkipableByCoverage 的 ChainContext format3 分支原对每个 coverage 调
readCoverageRemapped(判全子集外)——它 new Array+sort+Map.set 填 covCache,但思源
fmt3 预检 281 个 coverage 全子集外且 avg 仅 1.3 gid:数组分配/sort/cache 操作是纯固定开销,
且这些 skipable coverage 的 cache entry 永不被命中(skipable subtable 不深度解析)。

改用 coverageAllOutOfSubset 内联遍历字节判「全子集外」(不分配数组、不读写 covCache),
预检只判 skipable 不再填 cache;非 skipable subtable 深度解析时 readCoverageRemapped
自行首次填 cache(命中率不变,无双重遍历)。同时从 isSubtableSkipableByCoverage 移除
不再使用的 covCache 参数。

一致性([[gsub-subset-fmt3-prefetch-consistency]]):对齐 coverageAllOutOfSubset 的
COV_RANGE 分支与 readCoverageRemapped——end clamp 到 numGlyphs-1、start>=numGlyphs
的越界 range 计 origNonEmpty 不展开 gid。两者「全子集外」判定完全等价,故预检 skipable
⟺ 深度解析 coverage 失效,输出逐字节一致。

A/B:6 字体 × ttf/woff2 共 12 产物逐字节 IDENTICAL(含 FiraCode calt)。
性能(best-of-min,两轮一致):otf-思源 -12%、思源ttf -6%、FiraCode -2%、初夏 -3%。
基准测试全通过,SSIM 维持。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-25 03:32:15 +08:00
..
2026-04-08 22:05:17 +08:00
2024-08-19 18:10:09 +08:00