# 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`.