test(danmuku): [PKG-DANMUKU-08] verify fullscreen lifetimes and old-core loads

This commit is contained in:
Harvey Zhao committed 2026-09-14 21:13:03 +08:00
1 parent b54a890832
commit 30363a5346
10 files changed
+15385 -170

No files matched your search

@@ -0,0 +1,79 @@
# PKG-DANMUKU-08 全屏生命周期与旧核心负载检查点
状态:仍 doing。起点 b54a890832ccfec82715129c319befa5d26ef942;本批只补充实际
浏览器验证和维护文档,没有修改生产运行时、声明、依赖或分发文件。
## 覆盖与测试设计
新增 `test/browser/danmuku-fullscreen.spec.js`:冻结 npm 核心 5.4.0/当前源码核心,
冻结 npm 弹幕 5.3.0/当前源码插件,CSS 网页全屏/真实 document 全屏,三个引擎。
每项连续创建三个独立播放器;每个播放器使用真实视频与原生 Worker,按媒体时间
加载可见弹幕,检查全屏图层宽度、设置/热力图单例、退出后的宽度恢复,以及销毁后
Worker 恰好终止一次、DOM 无残留。候选还检查 scheduler.frame/operation 清空。
文件/包哈希和每轮快照写入附件;不能把三个生命周期称作三小时耐久测试。
45 秒单项上限为新增三轮播放/全屏操作预留,没有增大旧用例的超时,也没有重试、
强制点击、伪造媒体事件、替换全屏 API 或跳过某个浏览器。兼容覆盖 API-04/05/07/08。
`danmuku-stability.spec.js` 的原有三轮 14 秒、每秒 2/20 条负载现在增加核心版本轴,
附件增加 core 字段,原候选逐条采样/显示/回收、状态池、节点复用和 Worker 断言不变。
本轮只运行新增旧核心子集;既有候选核心证据仍标明其实际运行日期与源码哈希。
## 首轮失败与修正依据
1. Chromium 首轮 3 通过、5 失败:旧插件保留同名隐藏测量节点,纯文本定位违反
唯一性;改为精确文本与可见节点交集,仍要求实际可见。旧核心销毁后留下的全屏
监听器通过测试的 window 全局数组写入下一实例记录;改为实例局部数组,并保留
每个旧实例后续收到的事件。BASE-LIFE-18 已在 CORE-16 复现和修复;冻结旧核心的
三个实例分别观察三轮/两轮/一轮事件,新核心的每个实例只能收到自己的一轮。
2. 三引擎首轮 20 通过、4 失败:WebKit 原生退出时 fullscreenElement 和布局先恢复,
change 事件稍后投递;测试提前 destroy 抑制了候选的后续通知。现在在销毁之前
使用原有 7 秒 expect 上限等待真实 [true,false] 事件序列,并继续精确断言次数。
这不是在缺少事件时跳过检查,也不是对生产代码增加延时。
两份失败报告、trace 和错误断言均保留。后续报告不覆盖它们,见机器证据中的路径及哈希。
## 已验证结果
固定 Node 24.21.0、Yarn 1.22.22;Windows Chromium 153.0.8010.12、Firefox 155.0、
WebKit 26.6。以下原生全屏均实际进入 document 全屏,未按 API 不可用计作通过。
| 输入与范围 | 实际结果 |
| --- | --- |
| 全屏源码,新旧核心/新旧插件/两个模式/三引擎 | 24 通过,87.07 秒 Yarn 总耗时 |
| 全屏 main,新旧核心/候选插件/两个模式/三引擎 | 12 通过,47.09 秒 |
| 全屏 legacy,同上 | 12 通过,47.13 秒 |
| 旧核心,旧/新插件,每秒 2/20 条,三引擎 | 12 通过,278.37 秒 |
| 两个测试文件的只读 ESLint | 通过 |
源码 72 次、main/legacy 各 36 次播放器生命周期;每个格式重新创建样本,不能
把累计次数当作一个播放器的长期稳定性证明。main/legacy 使用实际工作区分发字节,
不是仓库外安装验证;证据脚本核对加载 SHA 与对应 dist 文件完全一致。
完整快照见 [全屏证据](../baselines/danmuku-fullscreen-validation.json)和
[旧核心负载证据](../baselines/danmuku-old-core-load-validation.json)。本轮候选普通
负载三轮完整显示/回收 72 条,分配 3 节点、复用 69 次;密集负载完整处理 720 条,
分配 21–22 节点、复用 698–699 次。全部 Worker 正常终止,销毁后播放器根节点为零。
对照07的候选核心报告,先核验原报告哈希以及新旧报告加载的插件字节完全一致。
候选插件的 RAF 帧间隔 P95:Chromium 本轮 16.7/16.8ms,原报告 16.7/16.7ms;
Firefox 两档均约16.68ms;WebKit 本轮61/79ms,原报告61/80ms。WebKit在这台
Windows测试环境中本来就没有60fps,旧插件本轮62/79ms;不能把该差异隐去或声称
所有引擎流畅60fps。原始周期级帧间隔也保留,跨周期总体统计明确包含暂停间隙。
这些是不同时间运行的有限样本,没有随机化/同时运行对照,不能宣称因果性能提升。
也未用未强制GC的heap读数证明不存在泄漏。
## 重跑与后续
- 源码:`yarn test:browser:source test/browser/danmuku-fullscreen.spec.js --workers=2`。
- main/legacy:显式设置 `ARTPLAYER_DANMUKU_ARTIFACT`,同一入口加
`--grep 'candidate Danmuku'`。依次运行并在每次前归档前一报告。
- 旧核心负载:`yarn test:browser:source test/browser/danmuku-stability.spec.js
--grep 'published core /' --workers=2`。Playwright 匹配含项目和文件名的完整标题,
不使用 `^published core`;本轮第一次错误选择导致的 No tests found 已独立保留,
不能计作任何测试通过。
08 的完整旧插件组合与 Mask/PiP 组合负载仍待继续;09 承担最终仓库外安装、示例、
分发与声明收口。设备和远端 CI 也没有被本批桌面结果替代。不标任务完成或 npm 可发布。
回退本批提交即可撤销测试/文档覆盖,生产运行时无需回退。独立本地检查点提交后运行
提交审计,再继续下一批;没有 push、部署或发布。