Size Selection Guide

本页不是新的测量结果,而是把当前 size/ 目录里的几份报告整理成一套更容易执行的取舍顺序。具体数字请以各报告页表格为准。

建议配合以下文档一起看:

  • size_report.md

  • hq_size_report.md

  • canvas_path_size_report.md

  • canvas_feature_size_report.md

  • widget_feature_size_report.md

1. 不要把所有 Delta 直接相加

EmbeddedGUI 的 size 不是“单项线性累加”。

原因很直接:

  • 不同 widget 会复用 egui_view / theme / canvas / font / fixmath / image 等公共代码。

  • 不同 canvas path 之间也会共享底层几何和绘制辅助逻辑。

  • 因此单项 delta 更适合看“边际成本”,组合项和最终应用报告才适合看“真实落地成本”。

实际阅读时,请把几份报告的口径分开:

  • canvas_path_size_report.mdhq_size_report.md 看的是“单条路径被链接进来会多多少”。

  • canvas_feature_size_report.mdwidget_feature_size_report.md 看的是“一组能力或一组控件真正一起启用时的组合成本”。

  • size_report.md 看的是“真实应用最终要付出的总体成本”。

2. 先看 feature,再看 widget,最后看 HQ

推荐顺序:

  1. 先决定全局 feature 要不要开

  2. 再决定真实 widget 要不要引入

  3. 最后才决定某些场景是否需要显式调用 _hq 路径

这样做的原因是:

  • feature 决定的是底层能力有没有进入固件,影响面最大。

  • widget 决定的是业务层真实落地成本。

  • HQ 是锦上添花项,适合最后做精细化开关,而不是一开始就全局打开。

3. 小 ROM 项目怎么选

如果目标是小 ROM,建议这样做:

  • size_preset_profiles.mdtiny_rombasic_ui 起步。

  • 只在资源实际使用时打开 QOIRLE codec。

  • 不要默认打开 EGUI_CONFIG_CIRCLE_DEFAULT_ALGO_HQ

  • 优先确认是否真的需要重控件,而不是先引入再回头裁。

这类项目最应该优先复查的通常是:

  • MASK

  • QOI / RLE

  • WIDGET_ENHANCED_DRAW

  • _hq 调用路径

4. 通用 UI 项目怎么选

如果目标是常规设置页、表单页、简单交互页,建议:

  • basic_ui 模板起步。

  • 先选基础交互控件,再逐步增加视觉增强项。

  • codec 只按资源格式打开,不要因为“可能以后会用”而提前保留。

  • 最终以 size_report.md 验证真实应用,而不是只看 probe 增量。

5. 仪表盘和展示项目怎么选

如果目标是看板、仪表、演示项目,建议:

  • dashboardfull_feature 起步。

  • 接受更高的视觉相关 ROM 成本。

  • 先确认是否确实需要 ring / gauge / chart / clock 这类重控件,再决定组合。

  • 即使使用高配模板,也尽量把 HQ 保持为“按场景显式启用”,不要全局默认打开。

6. HQ 路径建议

当前 hq_size_report.md 的结论可以直接用于开关判断:

  • 当前 qemu probe 报告里,LINE_HQCIRCLE_HQARC_HQ 的隔离增量都在 +15200B 量级。

  • ARC_ROUND_CAP_HQALL_HQ 当前都落在 +13388B

  • 这说明真实链接结果要看依赖共享关系,不能只看公开符号本身的体积。

实用建议:

  • 不要把 EGUI_CONFIG_CIRCLE_DEFAULT_ALGO_HQ 直接改成全局默认 1

  • _hq API 只在明确需要画质收益的 widget 或场景里显式调用。

  • 如果关心的是 activity_ring 这类真实业务场景,优先看 ARC_ROUND_CAP_HQ,不要只看 ARC_HQ

7. 选型时最值得先看的开关

优先级较高的开关包括:

  • EGUI_CONFIG_FUNCTION_SUPPORT_MASK

  • EGUI_CONFIG_FUNCTION_IMAGE_CODEC_QOI

  • EGUI_CONFIG_FUNCTION_IMAGE_CODEC_RLE

  • EGUI_CONFIG_FUNCTION_WIDGET_ENHANCED_DRAW

  • EGUI_CONFIG_CIRCLE_DEFAULT_ALGO_HQ

  • EGUI_CONFIG_FUNCTION_IMAGE_FORMAT_RGB565_8

  • EGUI_CONFIG_FUNCTION_IMAGE_FORMAT_ALPHA_8

这些开关的特点是:

  • 要么决定整类功能是否进入固件;

  • 要么决定资源格式支持范围;

  • 要么会影响后续大量 widget 或绘制路径是否被保留。

8. 推荐实际流程

建议按下面的顺序做一次完整判断:

  1. 先看 size_preset_profiles.md,选一个最接近目标的模板。

  2. 再看 canvas_feature_size_report.md,决定全局 feature。

  3. 再看 widget_feature_size_report.md,决定业务层真实控件。

  4. 最后看 hq_size_report.md,只给必要场景加 HQ。

  5. size_report.md 验证真实应用的最终 ROM/RAM/heap/stack

如果需要跑一轮统一回归,直接用:

python scripts/size_analysis/main.py run-size-suite --quick
python scripts/size_analysis/main.py run-size-suite --full
python scripts/size_analysis/main.py run-size-suite --only hq,canvas_feature,widget