Files
ArtPlayer/refactor/changes/2026-09-14-PKG-DANMUKU-08-fullscreen-lifetimes.md
T

5.5 KiB
Raw Blame History

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 文件完全一致。

完整快照见 全屏证据和 旧核心负载证据。本轮候选普通 负载三轮完整显示/回收 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、部署或发布。