Skip to content

[CRITICAL][perf] 拖动/暂停 scrub 触发逐帧 ffmpeg+wgpu 合成,可致整机卡死 #92

Description

@appergb

现象

暂停后拖动播放头/scrub 时极卡,严重时整台电脑卡死(疑似 ffmpeg 子进程风暴或 wgpu 驱动挂起)。

根因(疑似)

暂停态预览靠 composite_frame:每帧 = 一次 ffmpeg 解码 + wgpu 合成 + PNG 编码 + base64 传输 + 主线程 <img> 解码。scrub 时播放头逐帧变化 → 逐帧触发 composite → 大量 ffmpeg 子进程 / GPU 工作堆积 → 卡死。

位置

  • web/src/components/preview/useTimelineFrame.ts(拉取/节流/coalesce)
  • web/src/components/preview/Preview.tsx(何时启用 composite)
  • src-tauri/src/render.rscomposite_frame 命令、crates/opentake-rendercrates/opentake-media/src/decode/frame.rs(Rust 侧 ffmpeg+wgpu)

已做缓解(本 PR)

  • composite 拉取改为停稳 ~140ms 后才取Preview.tsx useDebounced),scrub 全程不再逐帧合成。
  • 暂停态合成帧改稳健等比盒(修复"跑到角落/很小")。
  • 仍需真机验证是否彻底消除卡死(本机 computer-use 被 Dock 拦截,无法真机复现)。

彻底修复方向

  • 实现真实播放/scrub 引擎(连续解码 + wgpu 上屏 + 精确 seek + 预览降档),见 Realtime-playback issue(1:1 蓝图 P1-10、工程量最大)。
  • 短期可:composite 并发限 1(已 inFlight);scrub 仅松手取一帧;降低 composite 分辨率(maxSize);排查 wgpu 是否每次新建上下文/泄漏纹理。

cc @appergb

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions