Files
ArtPlayer/refactor/changes/2026-09-14-PKG-JASSUB-10-render-resources.md
T

48 lines
3.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# PKG-JASSUB-10 绘制异常后的位图释放
修复主线程 asyncRender 的整批资源归属。旧 wrapper 在 drawImage 成功之后才关闭
当前 ImageBitmap;clearRect、画布尺寸更新或任意一次 drawImage 抛错,会跳过当前
和剩余位图的释放。现在在 finally 释放本消息的整个异步位图批次,原生异常继续
向调用方传播;正常绘制顺序、Worker 协议、公开类型和默认渲染模式保持不变。
同步 ImageData/ArrayBuffer 路径不执行 bitmap.close。
受控测试注入四种失败位置并验证异常对象、绘制次数及每张位图只释放一次。另有
同步缓冲区对照;既有正常 hybrid 绘制、迟到帧及销毁回归保留。原始源码16项中
12通过4失败;这四项都是资源释放断言失败。
原生浏览器测试从真实 JASSUB Worker/WASM 接收 ImageBitmap,再创建两个原生
副本作为同批后续位图。主动关闭第一张触发原生 InvalidStateError,检查其余位图
width归零并强制下一帧绘制,绿色字幕像素必须恢复。它证明受控异常后的清理,
不声称 Worker 会自然产出损坏位图,也不把它当成 Firefox 默认 offscreen 停顿的
根因或修复。初版测试误读 plugins.add 返回值导致的三项初始化失败单独保留;
修正后旧产物三浏览器都在剩余位图未释放的断言失败,不能混用两轮失败证据。
首轮候选的位图释放三浏览器都通过,但两项字幕恢复失败。原因是测试在仍有待处理
demand 时调用 resize(force),现有实现有意忽略 busy 状态的强制重绘。测试现在暂停
原生video、等待当前需求完成,再调用同一公开resize;没有修改生产时钟,也没有
延长等待。最终main三项异常恢复通过;legacy与正常播放合跑12项通过。旧产物以
最终浏览器测试重新执行,三项仍在位图释放断言失败,证明不是等待变化掩盖缺陷。
最终验证:
- 固定 Node24.21.0 / Yarn1.22.22;严格工具链检查通过。
- 全包201项通过;实际main/legacy的运行时、生命周期、帧回调、offscreen组各69项通过。
- 最终受控旧main16项中12通过4失败;源码修复后的对应测试通过。仅在最后添加测试
if分支的格式花括号,不改变条件或断言;lint最终通过。
- 正常main/legacy/ESM均正常构建,分别与docs副本核对字节;严格包TS通过,核心37份
生成声明无漂移。没有修改消费者声明,未把已有安装验收报告当成此次重新安装。
- main:3项真实位图异常/恢复,以及三核心×三浏览器9项真实WASM字幕播放、seek、
布局、资源销毁;legacy同样12项通过。无重试、无跳过。
- 浏览器为Windows Chromium153.0.8010.12、Firefox155.0、WebKit26.6;明确主线程
asyncRender。原生故障注入仅candidate核心,正常播放另含两个旧核心。不是物理
Apple/Android设备、默认offscreen、持续GPU内存压力、完整组合或远端CI验收。
本次是独立任务,依赖已完成的初始化/生命周期基础。当前Git基线包含09尚未全部
验收的修复检查点;其未关闭的默认模式问题继续由09/05跟踪,不能因10通过而关闭。
第四段vendor补丁保留前三段原指纹与可逆diff,第三方清单记录最新实际源码指纹。
没有更换Worker/WASM/字体、依赖、版本、公开声明或发行入口。
验证结果和具体候选/报告指纹见
[机器记录](../baselines/jassub-render-validation.json)。回退本任务独立提交并正常
重建包可恢复旧行为;不要只改来源清单或只回退一份分发格式。没有push/publish。