Skip to content

perf(replay): 回放流式读取;mcef-nova 升级到 1.0.2 并移植 dev 上的修复 - #9

Merged
gaoyu06 merged 4 commits into
masterfrom
perf/replay-streaming-mcef
Oct 17, 2026
Merged

gaoyu06 merged 4 commits into
masterfrom
perf/replay-streaming-mcef

Conversation

@gaoyu06

@gaoyu06 gaoyu06 commented Oct 17, 2026

Copy link
Copy Markdown
Member

回放

  • 新录像使用格式 2:分块压缩,块头带时间范围和 CRC。崩溃时只丢最后一块,损坏的块按文件结尾处理。
  • 旧格式 1 照常播放,不转换,也不改动原文件。
  • 索引在后台线程建立;只预读一个有界窗口(堆的 1/32,8–64MB),长录像不再整段读进内存。
  • 打开和跳转都分片进行,不卡渲染线程,界面显示加载进度。往回跳仍要从头重建世界,要彻底解决需要录制时写关键帧,这次没做。
  • 注意:新录像旧版客户端读不了。

mcef

  • 升级到 mcef-nova v1.0.2(已发布)。
  • 从 dev 分支移植三处修复:26.2 BrowserOwnedTexture 的 dst.clear();1.21.5–1.21.11 GlTexture 构造器参数顺序(已用字节码核对);26.2 零拷贝 AcceleratedBrowserTexture。
  • 说明:目前 Nova 里没有任何产品功能在使用 CEF,是否移除建议单独讨论。

验证

  • 六个版本编译通过,每个版本 85 个测试,0 失败。
  • 1.21.11 runClient 能进主菜单,没有新的 mcef 错误。
  • 没有进入世界实际播放回放。

- 新录像写成格式 2:未压缩文件头 + 按块 zlib 压缩,块头记录时间范围、记录数、
  长度和 CRC;flush 即封块,崩溃只丢最后一次 flush 之后的内容,损坏块读作结尾
- 旧格式 1(整文件 gzip)照常读取,按文件头魔数自动识别,不转换、不改原文件
- NovaReplayFile.scanIndex:格式 2 只读块头跳过正文,格式 1 后台整段扫描;
  回放打开后在后台线程建索引得到时长
- ReplayStream:独立线程预读,内存只保留播放头前方有界窗口(堆的 1/32,8–64MB),
  录像多长都一样
- ReplayCursor:跳转只改目标,每 tick 按墙钟 60% 的预算分片应用记录;往回跳仍需
  从 0 重建世界(包流无法倒放),但改为分片进行;时钟在追赶期间暂停
- ReplayPlayback:打开只读文件头;重建期间原版载入界面结束后恢复先前界面;
  覆盖层和回放界面显示"加载中 N%";去掉"录像过大只载入前 N 分钟"的截断
- 导演工作台:追赶期间不推进输出时钟,导出等世界追上后再截帧;索引到达后
  自动补全工程时长
- 单测:读写往返、损坏块、索引、旧格式读取与跳转、正反向跳转定位、
  零预算逐条推进、190MB 合成录像下预读峰值不超过窗口
- 依赖与 bundledRuntime 改为 1.0.2;vendor/maven 换成本地构建的 1.0.2
  (mcef-nova release/1.0.2 @ f0c9055),移除 1.0.1 副本
- GitHub Packages 上目前只有 1.0.2-SNAPSHOT,CI 注释里留 TODO,待正式发布后
  填 tag 并替换 vendor 副本
- BrowserOwnedTexture(26.2):每帧上传前 dst.clear()。上一帧把 limit 缩到当帧
  大小,窗口先缩后放时绝对 put 越界,网页永久黑屏
- AcceleratedBrowserTexture(1.21.5–1.21.11):GlTexture 反射构造参数顺序改为
  usage 在第 1 位、glId 在第 8 位(已用 1.21.8/1.21.11 字节码核对:参数 1 写入
  GpuTexture.usage,参数 8 写入 GlTexture.id)
- AcceleratedBrowserTexture(26.2):从桩实现换成零拷贝实现,把 mcef 导入的纹理
  用 glCopyImageSubData 拷进设备纹理并以 GL swizzle 处理 BGRA;ClientBrowser 26.2
  分支在加速时绘制它,失败回落 CPU 路径(已核对 26.2 GlTexture/GpuDevice 布局)
- Client.configureHost:开启硬件加速且平台支持时设置 mcef.pumpOnRenderThread,
  mcef 1.0.2 只在渲染线程泵模式下启用共享纹理
@gaoyu06
gaoyu06 merged commit c072c1f into master Oct 17, 2026
8 checks passed
@gaoyu06
gaoyu06 deleted the perf/replay-streaming-mcef branch October 24, 2026 13:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant