# Widget Feature QEMU Code Size Report - Commit: `21b6890` - Date: 2026-04-05T08:31:12.386532 - Build target: `APP=HelloSizeAnalysis APP_SUB=widget_feature_probe PORT=qemu CPU_ARCH=cortex-m0plus` - Measurement method: compile a dedicated widget probe app, then rewrite the app-local probe config header to force-link a real widget or widget set. - Scope: widget-level static qemu ELF sections only (`.text/.rodata/.data/.bss`). ## Notes - This report answers how much ROM and RAM a real widget or widget set costs to bring in. - The probe uses real widget `init_with_params` and setter paths rather than canvas-only stand-ins. - Widgets share base/view/theme/canvas paths, so widget-set totals must not be computed by summing single-widget deltas. ## Baseline | Variant | Text | Rodata | Data | Bss | Total ROM | |---------|-----:|-------:|-----:|----:|----------:| | BASELINE | 11660 | 568 | 24 | 6024 | 12228 | ## Widget Summary | Widget Or Set | Delta Text | Delta Rodata | Delta Data | Delta Bss | Delta ROM | |---------------|-----------:|-------------:|-----------:|----------:|----------:| | SLIDER | +7444 | +816 | +0 | +76 | +8260 | | SWITCH | +6540 | +824 | +0 | +92 | +7364 | | PAGE_INDICATOR | +3120 | +820 | +0 | +80 | +3940 | | STEPPER | +3268 | +892 | +0 | +96 | +4160 | | CHECKBOX | +6936 | +812 | +0 | +100 | +7748 | | RADIO_BUTTON | +6132 | +816 | +0 | +96 | +6948 | | PROGRESS_BAR | +6972 | +820 | +0 | +76 | +7792 | | TOGGLE_BUTTON | +4492 | +1196 | +0 | +96 | +5688 | | NOTIFICATION_BADGE | +4500 | +1156 | +0 | +88 | +5656 | | BUTTON | +4696 | +1192 | +0 | +92 | +5888 | | IMAGE_BUTTON | +5892 | +1188 | +0 | +96 | +7080 | | CIRCULAR_PROGRESS_BAR | +13208 | +1724 | +0 | +80 | +14932 | | GAUGE | +17020 | +1712 | +0 | +88 | +18732 | | ACTIVITY_RING | +11844 | +1380 | +0 | +80 | +13224 | | ANALOG_CLOCK | +9200 | +1004 | +0 | +80 | +10204 | | LINE_WIDGET | +5972 | +820 | +0 | +72 | +6792 | | CHART_LINE | +9160 | +1300 | +0 | +128 | +10460 | | CHART_PIE | +7380 | +1576 | +0 | +80 | +8956 | | INDICATOR_WIDGET_SET | +8984 | +1096 | +0 | +332 | +10080 | | RING_WIDGET_SET | +19180 | +1920 | +0 | +248 | +21100 | | LINE_VISUAL_WIDGET_SET | +13312 | +1676 | +0 | +272 | +14988 | | ALL_WIDGET_PROBES | +33988 | +3588 | +0 | +1532 | +37576 | ## Definition | Widget Or Set | Included Items | Description | |---------------|----------------|-------------| | SLIDER | `egui_view_slider` | Real slider widget cost. | | SWITCH | `egui_view_switch` | Real switch widget cost. | | PAGE_INDICATOR | `egui_view_page_indicator` | Real page indicator widget cost. | | STEPPER | `egui_view_stepper` | Real stepper widget cost. | | CHECKBOX | `egui_view_checkbox` | Real checkbox widget cost. | | RADIO_BUTTON | `egui_view_radio_button` | Real radio button widget cost. | | PROGRESS_BAR | `egui_view_progress_bar` | Real progress bar widget cost. | | TOGGLE_BUTTON | `egui_view_toggle_button` | Real toggle button widget cost. | | NOTIFICATION_BADGE | `egui_view_notification_badge` | Real notification badge widget cost. | | BUTTON | `egui_view_button` | Real button widget cost. | | IMAGE_BUTTON | `egui_view_image_button` | Real image button widget cost. | | CIRCULAR_PROGRESS_BAR | `egui_view_circular_progress_bar` | Real circular progress bar widget cost. | | GAUGE | `egui_view_gauge` | Real gauge widget cost. | | ACTIVITY_RING | `egui_view_activity_ring` | Real activity ring widget cost. | | ANALOG_CLOCK | `egui_view_analog_clock` | Real analog clock widget cost. | | LINE_WIDGET | `egui_view_line` | Real line widget cost. | | CHART_LINE | `egui_view_chart_line` | Real chart-line widget cost. | | CHART_PIE | `egui_view_chart_pie` | Real chart-pie widget cost. | | INDICATOR_WIDGET_SET | `slider`
`switch`
`page_indicator`
`stepper` | A common indicator widget set. | | RING_WIDGET_SET | `circular_progress_bar`
`gauge`
`activity_ring` | A ring and gauge widget set. | | LINE_VISUAL_WIDGET_SET | `line`
`chart_line`
`analog_clock` | A line, clock and data-visual widget set. | | ALL_WIDGET_PROBES | `all widget probes` | All widget probes enabled together. | ## Detailed Variants | Variant | Probe Config | Text | Rodata | Data | Bss | Total ROM | |---------|-------------------|-----:|-------:|-----:|----:|----------:| | BASELINE | `(none)` | 11660 | 568 | 24 | 6024 | 12228 | | SLIDER | `-DEGUI_SIZE_PROBE_WIDGET_SLIDER=1` | 19104 | 1384 | 24 | 6100 | 20488 | | SWITCH | `-DEGUI_SIZE_PROBE_WIDGET_SWITCH=1` | 18200 | 1392 | 24 | 6116 | 19592 | | PAGE_INDICATOR | `-DEGUI_SIZE_PROBE_WIDGET_PAGE_INDICATOR=1` | 14780 | 1388 | 24 | 6104 | 16168 | | STEPPER | `-DEGUI_SIZE_PROBE_WIDGET_STEPPER=1` | 14928 | 1460 | 24 | 6120 | 16388 | | CHECKBOX | `-DEGUI_SIZE_PROBE_WIDGET_CHECKBOX=1` | 18596 | 1380 | 24 | 6124 | 19976 | | RADIO_BUTTON | `-DEGUI_SIZE_PROBE_WIDGET_RADIO_BUTTON=1` | 17792 | 1384 | 24 | 6120 | 19176 | | PROGRESS_BAR | `-DEGUI_SIZE_PROBE_WIDGET_PROGRESS_BAR=1` | 18632 | 1388 | 24 | 6100 | 20020 | | TOGGLE_BUTTON | `-DEGUI_SIZE_PROBE_WIDGET_TOGGLE_BUTTON=1` | 16152 | 1764 | 24 | 6120 | 17916 | | NOTIFICATION_BADGE | `-DEGUI_SIZE_PROBE_WIDGET_NOTIFICATION_BADGE=1` | 16160 | 1724 | 24 | 6112 | 17884 | | BUTTON | `-DEGUI_SIZE_PROBE_WIDGET_BUTTON=1` | 16356 | 1760 | 24 | 6116 | 18116 | | IMAGE_BUTTON | `-DEGUI_SIZE_PROBE_WIDGET_IMAGE_BUTTON=1` | 17552 | 1756 | 24 | 6120 | 19308 | | CIRCULAR_PROGRESS_BAR | `-DEGUI_SIZE_PROBE_WIDGET_CPB=1` | 24868 | 2292 | 24 | 6104 | 27160 | | GAUGE | `-DEGUI_SIZE_PROBE_WIDGET_GAUGE=1` | 28680 | 2280 | 24 | 6112 | 30960 | | ACTIVITY_RING | `-DEGUI_SIZE_PROBE_WIDGET_ACTIVITY_RING=1` | 23504 | 1948 | 24 | 6104 | 25452 | | ANALOG_CLOCK | `-DEGUI_SIZE_PROBE_WIDGET_ANALOG_CLOCK=1` | 20860 | 1572 | 24 | 6104 | 22432 | | LINE_WIDGET | `-DEGUI_SIZE_PROBE_WIDGET_LINE=1` | 17632 | 1388 | 24 | 6096 | 19020 | | CHART_LINE | `-DEGUI_SIZE_PROBE_WIDGET_CHART_LINE=1` | 20820 | 1868 | 24 | 6152 | 22688 | | CHART_PIE | `-DEGUI_SIZE_PROBE_WIDGET_CHART_PIE=1` | 19040 | 2144 | 24 | 6104 | 21184 | | INDICATOR_WIDGET_SET | `-DEGUI_SIZE_PROBE_WIDGET_SLIDER=1 -DEGUI_SIZE_PROBE_WIDGET_SWITCH=1 -DEGUI_SIZE_PROBE_WIDGET_PAGE_INDICATOR=1 -DEGUI_SIZE_PROBE_WIDGET_STEPPER=1` | 20644 | 1664 | 24 | 6356 | 22308 | | RING_WIDGET_SET | `-DEGUI_SIZE_PROBE_WIDGET_CPB=1 -DEGUI_SIZE_PROBE_WIDGET_GAUGE=1 -DEGUI_SIZE_PROBE_WIDGET_ACTIVITY_RING=1` | 30840 | 2488 | 24 | 6272 | 33328 | | LINE_VISUAL_WIDGET_SET | `-DEGUI_SIZE_PROBE_WIDGET_LINE=1 -DEGUI_SIZE_PROBE_WIDGET_CHART_LINE=1 -DEGUI_SIZE_PROBE_WIDGET_ANALOG_CLOCK=1` | 24972 | 2244 | 24 | 6296 | 27216 | | ALL_WIDGET_PROBES | `-DEGUI_SIZE_PROBE_WIDGET_SLIDER=1 -DEGUI_SIZE_PROBE_WIDGET_SWITCH=1 -DEGUI_SIZE_PROBE_WIDGET_PAGE_INDICATOR=1 -DEGUI_SIZE_PROBE_WIDGET_STEPPER=1 -DEGUI_SIZE_PROBE_WIDGET_CHECKBOX=1 -DEGUI_SIZE_PROBE_WIDGET_RADIO_BUTTON=1 -DEGUI_SIZE_PROBE_WIDGET_PROGRESS_BAR=1 -DEGUI_SIZE_PROBE_WIDGET_TOGGLE_BUTTON=1 -DEGUI_SIZE_PROBE_WIDGET_NOTIFICATION_BADGE=1 -DEGUI_SIZE_PROBE_WIDGET_BUTTON=1 -DEGUI_SIZE_PROBE_WIDGET_IMAGE_BUTTON=1 -DEGUI_SIZE_PROBE_WIDGET_CPB=1 -DEGUI_SIZE_PROBE_WIDGET_GAUGE=1 -DEGUI_SIZE_PROBE_WIDGET_ACTIVITY_RING=1 -DEGUI_SIZE_PROBE_WIDGET_ANALOG_CLOCK=1 -DEGUI_SIZE_PROBE_WIDGET_LINE=1 -DEGUI_SIZE_PROBE_WIDGET_CHART_LINE=1 -DEGUI_SIZE_PROBE_WIDGET_CHART_PIE=1` | 45648 | 4156 | 24 | 7556 | 49804 | ## Reproduce ```bash python scripts/size_analysis/widget_feature_size_to_doc.py ``` Raw JSON is written to `output/widget_feature_size_results.json`.