Repository navigation
v2.1.18
v2.1.19 — 每次加载"闪一下 1/4 大小":真因是自检截图的 clip.scale
这次抓到了实锤,不是推测。
证据
系统录屏是变帧率编码,一帧(16ms)的闪现会被直接丢掉——这就是前几轮我"录不到"的原因。
换成 avfoundation 固定 60fps 后,一次就抓到了:
帧 137–139 / 223–225 / 325–327 / 426–428 (每组 3 帧 ≈ 50ms)
内容宽度 = 25% ← 正好 1/4,页面被画进左上角
每次刷新出现一组,时机都在"刷新后约 500ms"
真因
白屏自检(v2.1.13 引入)为了省 CPU,把缩放参数交给了合成器:
Page.captureScreenshot({ clip: { x:0, y:0, width, height, scale: 0.25 } })带 clip.scale 的截图会让 Chromium 按该比例临时重建 surface。自检恰好跑在
did-finish-load + 450ms,那几十毫秒里窗口往往正在重新合成 —— 于是把这张 1/4 的图
贴上去 1–3 帧,再恢复。尺度(25%)和时机(+500ms)两处都对得上,而且这个自检
正是 v2.1.13 加的,"加载时闪一下"也是从那时开始出现。
改法
- 取帧优先
webContents.capturePage()—— 不碰 CDP 的 Page 域、没有 capture 模式;
拿不到(窗口被遮挡会返回空图)再用不带 clip/scale 的captureScreenshot兜底;
两者都拿不到 =no-frame,不判缺陷。 - 缩放只许我们自己用
nativeImage.resize({width:240})做,绝不把缩放参数交给合成器。 - 加固
_auditLayout:几何不一致时先等 120ms 复核,仍不一致才纠正——窗口刚变化的那
一两百毫秒里两个值会短暂对不上,此刻"纠正"等于把视图改成中间尺寸。
验证
npm run paint 23/23(blank-with-text 仍能报出来)、npm run layout 25/25、单测 970。
渠道
GitHub Release(含 dmg)· npm · MCP registry · /Applications —— 全部 2.1.19。