崮生(子虚) 49337c72bc perf(gsub): 缓存 isSubtableSkipableByCoverage per-subtable 结果,serialize 复用
subsetGSUB 预扫描对每个子表调 isSubtableSkipableByCoverage(判全空),serialize 阶段
serializeSubtable 内部对同一子表再调一次——重复。预扫描原 allEmpty=false 时 break 早退,
仅记录 lookup 级 allEmpty 布尔,serialize 无法复用逐子表结果。

改为预扫描完整扫描填 subtableSkipable: boolean[](与 subtableAbsOffs 同序),serializeSubtable
加 preCheckedSkipable 参数,serialize 主循环传 lk.subtableSkipable[j] 跳过内部重复预检。
allEmpty 从数组派生(全 true)。

安全性依赖 [[covCache 修复]](上一提交):isSubtableSkipableByCoverage 对 fmt3 调
readCoverageRemapped,covCache 顺序依赖 bug 已修复后结果真正顺序无关,故完整预扫描
改变填充顺序不再触发 FiraCode calt 输出变化。

A/B:6 字体(思源/白狐/令东/思源ttf/FiraCode/初夏)× ttf/woff2 共 12 产物逐字节 IDENTICAL。
性能(best-of-min):otf-思源 -9.2%、FiraCode -2.9%、初夏纯标点 -3.8%、白狐 -2.0%、
思源ttf -1.3%、令东持平(无大 GSUB)。基准测试全通过,SSIM 维持。

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