mirror of
https://github.com/zhw2590582/ArtPlayer.git
synced 2026-10-28 10:31:20 -08:00
85 lines
6.9 KiB
Markdown
85 lines
6.9 KiB
Markdown
# PKG-DANMUKU-04 时钟、队列与轨道调度
|
|
|
|
弹幕调度现在只有一个待执行RAF或异步准备帧。新增`src/scheduler.js`负责运行归属、
|
|
取消、失败和恢复,`src/queue.js`负责状态池与候选顺序,`src/worker-client.js`负责
|
|
请求关联和Worker收尾。`danmuku.js`保留公共行为出口;原`worker.js`轨道算法逐字未改。
|
|
本步仍是JS职责拆分,完整TS和最新npm根声明/准确`/runtime`归06。
|
|
|
|
## 行为与兼容边界
|
|
|
|
- 原生play/playing可以重复进入start,仍保留旧start事件;内部只能有一条运行链。
|
|
队列先ready后wait,保留当前媒体时间前后0.1秒窗口、状态池顺序和原轨道几何。
|
|
- 暂停、reset、替换输入成功提交、hide、seeking、destroy以及更换beforeVisible
|
|
使旧准备工作失效。取消与用户Promise竞速,新工作不必等待旧回调结束。
|
|
每次await及用户回调后检查归属;回收前检查节点身份,避免旧续体回收新节点。
|
|
- hide、seeking和回调更新保留已显示/暂停节点;seek不额外发reset。Date.now寿命
|
|
排除暂停时间;同步倍率仍只在新弹幕分配时取值,不顺便改写现有弹幕剩余寿命。
|
|
- beforeVisible拒绝沿现有error出口发原错一次,本轮跳过该项并继续其他项;false
|
|
仍可下一帧重试。显式start/reset或其他失效动作允许仍符合时间条件的失败项重试。
|
|
错误监听器自身抛错有局部观察,不产生脱离调用链的未处理RAF拒绝。
|
|
- Worker共享回复监听在post前安装,ID在请求及Worker替换之间递增,避免同毫秒串线。
|
|
反序、同步、重复、未知和迟到回复不会完成其他请求。取消的内部请求解析为
|
|
`{ id, result: undefined }`;故障以原错拒绝待处理请求,独立尝试解绑及terminate。
|
|
- Worker故障停止内部调度但不伪造公共stop。后续start/reset可重建;重复失败等待
|
|
下次显式恢复。错误监听器可能同步destroy/stop/reset/hide或嵌套start,因此恢复
|
|
后再次检查生命周期、generation和启动序号,过期start不能继续或发迟到start事件。
|
|
- 门面方法、getter、同步/异步返回及内部实例身份保持。配置回调保持当前option为this。
|
|
合法的NaN时间保持旧currentTime+0.5;零保持03明确修正后的0,正无穷保持原值,
|
|
负无穷仍钳位0,不扩大原验证器对null等输入的接受范围。
|
|
|
|
## 发现的问题先修复,再保留证据
|
|
|
|
最初18项调度测试为6通过12失败;03实际main在两核心的8个Chromium场景为4通过4失败,
|
|
具体包括六条弹幕产生七个请求、同ID及空visible快照、节点复用时留下额外隐藏节点。
|
|
这个03快照本身未重叠,02另有真实重叠记录;没有把不同运行的现象拼成同一次失败。
|
|
|
|
第一轮候选48项原生矩阵通过后,只读代理发现恢复错误监听器销毁播放器仍继续start。
|
|
补齐destroy/stop/reset/hide/嵌套start五个回归,保存的修复前真实main在32项中27绿5红,
|
|
加入恢复所有权检查后全部转绿。随后复审发现03的`time !== undefined`在修正零时
|
|
误改合法NaN:历史源码/main/legacy均沿旧默认时间,候选24项23绿1红。保留零的显式
|
|
判断并恢复NaN默认路径,增加历史对照和真实浏览器可见性断言;03旧报告保持原样。
|
|
|
|
这些修复作为本步变更记录,新增已解决风险INPUT-02;没有把中间版本的通过当作最终
|
|
验收。父代理负责复审、构建、浏览器和整合,子代理分别承担调度实现、确定性测试及
|
|
独立风险复核,同一文件分工不重叠,Git由父代理统一提交。
|
|
|
|
## 最终验证
|
|
|
|
- 源码、正式main、正式legacy各104项联合通过。每组中83项随候选实现变化,18项
|
|
直接验证内部Worker客户端/原轨道源码,3项固定历史数值对照。不能把后21项重复
|
|
宣称为不同产物的额外覆盖。组成:输入24、解析26、调度33、Worker客户端21。
|
|
- 确定性时钟覆盖三小时媒体范围、180批共720条、15次120秒暂停及暂停中seek,
|
|
执行真实Worker算法,检查每条一次请求、发射顺序、唯一状态池及4节点全程复用。
|
|
这是采样生命周期的模拟时钟测试,不是实际三小时播放或帧率/内存基准。
|
|
- 三种实现各66项原生浏览器通过,共198项:实际已发布核心5.4.0及候选5.4.1,
|
|
Chromium/Firefox/Windows WebKit。包括三模式、严格轨道几何、播放/暂停/跳转/倍率、
|
|
节点复用、四种pending取消、恢复重入、NaN、实际设置/发送/mount和双实例。
|
|
- main和legacy额外各30次密集场景重复,共60次,无跳过、失败或重试后通过。
|
|
每次六条固定弹幕都断言几何不交叠、顺序、六个唯一请求、visible快照长度0至5、
|
|
回复关联及六节点;复用场景另断言同一可见节点且额外节点数组为空。
|
|
- 普通场景要求零页面错误、零Worker错误;恢复场景显式派发受控ErrorEvent并让
|
|
createWorker抛错,仅允许精确已知故障。实际视频/DOM/Blob Worker继续使用原生实现,
|
|
但不能把注入故障描述成真实CSP或平台Worker构造失败。Windows WebKit不是Safari设备。
|
|
- 仓库正常build生成三格式及docs/compiled,逐一核对字节;修改源码/测试/脚本入口lint
|
|
通过。04未改生产TS或公开声明,引用03全仓366生产TS和消费者检查,未声称04新跑TS。
|
|
|
|
构建曾在浏览器运行期间遇Windows UNKNOWN复制错误;停止并行构建后正常串行重建成功,
|
|
核对main/legacy与当时已测试文件哈希一致。NaN修复后再次完整构建并运行上述最终矩阵。
|
|
故障日志、串行重试、字节一致性证明及最终结果均保留。新增所有权逻辑使产物变大,
|
|
机器证据记录相对03的原始/gzip字节,不能声称本步缩包或性能改善。
|
|
|
|
证据及输入指纹见[机器报告](../baselines/danmuku-scheduler-validation.json)。原始截图和
|
|
附件归档独立目录,报告记录原results路径到归档路径的映射,不手改原Playwright报告。
|
|
未新增依赖或修改Yarn锁;`test:unit`和`test:danmuku`加入调度/Worker客户端测试,新增
|
|
原生spec沿既有浏览器CI发现。中间48/60项矩阵保存为过程证据,最终引用numeric-final。
|
|
|
|
## 风险关闭与下一步
|
|
|
|
ASYNC-01由03输入/解析及04可见性/Worker归属共同满足关闭标准;TRACK-01关闭范围仅为
|
|
已复现的重复运行链和请求串线,以及对应严格几何/节点重复回归。它们不代表任意负载、
|
|
任意轨道算法或包级资源稳定性已经验收。CLEANUP-01保持开放:Setting外部DOM、发送
|
|
续体和锁定计时器仍需05处理;heatmap零采样同样未修。05继续DOM渲染/设置/热力图,
|
|
06完整TS与声明,07真实长负载。完整npm安装、发布前多轮复盘仍待各自任务。
|
|
|
|
本任务完成后独立本地commit,无推送、标签或npm发布。
|