perf(lcd): precompose emote updates and smooth closed eyes
This commit is contained in:
@@ -22,7 +22,7 @@
|
||||
- 右上百分比和电池;未知值显示 --%,充电绿色并带闪电缺口,低电量红色。
|
||||
- SOC、有效性和充电状态来自现有 domain battery 服务,不从 ADC 重算。
|
||||
- GFX 顶部 320x40 RGB565 图层,常驻 25,600 B PSRAM;只在分钟或电池状态
|
||||
改变时使图层失效并刷新,眨眼仍只改变眼睛网格,不解码新 PNG。
|
||||
改变时使图层失效并刷新,眨眼主要改变眼睛网格,接近闭合时切换为程序绘制的抗锯齿弧线,不解码新 PNG。
|
||||
- PNG 表情复用相同点阵 / 电池绘制器,在每帧合成时更新;二维码和 LCD
|
||||
边界测试页面不显示状态栏。PNG 无限等待期间不会独立重绘状态栏。
|
||||
- 不需要字体包或新图片。旧 PNG 低电量底部告警保留;旧充电 PNG 不再自动
|
||||
@@ -42,3 +42,23 @@ AddressSanitizer / UndefinedBehaviorSanitizer 检查 808 组有效性、充电
|
||||
4. 动画结束同时到达新请求时不被自动 IDLE 覆盖。
|
||||
|
||||
编译 / 主机测试不等同于上述实机验证。
|
||||
|
||||
## 无 TE 的软件减撕裂试验
|
||||
|
||||
- GFX 使用单个 153,600 B PSRAM 合成缓冲(partition 模式,不是 RGB 全帧模式),
|
||||
+ 普通眼睛更新先完成整个 dirty 区域,再进入 flush;不会在分块传输之间计算网格。
|
||||
+- flush 使用单个 10,240 B 内部 DMA 暂存区;按最多 5,120 像素连续搬运,
|
||||
+ 每批等待 ISR 完成后才复用,整区域发完才通知 GFX。PNG 原有 8 行块不变。
|
||||
+- 相对上一版移除 2×2,560 B DMA 小缓冲,增加 5,120 B DMA 暂存净容量
|
||||
+ (不含 SPI 驱动描述符);新增合成缓冲和 9,996 B 闭眼纹理共 163,596 B PSRAM。
|
||||
+- closure >=232 时隐藏压缩眼圈并显示同色的抗锯齿闭眼弧线,避免极薄纹理抖动。
|
||||
+- 34ms 帧预算包含绘制/传输时间,超时不会再固定额外等 34ms。
|
||||
+- 每轮日志 emote blink composed draw_us_avg=... late_frames=.../12,
|
||||
+ 仅反映绘制预算,不是面板实际扫描帧率。
|
||||
+- DMA 超时会锁住 GFX 传输路径,不复用可能仍被硬件读取的缓冲;需重启恢复。
|
||||
+- 此方案不能保证面板扫描无撕裂。实机比较眨眼上下断层、闭眼亮点及原有
|
||||
+ 表情切换/状态栏行为;无 TE 时不能把软件预合成称为硬件同步双缓冲。
|
||||
|
||||
主机传输/闭眼回归:`python3 tools/test_lcd_emote_transport.py`,检查 320 种
|
||||
区域宽度、DMA 分块/数据顺序、错误/超时处理及闭眼对称性。当前 RTOS tick
|
||||
为 10ms,实际眨眼间隔仍有 tick 量化及任务调度抖动,日志不是实测 FPS。
|
||||
|
||||
Reference in New Issue
Block a user