Skip to content

帧率优化

性能优化始终遵循一条顺序:先有完全正确的全量参考,再减少真正不变的工作。每次优化都用多帧逐像素测试证明输出没有退化。

30 FPS TARGET

M15 / v6 正式

29.8 FPS

像素 diff、语义脏区、clipped render 与双画布协作,空闲稳定 29.6–29.8 FPS。

瓶颈拆分

帧耗时不是一个数字,而是:

text
logic + render + compare/diff + present/flush + scheduler overhead

最初全量 466×466 重绘和提交正确但慢。只减少总线提交仍不够,因为每帧扫描 217,156 像素也消耗 PSRAM 带宽;只做语义脏区比较仍不够,因为场景绘制本身约 21.6 ms。最终需要同时减少绘制、比较和提交。

优化阶段

1. 像素 diff

比较前后画布,只提交变化像素。present 降到约 6.9 ms,但全屏扫描和全场景 render 仍限制在约 26.8 FPS。

2. 语义脏区

根据已知对象直接标记核心、helper、轨道、数字和底部控制区。购买、设置或页面切换才全帧,稳定帧不再扫描所有像素。

3. Clipped render

把裁剪下沉到 framebuffer 绘制:只重画会动的矩形。静态文字和大区域按状态指纹或低频更新;动态中心仍按 presentation rate。

4. Swept bounds

动效、粒子、浮字与倾斜对象使用旧/新包围盒并集,解决尾迹。8 个场景 × 30 帧的增量输出逐像素等同全量参考。

5. authored phase 分频

不是每个动画都需要 30 次换帧:helper 本来只有 6/8 FPS authored 帧,静态文字更低频。主循环仍以 30 FPS 响应触摸和粒子,宽区域按素材真实相位更新。

6. 调度校准

LVGL 的 33 ms 请求叠加协作调度开销会低于 30 FPS;v7 用 32 ms 请求补偿,普通验收场景回到约 29.2–29.3 FPS。Reduced 使用约 67 ms,ambient 500 ms。

结果边界

v7 当前复杂存档比一次性验收存档多出已解锁对象,同时 IMU 33 ms、PWR 50 ms 任务持续运行,因此稳定约 26.2–26.7 FPS。这是被记录的现状,不被“目标 30 FPS”掩盖;下一阶段应继续以 render 23 ms 与 present 7 ms 的实测分项为入口。

不采用的捷径

  • 不降低逻辑时间精度。
  • 不把 466×466 缩成更低分辨率再放大。
  • 不用插值或模糊替代 authored 像素帧。
  • 不删除关键 FX、TEAM 或倾斜反馈来换帧率。
  • 不把残影或偶发全帧漏刷当成“肉眼看不出”。