Files
ArtPlayer/refactor/danmuku-stability.md
T

71 lines
5.0 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-DANMUKU-07 稳定性工作记录
本任务已在12后的运行时完成下述限定范围验收,任务与提交状态以tasks.json及Git为准。
06类型检查、11/12修复与本任务证据分别维护;真实模型、完整组合和发布验收仍待后续任务。
## 已执行的时间窗口诊断
`test/browser/danmuku-timing-diagnostic.spec.js`在候选核心中比较实际npm5.3.0插件与
06候选源码,使用本地90秒视频的短片段、原生RAF/媒体时钟和真实Worker。独立RAF
观察与实际readys getter采样分别记录;getter只包装读取,不修改返回数组或状态。
每例3条弹幕,后置sentinel证明间隔后仍能正常发送。12项诊断通过意味着取证完成,
不代表漏掉弹幕的结果可以作为稳定性通过。
| 场景 | Chromium | Firefox | Windows WebKit | 新旧共同结果 |
| --- | --- | --- | --- | --- |
| 注入800ms主线程工作 | 最大媒体帧间隔约800ms | 约777–809ms | 约838–856ms | 前两条未进入任何readys采样,sentinel显示 |
| beforeVisible等待600ms | 原生帧间隔约19–21ms,采样间隔616–618ms | 帧44ms,采样583–609ms | 帧63–64ms,采样622–647ms | 第一条与sentinel显示,中间条未采样 |
这解释了两种不同来源:前者浏览器主线程无法及时调度,后者浏览器仍在出帧,但
插件等待当前异步准备完成而不再读取新的候选窗口。±0.1秒和串行回调都有明确
历史语义;后续方案必须比较seek、hide/show、stop/start和false重试边界,不能
直接改成无限追赶或并行回调。当前不据此声称全部真实负载问题已解决。
报告位于refactor/.cache/danmuku07-timing-diagnostic.json,日志及附件保留同名前缀。
候选是11计时修复之前的06源码,具体构建SHA在每项danmuku-timing-observation中;
后续变更需说明哪些观察仍适用,不把旧报告冒充新提交的验证。
## 当前下一步
以下为本轮执行入口的历史清单,现已通过最终66项原生用例落实本任务范围。
下一实施阶段为08组合或其他已就绪包任务;09分发和真实Mask模型/设备仍不能据此关闭。
1. 11计时修复和12采样修复已分别提交并核验;当前HEAD为
`4f559cb31d6b69a37439c6db2d32ca28ae5c78f3`,恢复本任务。
12源码/main/legacy各102项浏览器通过,慢回调中间行已恢复;CPU完全阻塞
的未采样窗口仍保留。见[12证据](baselines/danmuku-frame-sampling-validation.json)。
2. 对实际持续播放记录scheduled、readys、callback、placed、visible、recycled及
原生RAF/媒体间隔,区分false、拒绝、轨道满、取消和错过采样。
3. 比较正常密度、密集队列和连续生命周期后的节点池、Worker、监听器与计时器。
已有受控三小时快进只证明离散状态,不是真实三小时播放或内存测量。
4. 根据证据决定是否需要兼容内部修复,并为每个独立修复保留任务和commit。
5. 明确Mask可依赖的当前队列/DOM/事件边界,再交付07验收与后续08组合矩阵。
不增加任意弹幕上限,不通过修改媒体时钟、预置ready或放宽断言伪造负载通过。
## 本轮新增的持续播放与边界取证
`test/browser/danmuku-stability.spec.js` 使用候选核心、实际npm5.3.0/候选插件、
原生视频/RAF/Worker,每秒2或20条,各三轮14秒实际媒体推进。每轮追加12秒
的时间戳序列,余下时间用于自然显示和回收;逐条记录采样/显示/回收,同时记录
状态池、节点/空闲池、真实帧和可选未强制GC的堆内存读数。不是三小时耐久测试,
也不把不同浏览器的performance.memory当作可比的泄漏证明。
首轮Chromium两个用例因测试误把`load(rows)`当作替换,在第二轮队列断言失败:
收到48/480,错误预期24/240。核对运行实现后按既有追加契约修正为累计队列数,
当轮显示数量仍严格断言24/240;没有改变生产API。失败报告与trace保留在
`refactor/.cache/danmuku07-stability-first.json`及同前缀results中。
Mask静态审查已确认其直接依赖只有核心video/root层/ready/destroy,未读取弹幕
队列或Owner。已纠正旧契约对根层创建归属的错误描述;核心模板及节点绑定为依据。
后续CSS mask边界测试明确不加载真实模型,不代替Mask03/05的候选生命周期与组合验收。
最终补强了非空Worker、实际节点复用、每条状态归属和跨轮显示/回收恰好一次检查。
12负载、6共享mask层、48资源测试共66项在三引擎全部通过,0重试/跳过。
见[变更记录](changes/2026-09-13-PKG-DANMUKU-07-stability.md)和
[机器证据](baselines/danmuku-stability-validation.json)。
本次候选每秒2条用例三轮72条只分配3个节点、实际复用69次;每秒20条三轮720条
分配21–22个节点、复用698–699次。旧版对应分配6及24–25个节点。两者该正常
同步回调负载下都完整显示;差异是本次原生样本观察,不是通用吞吐或长期内存承诺。