mirror of
https://github.com/zhw2590582/ArtPlayer.git
synced 2026-10-23 13:51:20 -08:00
fix(danmuku): [PKG-DANMUKU-MASK-LOAD-01] recover stalled-frame rows and remove relaxed placement backlog
This commit is contained in:
1 parent
475d38043e
commit
314a1c3163
27 files changed
+14045
-195
No files matched your search
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,103 @@
|
||||
# PKG-DANMUKU-MASK-LOAD-01 真实模型负载下的弹幕调度
|
||||
|
||||
状态:本缺陷修复验收完成;完整组合/分发任务仍独立开放。起点
|
||||
475d38043e917b412018c6851d6a7464ef7bda67。范围为弹幕内部调度及组合验证;
|
||||
Mask生产实现、MediaPipe模型/SDK、视频尺寸、负载与等待预算不变。
|
||||
|
||||
## 缺陷与诊断
|
||||
|
||||
原始真实模型矩阵18项12通过6失败,保留在
|
||||
[原始记录](2026-09-14-PKG-DANMUKU-08-combined-load.md)及
|
||||
[原始证据](../baselines/danmuku-combined-load-validation.json)。
|
||||
5项候选120行未完整显示,另1项beta核心负载前行未显示;旧插件也漏显,
|
||||
不能据此声称是重构引入的回归。
|
||||
|
||||
增加只读pending/reserved行快照和显式Chromium CDP CPU诊断入口。
|
||||
单worker原实现诊断仍失败:120行均已采样,仅68行显示,reserved中62行,
|
||||
其中52行尚未显示,确认串行放置积压。CPU采样显示SDK结果转换中的
|
||||
createImageBitmap约5.57秒,二值mask转换约1.01秒,drawImage约0.89秒;
|
||||
自有调度约15毫秒。这是一次采样的自耗时,不是精确分阶段计时或总成本保证。
|
||||
调用栈指向MediaPipe转换image/segmentationMask的原有路径;没有替换SDK私有
|
||||
函数、禁用输出、降低模型/视频尺寸或使用假时钟让负载通过。
|
||||
|
||||
## 结构与兼容边界
|
||||
|
||||
- `placement.ts`从Worker中原样提取轨道计算。Worker保留旧消息协议;
|
||||
scheduler仅在`antiOverlap: false`时直接调用同一计算,消除逐行消息往返。
|
||||
默认防重叠模式和内部postMessage仍使用Worker,没有新增公共选项或依赖。
|
||||
- `sampling-window.ts`拥有连续媒体采样及当前document的visibility监听器。
|
||||
自动调度可补回上次已在wait池、尚未被采样而被连续播放跨过的行。
|
||||
不追加播放刚插入的过期行,不因跨窗口再次调用已采样的false回调。
|
||||
pause/seek/hide/reset等失效、原生seeking、页面隐藏、反向时间和document切换
|
||||
切断追赶窗口;销毁释放监听器及保留引用。
|
||||
- 公开`readys`仍是当前时间±0.1秒查询;公开wait/ready池不被采样模块写入。
|
||||
ready优先级、批次身份保留、beforeVisible串行与取消、可见事件顺序、
|
||||
显示寿命和已有DOM/CSS/类型/分发入口保持不变。
|
||||
|
||||
这是API-04/05/08/11/12边界内的缺陷修复,扩展了PKG-DANMUKU-12只处理
|
||||
异步等待期间采样的能力。连续播放CPU卡顿后可能出现旧版漏掉的行;
|
||||
它不承诺跨暂停、seek或后台时段重放,也不承诺无限吞吐量。
|
||||
架构、维护入口和资源归属同步更新于两个包的ARCHITECTURE.md。
|
||||
|
||||
## 验证记录
|
||||
|
||||
固定Node24.21.0、YarnClassic1.22.22;没有新增依赖。
|
||||
|
||||
- 可控旧红:首批6项4通过2失败,分别复现允许重叠模式Worker积压和CPU跨窗漏显。
|
||||
- 当前弹幕Node套件275/275通过,包含串行回调、生命周期重入、公开readys不变、
|
||||
不重放追加过期行、false回调不额外重试及visibility监听器释放。
|
||||
后续增加document迁移用例:旧窗口不追赶、旧监听器移除、新窗口恢复连续采样,
|
||||
最终source/main/legacy各276/276通过。直接内部用例仍执行源码,集成用例加载
|
||||
指定产物及其实际内嵌Worker,不把所有276项都称为产物执行。
|
||||
- 首次直接`yarn tsc`错误地进入根`.bin/tsc`所指向的TS5.1.6兼容别名,
|
||||
setting-lifecycle闭包收窄产生TS18048。按既有typechecking.md指定的
|
||||
`node node_modules/typescript/bin/tsc -p packages/artplayer-plugin-danmuku/tsconfig.json --noEmit`
|
||||
使用生产编译器TS5.9.3通过。未修改该源文件或放松strict;TS4.3/5.1的
|
||||
消费者兼容与生产源码编译器是不同要求。
|
||||
- 第一轮修复后真实模型矩阵18/18退出0:9候选完整交付、9冻结旧插件行为观察;
|
||||
Chromium/Firefox/WebKit、当前/5.4.0/5.3.1-beta.1核心覆盖。每个候选120行
|
||||
完整显示且回收,模型保持运行。
|
||||
|
||||
最终结果及实际输入指纹见[机器证据](../baselines/danmuku-mask-load-validation.json)。
|
||||
|
||||
| 验证 | 结果与范围 |
|
||||
| --- | --- |
|
||||
| 实际模型源码矩阵 | 18通过,9候选完整交付、9旧插件观察;216.28秒 |
|
||||
| 首次寿命/PiP/时钟回归 | 72通过12失败;12失败全部是候选允许重叠路径零Worker请求与旧测试前提冲突。48项PiP包含32原生播放和16API不可用记录 |
|
||||
| 扩展两种放置路径后的源码寿命/时钟 | 60通过;48寿命含24候选/24旧插件,12时钟含6候选/6旧插件;114.36秒 |
|
||||
| main候选 | 39通过:9模型、24寿命、6时钟;162.43秒 |
|
||||
| legacy候选 | 同范围39通过;160.03秒 |
|
||||
| Node source/main/legacy | 每轮276通过;内部纯函数仍是源码测试,集成测试加载对应产物 |
|
||||
| 类型与实际安装 | TS5.9.3严格源码通过;4项类型/实现赋值/编辑器测试通过;实际隔离包12组消费者通过,保留精确旧声明诊断对照 |
|
||||
| 构建/字节一致性 | 弹幕与Mask三格式构建通过;Mask产物无变化;原轨道函数逐字一致;隔离包79个成员仍匹配当前文件,三份docs/compiled与dist一致 |
|
||||
|
||||
源码/main/legacy的27个候选真实模型负载均显示120个唯一行,最终120行wait、
|
||||
无节点引用、pending/reserved均为空,模型继续输出。原来负载前漏显的beta核心
|
||||
路径同样通过。全部最终浏览器报告零重试、零跳过;API不可用是独立记录。
|
||||
浏览器为Windows Chromium153.0.8010.12、Firefox155.0、WebKit26.6。
|
||||
模型下帧间隔P95仍约79–275毫秒,故这里确认交付完整性,不宣称解决模型帧率
|
||||
或GPU/WASM性能。公开类型、模型输入、负载和原等待预算未改变。
|
||||
|
||||
另一次错误调用把`.mjs`传入只接受CommonJS/UMD的同步VM测试宿主,271项
|
||||
146通过125失败,语法解析报Unexpected token export,插件尚未执行。
|
||||
保留该日志;不通过改写ESM字节伪装原生模块执行。test/README.md已明确入口范围。
|
||||
真实ESM导入由仓库外打包消费验证,完整ESM浏览器分发仍属PKG-DANMUKU-09。
|
||||
|
||||
原始日志、CPU profile和各轮浏览器报告归档在refactor/.cache/danmuku-mask-load-*。
|
||||
首次寿命回归仍假设允许重叠模式必经Worker,该前提已被本修复取消;已保留
|
||||
原失败并扩展两种模式。防重叠候选仍要求一对真实Worker请求/回复、至少1400ms
|
||||
受控延迟及至少900ms显示;允许重叠候选要求零请求/回复和至少900ms显示。
|
||||
旧插件两种模式都仍复现被等待吃掉寿命的缺陷。原寿命断言没有降低。
|
||||
CPU卡顿用例新增候选全部三行按序显示的断言,旧插件CPU漏显继续独立观察。
|
||||
|
||||
## 重跑与回退
|
||||
|
||||
实际模型:`yarn test:browser:source test/browser/danmuku-mask-native.spec.js
|
||||
--grep 'actual model and Danmuku' --workers=2`。main/legacy分别指定存在的
|
||||
ARTPLAYER_DANMUKU_ARTIFACT和ARTPLAYER_MASK_ARTIFACT文件;报告包含实际输入哈希。
|
||||
诊断仅Chromium单worker增加ARTPLAYER_MASK_PROFILE=1;正式验收不打开profile。
|
||||
每轮终止后先归档报告,再运行下一轮,不能混用源与产物证据。
|
||||
|
||||
回退本任务的独立提交会恢复原Worker逐行路径及点采样,并重新暴露记录中的漏显。
|
||||
没有公共类型或数据迁移。完整组合任务08/Mask05、设备、其他包和发布复盘仍独立
|
||||
验收;本修复不授权push、部署或npm发布。
|
||||
+3
-3
@@ -4,7 +4,7 @@
|
||||
|
||||
基线:`40fcda6a37d0049d42e49c1e64e70d4fd9ba5f7f`。总任务 262 项,范围 22 个包及工作区/示例。
|
||||
|
||||
状态:todo 49 / doing 21 / blocked 0 / done 192 / deferred 0。风险 L/M/H 表示兼容风险,不表示工期。
|
||||
状态:todo 48 / doing 21 / blocked 0 / done 193 / deferred 0。风险 L/M/H 表示兼容风险,不表示工期。
|
||||
|
||||
前置依赖是启动条件;验收是完成条件。任务可以继续拆分,但不能复用或悄悄删除旧 ID。
|
||||
|
||||
@@ -467,7 +467,7 @@
|
||||
|
||||
| ID | 范围 / 步骤 | 前置依赖 | 交付物 | 验收条件 | 风险 | 状态 |
|
||||
| --- | --- | --- | --- | --- | --- | --- |
|
||||
| PKG-DANMUKU-MASK-LOAD-01 | artplayer-plugin-danmuku, artplayer-plugin-danmuku-mask<br>修复真实Mask组合下的弹幕未采样与放置积压 | PKG-DANMUKU-12, PKG-MASK-04, CORE-22 | 分阶段性能/采样诊断、兼容实现修复及新旧核心/产物回归 | 关闭真实模型组合5项密集负载失败和1项负载前漏显,保持回调顺序、显示寿命与生命周期取消;不能以降低负载或关闭模型制造通过 | H | todo |
|
||||
| PKG-DANMUKU-MASK-LOAD-01 | artplayer-plugin-danmuku, artplayer-plugin-danmuku-mask<br>修复真实Mask组合下的弹幕未采样与放置积压 | PKG-DANMUKU-12, PKG-MASK-04, CORE-22 | 分阶段性能/采样诊断、兼容实现修复及新旧核心/产物回归 | 关闭真实模型组合5项密集负载失败和1项负载前漏显,保持回调顺序、显示寿命与生命周期取消;不能以降低负载或关闭模型制造通过 | H | done |
|
||||
|
||||
## 完成证据与阻塞
|
||||
|
||||
@@ -684,4 +684,4 @@
|
||||
- CI-BROWSER-01: [记录](changes/2026-09-14-CI-BROWSER-01-scopes.md) [记录](baselines/browser-scope-validation.json)
|
||||
- PKG-CHAPTER-HOVER-01: [记录](changes/2026-09-14-PKG-CHAPTER-HOVER-01-geometry.md) [记录](baselines/chapter-hover-validation.json)
|
||||
- PKG-CANVAS-SUBTITLE-01: [记录](changes/2026-09-14-PKG-CANVAS-SUBTITLE-01-track.md) [记录](baselines/canvas-subtitles-validation.json)
|
||||
- PKG-DANMUKU-MASK-LOAD-01: [记录](changes/2026-09-14-PKG-DANMUKU-08-combined-load.md) [记录](baselines/danmuku-combined-load-validation.json)
|
||||
- PKG-DANMUKU-MASK-LOAD-01: [记录](changes/2026-09-14-PKG-DANMUKU-08-combined-load.md) [记录](baselines/danmuku-combined-load-validation.json) [记录](changes/2026-09-14-PKG-DANMUKU-MASK-LOAD-01-scheduling.md) [记录](baselines/danmuku-mask-load-validation.json)
|
||||
@@ -1,5 +1,29 @@
|
||||
# 进度与证据
|
||||
|
||||
## PKG-DANMUKU-MASK-LOAD-01 真实模型负载漏显与积压修复
|
||||
|
||||
连续播放采样补回主线程卡顿跨过的既有wait行,公开readys窗口不变;允许重叠
|
||||
模式直接使用原轨道计算,默认防重叠仍走Worker。采样/纯几何/消息协议拆分,
|
||||
保留串行回调、取消、显示寿命;document迁移及destroy释放visibility监听器。
|
||||
没有更换Mask模型/SDK、缩小视频、降低20条每秒负载或扩大原等待预算。
|
||||
|
||||
模型源码18通过(9候选完整/9旧观察),main/legacy各39通过(9模型、24寿命、
|
||||
6时钟):27个候选模型用例均120行唯一显示/回收,pending/reserved为空。
|
||||
寿命测试补齐防重叠/允许重叠两条路径,源码60通过;原生PiP矩阵48项中的
|
||||
32原生播放与16API不可用保持区分。第一次寿命12失败来自旧测试强制Worker
|
||||
假设,完整报告保留;扩展用例继续验证实际延迟路径,没有降低寿命要求。
|
||||
|
||||
Node source/main/legacy各276通过,严格TS5.9.3、4项类型/编辑器测试、实际
|
||||
隔离安装12组通过。误用TS5.1.6别名及把ESM交给同步VM的失败单独记录,
|
||||
不归为产品缺陷或ESM行为通过。构建及79个最终打包成员一致性已核验。
|
||||
见[变更](changes/2026-09-14-PKG-DANMUKU-MASK-LOAD-01-scheduling.md)及
|
||||
[证据](baselines/danmuku-mask-load-validation.json)。模型帧间隔仍高,未宣称帧率提升。
|
||||
|
||||
本缺陷任务及风险关闭;262项:193 done、21 doing、48 todo。弹幕08/09、
|
||||
Mask05/06及其他包/设备/远端CI/发布复盘继续开放;ESM完整浏览器分发仍属09。
|
||||
本项按独立本地提交交付并核验审计,未push/发布。下一步继续包组合与分发收尾。
|
||||
|
||||
|
||||
## PKG-DANMUKU-08 旧插件组合与真实负载:新增必须修复项
|
||||
|
||||
扩展PiP/Mask测试加载校验后的npm弹幕5.3.0及候选源码。普通PiP矩阵36项退出0:
|
||||
|
||||
@@ -275,4 +275,4 @@
|
||||
| CANVAS-SUBTITLE-01 | resolved / 已复现 | Canvas底层video缺初始字幕轨道且普通Canvas挂载不能加载原生字幕 | PKG-CANVAS-SUBTITLE-01, PKG-CANVAS-05 |
|
||||
| DPIP-INSTALLED-PROVENANCE-01 | resolved / 已复现 | Document PiP测试加载器忽略显式安装map并回退到源码 | PKG-CANVAS-05, CI-01 |
|
||||
| DASH-MENU-01 | resolved / 已复现 | SDK 5.2.1 播放中设置质量选项在点击时变为不可见 | PKG-DASH-MENU-01, PKG-DASH-05, REVIEW-02 |
|
||||
| DANMUKU-MASK-LOAD-01 | open / 已复现 | 真实Mask模型运行时弹幕存在未采样窗口及串行放置积压 | PKG-DANMUKU-MASK-LOAD-01, PKG-DANMUKU-08, PKG-MASK-05 |
|
||||
| DANMUKU-MASK-LOAD-01 | resolved / 已复现 | 真实Mask模型运行时弹幕存在未采样窗口及串行放置积压 | PKG-DANMUKU-MASK-LOAD-01, PKG-DANMUKU-08, PKG-MASK-05 |
|
||||
+11
-2
@@ -6299,7 +6299,7 @@
|
||||
"id": "DANMUKU-MASK-LOAD-01",
|
||||
"title": "真实Mask模型运行时弹幕存在未采样窗口及串行放置积压",
|
||||
"confirmation": "reproduced",
|
||||
"status": "open",
|
||||
"status": "resolved",
|
||||
"owners": [
|
||||
"PKG-DANMUKU-MASK-LOAD-01",
|
||||
"PKG-DANMUKU-08",
|
||||
@@ -6313,7 +6313,16 @@
|
||||
],
|
||||
"compatibleResolution": "分析真实模型/绘制/Worker往返成本和未采样、待放置行,保持公共readys与回调顺序、显示寿命及生命周期取消;用独立回归验证兼容修复。",
|
||||
"closureCriteria": "原始失败保留并有可解释修复;真实模型下120行完整交付、无活动引用积压,新旧核心和main/legacy以及暂停/seek/hide/destroy回归通过;不降低负载、停模型或扩大等待伪造结果。",
|
||||
"workspaceState": "源码18项12通过6失败:5项候选密集负载不完整,1项Chromium beta核心负载前行未显示。旧插件同环境也漏显,尚未证明是重构回归或定位单一瓶颈。Firefox候选和原生PiP负载通过。"
|
||||
"workspaceState": "连续播放采样窗口补回CPU跨窗行;允许重叠放置直接复用原轨道函数,防重叠和内部消息API仍使用Worker。真实模型源码18、main39、legacy39通过;其中27个候选模型负载全部120行完整交付/回收,pending/reserved为空。",
|
||||
"resolutionEvidence": [
|
||||
"refactor/changes/2026-09-14-PKG-DANMUKU-MASK-LOAD-01-scheduling.md",
|
||||
"refactor/baselines/danmuku-mask-load-validation.json",
|
||||
"test/danmuku-scheduler.test.js",
|
||||
"test/browser/danmuku-mask-native.spec.js",
|
||||
"test/browser/danmuku-lifetime.spec.js",
|
||||
"test/browser/danmuku-timing-diagnostic.spec.js"
|
||||
],
|
||||
"resolutionRationale": "原5项负载漏显和1项负载前行失败保留;实际模型/SDK/视频和20条每秒输入、等待预算不变。源与两产物共27项模型负载完整交付;两种放置路径寿命、CPU/异步间隙、新旧核心及取消/文档迁移回归通过。Node source/main/legacy各276通过,源码类型、编辑器/消费者及隔离包12组通过。首次旧Worker假设失败和错误ESM宿主调用单独记录;不冒充ESM完整浏览器验收、帧率提升或全部包发布通过。"
|
||||
}
|
||||
]
|
||||
}
|
||||
+4
-2
@@ -5483,13 +5483,15 @@
|
||||
"PKG-MASK-04",
|
||||
"CORE-22"
|
||||
],
|
||||
"status": "todo",
|
||||
"status": "done",
|
||||
"risk": "H",
|
||||
"deliverable": "分阶段性能/采样诊断、兼容实现修复及新旧核心/产物回归",
|
||||
"acceptance": "关闭真实模型组合5项密集负载失败和1项负载前漏显,保持回调顺序、显示寿命与生命周期取消;不能以降低负载或关闭模型制造通过",
|
||||
"evidence": [
|
||||
"changes/2026-09-14-PKG-DANMUKU-08-combined-load.md",
|
||||
"baselines/danmuku-combined-load-validation.json"
|
||||
"baselines/danmuku-combined-load-validation.json",
|
||||
"changes/2026-09-14-PKG-DANMUKU-MASK-LOAD-01-scheduling.md",
|
||||
"baselines/danmuku-mask-load-validation.json"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
||||
Reference in new issue
Block a user