Fast Path Config¶
本页是当前 fast-path 相关配置的唯一用户入口。
它只回答三件事:
现在还有哪些 fast-path 相关配置值得用户关注
每个配置大致在换什么
ROM / SRAM / perf哪些历史宏已经不再是推荐用户配置
如果某个 fast-path 名字不在本页里,默认就不要把它当成当前支持的用户配置项。
1. 先看结论¶
当前真正建议用户关注的,主要只有 5 个共享配置宏:
EGUI_CONFIG_IMAGE_DECODE_MAX_PIXEL_SIZEEGUI_CONFIG_FUNCTION_IMAGE_CODEC_FAST_DRAWEGUI_CONFIG_IMAGE_CODEC_PERSISTENT_CACHE_MAX_BYTESEGUI_CONFIG_IMAGE_EXTERNAL_PERSISTENT_CACHE_MAX_BYTESEGUI_CONFIG_IMAGE_RLE_EXTERNAL_CACHE_WINDOW_SIZE
这 5 个配置还保留着,是因为它们现在仍然在表达明确的产品取舍:
decode heap 上界
压缩图片主路径策略
cache / SRAM 预算
而一批只省几十到几百字节的微型 fast-path 宏,已经不再作为用户配置项提供。
2. 当前支持的共享配置¶
下表可以直接当成用户选型入口看。
宏 |
当前默认 |
主要作用 |
典型代价 / 收益 |
什么时候考虑调整 |
|---|---|---|---|---|
|
|
限制 decode 阶段的单像素 scratch 上界 |
|
只有当资源格式或解码路径确实需要更高像素 scratch 时再调大;一般保持默认 |
|
|
控制压缩图片 fast draw 的 3 档模式: |
|
项目有压缩图片热点时,先做 |
|
|
给 codec 整图 persistent cache 预留预算 |
|
只在你已经确认 codec 热点集中在少量重复资源,且愿意为此付出额外 ROM/BSS 时再调大 |
|
|
给 external image persistent cache 预留预算 |
|
项目大量使用 external image,且更关心这些场景的吞吐时可考虑调大 |
|
|
控制 external RLE 的窗口大小,也就是一块直接的 SRAM 预算 |
|
只在 SRAM 非常紧张,且可以接受 external RLE 明显变慢时再缩小 |
这 5 个配置怎么理解¶
MAX_PIXEL_SIZE主要是 heap 上界问题,不是典型 fast-path 开关。EGUI_CONFIG_FUNCTION_IMAGE_CODEC_FAST_DRAW同时收口了“是否启用 row cache”和“是否切到 tail-row low-RAM 路径”两个决策,应该按0 / 1 / 2三档做真实场景 A/B。两个
*_PERSISTENT_CACHE_MAX_BYTES更像“预算项”,不是“应该默认打开的优化项”。RLE_EXTERNAL_CACHE_WINDOW_SIZE是最直接的 SRAM 换性能入口。
3. 示例里还能看到的局部开关¶
当前仓内仍保留两个示例局部开关,但它们不是框架统一配置面:
名字 |
用途 |
对用户的建议 |
|---|---|---|
|
示例或模板里用来做文字路径 A/B; |
普通项目不要额外发散使用;历史上关闭 fast draw 虽可省约 |
|
|
只在 benchmark 或定向实验里使用;普通产品配置不用关注 |
EGUI_CONFIG_FUNCTION_FONT_STD_FAST_DRAW 也是字体 fast/cache 路径的总开关;内部的 code lookup cache、transform prepare/layout cache、transform size cache 和 draw-prefix cache 都不能绕过它单独生效。历史上的 code lookup / transform size 独立宏已经删除,其中 transform size cache 进一步受 EGUI_CONFIG_FUNCTION_FONT_TRANSFORM_FAST_DRAW 约束。
图像 RGB565 alpha opaque cache 也不再保留独立配置入口,随 EGUI_CONFIG_FUNCTION_IMAGE_FORMAT_RGB565 直接编译;image/canvas/font 的 frame-cache release 钩子固定在帧结束执行,不再暴露单独的 release 宏。
如果你是在复制 tiny_rom / basic_ui 这类模板配置,看到 APP_EGUI_* 名字是正常的;但它们只代表模板或示例的局部选择,不代表框架统一推荐接口。
4. 哪些历史宏已经不建议用户再调¶
下面这些类型的名字,当前都不建议再作为用户配置入口依赖:
QOI / RLE 解码内部的小 checkpoint、小索引、小 cache 宏
字体内部的小型 lookup / line cache 宏
只换回几十字节到一两百字节
SRAM的 external row persistent 宏只换回几十字节
ROM / BSS的 source-opaque / row-cache 细节宏
原因也很直接:
它们大多只能换回几十到几百字节
继续公开出来会让配置面越来越碎
其中一些甚至会用很小的
size收益换来非常大的性能退化
几个典型例子:
QOI checkpoint count只省约
text -276B, bss -8B但历史
20个 QOI 场景会回退+110% ~ +911%
RLE checkpoint只省约
text -92B, bss -16B但历史
20个 RLE 场景会回退,峰值约+452%
font的小 lookup / line cache 宏典型收益只有
text +200B / +488B量级不值得继续暴露给用户做长期调参
std / transform external row persistent cache典型也只有
bss -40B / -56B这类收益太小,不值得保留成用户可配项
判断规则可以简单记成一句话:
不能明显改变产品预算的微型宏,不值得继续开放给用户。
5. 按目标选择¶
5.1 如果你优先压 ROM¶
优先做这几件事:
保持
EGUI_CONFIG_FUNCTION_IMAGE_CODEC_FAST_DRAW=0保持两个
*_PERSISTENT_CACHE_MAX_BYTES=0只有在压缩图片热点确实存在时,才评估
EGUI_CONFIG_FUNCTION_IMAGE_CODEC_FAST_DRAW
不要做的事:
不要再去追那些已经移除的历史微宏
不要为了省几百字节,把 QOI/RLE 主路径打穿
5.2 如果你优先压 SRAM¶
优先看:
EGUI_CONFIG_IMAGE_RLE_EXTERNAL_CACHE_WINDOW_SIZEEGUI_CONFIG_IMAGE_DECODE_MAX_PIXEL_SIZE
推荐顺序:
先确认
MAX_PIXEL_SIZE=2是否已经满足需求再评估
RLE_EXTERNAL_CACHE_WINDOW_SIZE是否能从1024缩小如果缩小,就必须做 external RLE 场景回归
5.3 如果你优先要压缩图片性能¶
优先看:
EGUI_CONFIG_FUNCTION_IMAGE_CODEC_FAST_DRAWEGUI_CONFIG_IMAGE_CODEC_PERSISTENT_CACHE_MAX_BYTES
适用场景:
项目里有明显的
QOI/RLE压缩图片热点尤其是 internal tiled scene
先确认
EGUI_CONFIG_FUNCTION_IMAGE_CODEC_FAST_DRAW=1是否已经足够;只有在还要继续压峰值 heap 时,再评估=2
5.4 如果你优先要 external image 性能¶
优先看:
EGUI_CONFIG_IMAGE_EXTERNAL_PERSISTENT_CACHE_MAX_BYTES
适用场景:
external image 读取频繁
同一批资源会被重复访问
你可以接受额外的
ROM / BSS
6. 用户文档的一条边界¶
本页只覆盖“当前仍值得用户调”的入口。
如果你在其它 retention 文档里看到更多 fast-path 名字,需要这样理解:
这些名字大多只是历史 A/B 记录
它们不是当前推荐用户配置面
对普通项目来说,不要因为历史文档里出现过,就把它们重新加回产品配置
只有在你明确要做框架维护或重新做一轮完整 A/B 时,才需要继续阅读:
example/HelloPerformance/fast_path_retention.mdexample/HelloPerformance/macro_decision_matrix.mdexample/HelloPerformance/macro_cleanup_summary.md
7. 一句话总结¶
当前 fast-path 配置的用户口径很简单:
真正值得用户调的,只剩少数几个能明显改变
ROM / SRAM / perf预算的配置项。其余微型 fast-path 宏,默认都不要再碰。