mirror of
https://github.com/2234839/web-font.git
synced 2026-09-04 23:02:27 +08:00
perf(woff2): triplet 编码 case2/3/4 去掉冗余的轴非零判定
case1 排除 dx===0、case2 排除 dy===0 后,走到 case3/case4 时两轴必非零, 故 case3/case4 的 'dx!==0 && dy!==0' 是冗余判定。令东 74.6% 点命中 case3, 每点省 2 次比较。case2 的 'dx!==0' 同理冗余(case1 未命中且 dy===0 则 dx 必非0)。 cmp 字节一致,逻辑等价已证明。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
72c6afef92
commit
60db8d226b
10
vendor/fonteditor-core/woff2/woff2-encode.js
vendored
10
vendor/fonteditor-core/woff2/woff2-encode.js
vendored
@ -517,11 +517,14 @@ function transformGlyfAndLoca(glyfData, locaData, indexFormat, numGlyphs) {
|
||||
_gs[wpos] = absDy & 0xFF;
|
||||
flag = curveBit + ((absDy & 0xF00) >> 7) + (dy >= 0 ? 1 : 0);
|
||||
adv = 1;
|
||||
} else if (dy === 0 && dx !== 0 && absDx < 1280) {
|
||||
} else if (dy === 0 && absDx < 1280) {
|
||||
/** 优化316: case2 去掉冗余 `dx !== 0`——case1 已排除 dx===0,走到此分支 dx 必非 0 */
|
||||
_gs[wpos] = absDx & 0xFF;
|
||||
flag = curveBit + 10 + ((absDx & 0xF00) >> 7) + (dx >= 0 ? 1 : 0);
|
||||
adv = 1;
|
||||
} else if (dx !== 0 && dy !== 0 && absDx < 65 && absDy < 65) {
|
||||
} else if (absDx < 65 && absDy < 65) {
|
||||
/** 优化316: case3 去掉冗余 `dx !== 0 && dy !== 0`——case1/case2 已排除任一轴为 0,
|
||||
* 走到此分支两轴必非 0。令东 74.6% 的点命中此分支,省 2 次/点冗余比较 */
|
||||
const ax = absDx - 1;
|
||||
const ay = absDy - 1;
|
||||
_gs[wpos] = ((ax & 0xF) << 4) | (ay & 0xF);
|
||||
@ -529,7 +532,8 @@ function transformGlyfAndLoca(glyfData, locaData, indexFormat, numGlyphs) {
|
||||
const ySignBit = dy >= 0 ? 1 : 0;
|
||||
flag = curveBit + 20 + (ax & 0x30) + ((ay & 0x30) >> 2) + xSignBit + 2 * ySignBit;
|
||||
adv = 1;
|
||||
} else if (dx !== 0 && dy !== 0 && absDx < 769 && absDy < 769) {
|
||||
} else if (absDx < 769 && absDy < 769) {
|
||||
/** 优化316: case4 同理去掉冗余 `dx !== 0 && dy !== 0` */
|
||||
const ax = absDx - 1;
|
||||
const ay = absDy - 1;
|
||||
_gs[wpos] = ax & 0xFF;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user