# Canvas Feature QEMU Code Size Report - Commit: `1fe189eb` - Date: 2026-05-21T16:05:55.973403 - Build target: `APP=HelloSizeAnalysis APP_SUB=canvas_path_probe PORT=qemu CPU_ARCH=cortex-m0plus` - Measurement method: compile a dedicated probe app, then rewrite app-local feature override + probe config headers to enable one feature set. - Scope: feature-level static qemu ELF sections only (`.text/.rodata/.data/.bss`). ## 说明 - 这份报告解决的是“整项能力值不值得开”的问题,不是单个函数的边际成本。 - baseline 明确关闭 `MASK/QOI/RLE` 这类有总开关的 feature,再与 feature-on 变体比较。 - 对于没有全局开关的能力,例如 `IMAGE_TRANSFORM`、`TEXT_TRANSFORM`、`GRADIENT`,这里仍使用 probe 聚合场景代表该 feature 的总体成本。 - HQ line/circle/arc 不在这份报告里,仍请看 `hq_size_report.md`。 ## Baseline | Variant | Text | Rodata | Data | Bss | Total ROM | |---------|-----:|-------:|-----:|----:|----------:| | BASELINE | 14532 | 596 | 1368 | 6368 | 15128 | ## Feature Summary | Feature | Delta Text | Delta Rodata | Delta Data | Delta Bss | Delta ROM | |---------|-----------:|-------------:|-----------:|----------:|----------:| | BASIC_GEOMETRY | +13436 | +724 | +0 | +4 | +14160 | | CIRCLE_ARC_BASIC | +13716 | +1844 | +0 | +4 | +15560 | | LINE_FAMILY | +4540 | +12 | +0 | +4 | +4552 | | GRADIENT_FEATURE | +13076 | +804 | +0 | +4 | +13880 | | MASK_FEATURE | +25228 | +928 | +0 | +12 | +26156 | | IMAGE_STD_FEATURE | +10772 | +108 | +0 | +12 | +10880 | | IMAGE_TRANSFORM | +16164 | +476 | +0 | +12 | +16640 | | TEXT_TRANSFORM | +21008 | +6432 | +0 | +12 | +27440 | | RLE_CODEC | +6900 | +152 | +0 | +48 | +7052 | | QOI_CODEC | +8600 | +148 | +0 | +1244 | +8748 | | ALL_COMMON_CANVAS_FEATURES | +115692 | +8420 | +0 | +1280 | +124112 | ## Feature Definition | Feature | Included Scenes | Description | |---------|-----------------|-------------| | BASIC_GEOMETRY | `RECT_*`
`ROUND_RECT_*`
`TRIANGLE_*` | Basic geometry paths for rect, round-rect and triangle, excluding circle and arc. | | CIRCLE_ARC_BASIC | `CIRCLE_BASIC_*`
`ARC_BASIC_*` | Basic circle and arc feature set, including LUT-related dependency cost. | | LINE_FAMILY | `LINE`
`POLYLINE` | Basic line and polyline feature set. | | GRADIENT_FEATURE | `GRADIENT_RECT`
`GRADIENT_ROUND_RECT`
`GRADIENT_CIRCLE` | Shape gradient feature set. | | MASK_FEATURE | `MASK_CIRCLE`
`MASK_ROUND_RECT`
`MASK_IMAGE` | Mask feature set measured with circle, round-rect and image mask representative scenes. | | IMAGE_STD_FEATURE | `IMAGE_DRAW`
`IMAGE_RESIZE`
`IMAGE_TINT` | Standard image draw, resize and tint feature set. | | IMAGE_TRANSFORM | `IMAGE_ROTATE` | Image transform and rotation feature. | | TEXT_TRANSFORM | `TEXT_ROTATE` | Text transform and rotation feature. | | RLE_CODEC | `RLE_DRAW` | RLE codec enabled, plus one representative draw path to reflect full linked cost. | | QOI_CODEC | `QOI_DRAW` | QOI codec enabled, plus one representative draw path to reflect full linked cost. | | ALL_COMMON_CANVAS_FEATURES | `all common non-HQ canvas features` | All common non-HQ canvas features enabled together. | ## Detailed Variants | Variant | Feature Config | Text | Rodata | Data | Bss | Total ROM | |---------|-------------------|-----:|-------:|-----:|----:|----------:| | BASELINE | `-DEGUI_CONFIG_FUNCTION_SUPPORT_MASK=0 -DEGUI_CONFIG_FUNCTION_IMAGE_CODEC_QOI=0 -DEGUI_CONFIG_FUNCTION_IMAGE_CODEC_RLE=0` | 14532 | 596 | 1368 | 6368 | 15128 | | BASIC_GEOMETRY | `-DEGUI_CONFIG_FUNCTION_SUPPORT_MASK=0 -DEGUI_CONFIG_FUNCTION_IMAGE_CODEC_QOI=0 -DEGUI_CONFIG_FUNCTION_IMAGE_CODEC_RLE=0 -DEGUI_SIZE_PROBE_RECT_STROKE_PATH=1 -DEGUI_SIZE_PROBE_RECT_FILL_PATH=1 -DEGUI_SIZE_PROBE_ROUND_RECT_STROKE_PATH=1 -DEGUI_SIZE_PROBE_ROUND_RECT_FILL_PATH=1 -DEGUI_SIZE_PROBE_TRIANGLE_STROKE_PATH=1 -DEGUI_SIZE_PROBE_TRIANGLE_FILL_PATH=1` | 27968 | 1320 | 1368 | 6372 | 29288 | | CIRCLE_ARC_BASIC | `-DEGUI_CONFIG_FUNCTION_SUPPORT_MASK=0 -DEGUI_CONFIG_FUNCTION_IMAGE_CODEC_QOI=0 -DEGUI_CONFIG_FUNCTION_IMAGE_CODEC_RLE=0 -DEGUI_SIZE_PROBE_CIRCLE_BASIC_STROKE_PATH=1 -DEGUI_SIZE_PROBE_CIRCLE_BASIC_FILL_PATH=1 -DEGUI_SIZE_PROBE_ARC_BASIC_STROKE_PATH=1 -DEGUI_SIZE_PROBE_ARC_BASIC_FILL_PATH=1` | 28248 | 2440 | 1368 | 6372 | 30688 | | LINE_FAMILY | `-DEGUI_CONFIG_FUNCTION_SUPPORT_MASK=0 -DEGUI_CONFIG_FUNCTION_IMAGE_CODEC_QOI=0 -DEGUI_CONFIG_FUNCTION_IMAGE_CODEC_RLE=0 -DEGUI_SIZE_PROBE_LINE_PATH=1 -DEGUI_SIZE_PROBE_POLYLINE_PATH=1` | 19072 | 608 | 1368 | 6372 | 19680 | | GRADIENT_FEATURE | `-DEGUI_CONFIG_FUNCTION_SUPPORT_MASK=0 -DEGUI_CONFIG_FUNCTION_IMAGE_CODEC_QOI=0 -DEGUI_CONFIG_FUNCTION_IMAGE_CODEC_RLE=0 -DEGUI_SIZE_PROBE_GRADIENT_RECT_PATH=1 -DEGUI_SIZE_PROBE_GRADIENT_ROUND_RECT_PATH=1 -DEGUI_SIZE_PROBE_GRADIENT_CIRCLE_PATH=1` | 27608 | 1400 | 1368 | 6372 | 29008 | | MASK_FEATURE | `-DEGUI_CONFIG_FUNCTION_SUPPORT_MASK=1 -DEGUI_CONFIG_FUNCTION_IMAGE_CODEC_QOI=0 -DEGUI_CONFIG_FUNCTION_IMAGE_CODEC_RLE=0 -DEGUI_SIZE_PROBE_MASK_CIRCLE_PATH=1 -DEGUI_SIZE_PROBE_MASK_ROUND_RECT_PATH=1 -DEGUI_SIZE_PROBE_MASK_IMAGE_PATH=1` | 39760 | 1524 | 1368 | 6380 | 41284 | | IMAGE_STD_FEATURE | `-DEGUI_CONFIG_FUNCTION_SUPPORT_MASK=0 -DEGUI_CONFIG_FUNCTION_IMAGE_CODEC_QOI=0 -DEGUI_CONFIG_FUNCTION_IMAGE_CODEC_RLE=0 -DEGUI_SIZE_PROBE_IMAGE_DRAW_PATH=1 -DEGUI_SIZE_PROBE_IMAGE_RESIZE_PATH=1 -DEGUI_SIZE_PROBE_IMAGE_TINT_PATH=1` | 25304 | 704 | 1368 | 6380 | 26008 | | IMAGE_TRANSFORM | `-DEGUI_CONFIG_FUNCTION_SUPPORT_MASK=0 -DEGUI_CONFIG_FUNCTION_IMAGE_CODEC_QOI=0 -DEGUI_CONFIG_FUNCTION_IMAGE_CODEC_RLE=0 -DEGUI_SIZE_PROBE_IMAGE_ROTATE_PATH=1` | 30696 | 1072 | 1368 | 6380 | 31768 | | TEXT_TRANSFORM | `-DEGUI_CONFIG_FUNCTION_SUPPORT_MASK=0 -DEGUI_CONFIG_FUNCTION_IMAGE_CODEC_QOI=0 -DEGUI_CONFIG_FUNCTION_IMAGE_CODEC_RLE=0 -DEGUI_SIZE_PROBE_TEXT_ROTATE_PATH=1` | 35540 | 7028 | 1368 | 6380 | 42568 | | RLE_CODEC | `-DEGUI_CONFIG_FUNCTION_SUPPORT_MASK=0 -DEGUI_CONFIG_FUNCTION_IMAGE_CODEC_QOI=0 -DEGUI_CONFIG_FUNCTION_IMAGE_CODEC_RLE=1 -DEGUI_SIZE_PROBE_RLE_DRAW_PATH=1` | 21432 | 748 | 1368 | 6416 | 22180 | | QOI_CODEC | `-DEGUI_CONFIG_FUNCTION_SUPPORT_MASK=0 -DEGUI_CONFIG_FUNCTION_IMAGE_CODEC_QOI=1 -DEGUI_CONFIG_FUNCTION_IMAGE_CODEC_RLE=0 -DEGUI_SIZE_PROBE_QOI_DRAW_PATH=1` | 23132 | 744 | 1368 | 7612 | 23876 | | ALL_COMMON_CANVAS_FEATURES | `-DEGUI_CONFIG_FUNCTION_SUPPORT_MASK=1 -DEGUI_CONFIG_FUNCTION_IMAGE_CODEC_QOI=1 -DEGUI_CONFIG_FUNCTION_IMAGE_CODEC_RLE=1 -DEGUI_SIZE_PROBE_RECT_STROKE_PATH=1 -DEGUI_SIZE_PROBE_RECT_FILL_PATH=1 -DEGUI_SIZE_PROBE_ROUND_RECT_STROKE_PATH=1 -DEGUI_SIZE_PROBE_ROUND_RECT_FILL_PATH=1 -DEGUI_SIZE_PROBE_TRIANGLE_STROKE_PATH=1 -DEGUI_SIZE_PROBE_TRIANGLE_FILL_PATH=1 -DEGUI_SIZE_PROBE_CIRCLE_BASIC_STROKE_PATH=1 -DEGUI_SIZE_PROBE_CIRCLE_BASIC_FILL_PATH=1 -DEGUI_SIZE_PROBE_ARC_BASIC_STROKE_PATH=1 -DEGUI_SIZE_PROBE_ARC_BASIC_FILL_PATH=1 -DEGUI_SIZE_PROBE_LINE_PATH=1 -DEGUI_SIZE_PROBE_POLYLINE_PATH=1 -DEGUI_SIZE_PROBE_GRADIENT_RECT_PATH=1 -DEGUI_SIZE_PROBE_GRADIENT_ROUND_RECT_PATH=1 -DEGUI_SIZE_PROBE_GRADIENT_CIRCLE_PATH=1 -DEGUI_SIZE_PROBE_MASK_CIRCLE_PATH=1 -DEGUI_SIZE_PROBE_MASK_ROUND_RECT_PATH=1 -DEGUI_SIZE_PROBE_MASK_IMAGE_PATH=1 -DEGUI_SIZE_PROBE_IMAGE_DRAW_PATH=1 -DEGUI_SIZE_PROBE_IMAGE_RESIZE_PATH=1 -DEGUI_SIZE_PROBE_IMAGE_TINT_PATH=1 -DEGUI_SIZE_PROBE_IMAGE_ROTATE_PATH=1 -DEGUI_SIZE_PROBE_TEXT_ROTATE_PATH=1 -DEGUI_SIZE_PROBE_RLE_DRAW_PATH=1 -DEGUI_SIZE_PROBE_QOI_DRAW_PATH=1` | 130224 | 9016 | 1368 | 7648 | 139240 | ## Reproduce ```bash python scripts/size_analysis/main.py canvas-feature-size-to-doc ``` Raw JSON is written to `output/canvas_feature_size_results.json`.