Canvas Path QEMU Code Size Report

  • Commit: 1fe189eb

  • Date: 2026-05-21T16:04:33.734670

  • Build target: APP=HelloSizeAnalysis APP_SUB=canvas_path_probe PORT=qemu CPU_ARCH=cortex-m0plus

  • Measurement method: compile a dedicated probe app, then rewrite the app-local probe config header to force-link a single canvas scene.

  • Scope: static qemu ELF sections only (.text/.rodata/.data/.bss). No runtime heap/stack is measured here.

说明

  • 这是“渲染场景引入成本”报告,不是业务应用最终成本报告。

  • 各场景之间存在依赖与重叠,不能简单把增量直接相加。

  • Delta Text 是主要代码体积指标;Delta ROM = Delta Text + Delta Rodata 更适合作为 flash 成本口径。

  • 这份报告只覆盖普通 canvas/render path;HQ line/circle/arc 请结合 hq_size_report.md 一起看。

Baseline

Variant

Text

Rodata

Data

Bss

Total ROM

BASELINE

14652

596

1368

7600

15248

Increment Summary

Scene

Delta Text

Delta Rodata

Delta Data

Delta Bss

Delta ROM

RECT_STROKE

+1012

+0

+0

+4

+1012

RECT_FILL

+780

+0

+0

+4

+780

ROUND_RECT_STROKE

+7136

+724

+0

+4

+7860

ROUND_RECT_FILL

+3604

+724

+0

+4

+4328

TRIANGLE_STROKE

+4140

+0

+0

+4

+4140

TRIANGLE_FILL

+4184

+0

+0

+4

+4184

CIRCLE_BASIC_STROKE

+6096

+724

+0

+4

+6820

CIRCLE_BASIC_FILL

+3136

+724

+0

+4

+3860

ARC_BASIC_STROKE

+12856

+1844

+0

+4

+14700

ARC_BASIC_FILL

+6880

+1844

+0

+4

+8724

LINE

+3984

+0

+0

+4

+3984

POLYLINE

+4496

+12

+0

+4

+4508

GRADIENT_RECT

+3188

+60

+0

+4

+3248

GRADIENT_ROUND_RECT

+6844

+804

+0

+4

+7648

GRADIENT_CIRCLE

+5120

+60

+0

+4

+5180

MASK_CIRCLE

+8

+0

+0

+4

+8

MASK_ROUND_RECT

+8

+0

+0

+4

+8

MASK_IMAGE

+8

+0

+0

+4

+8

IMAGE_DRAW

+10540

+108

+0

+12

+10648

IMAGE_RESIZE

+10588

+108

+0

+12

+10696

IMAGE_TINT

+10600

+108

+0

+12

+10708

IMAGE_ROTATE

+16164

+476

+0

+12

+16640

TEXT_ROTATE

+21000

+6432

+0

+12

+27432

RLE_DRAW

+8

+0

+0

+4

+8

QOI_DRAW

+8480

+148

+0

+12

+8628

ALL_CANVAS_PATHS

+74156

+8228

+0

+12

+82384

Scene Definition

Scene

Representative Functions

Description

RECT_STROKE

egui_canvas_draw_rectangle

Rectangle stroke path.

RECT_FILL

egui_canvas_draw_rectangle_fill

Rectangle fill path.

ROUND_RECT_STROKE

egui_canvas_draw_round_rectangle

Round-rectangle stroke path.

ROUND_RECT_FILL

egui_canvas_draw_round_rectangle_fill

Round-rectangle fill path.

TRIANGLE_STROKE

egui_canvas_draw_triangle

Triangle stroke path.

TRIANGLE_FILL

egui_canvas_draw_triangle_fill

Triangle fill path.

CIRCLE_BASIC_STROKE

egui_canvas_draw_circle_basic

Basic circle stroke path.

CIRCLE_BASIC_FILL

egui_canvas_draw_circle_fill_basic

Basic circle fill path, including circle LUT cost.

ARC_BASIC_STROKE

egui_canvas_draw_arc_basic

Basic arc stroke path.

ARC_BASIC_FILL

egui_canvas_draw_arc_fill_basic

Basic arc fill path.

LINE

egui_canvas_draw_line

Basic line path.

POLYLINE

egui_canvas_draw_polyline

Basic polyline path.

GRADIENT_RECT

egui_canvas_draw_rectangle_fill_gradient

Gradient rectangle fill path.

GRADIENT_ROUND_RECT

egui_canvas_draw_round_rectangle_fill_gradient

Gradient round-rectangle fill path.

GRADIENT_CIRCLE

egui_canvas_draw_circle_fill_gradient

Gradient circle fill path.

MASK_CIRCLE

egui_mask_circle_init
egui_canvas_set_mask

Circle mask scene.

MASK_ROUND_RECT

egui_mask_round_rectangle_init
egui_canvas_set_mask

Round-rectangle mask scene.

MASK_IMAGE

egui_mask_image_init
egui_mask_image_set_image
egui_canvas_set_mask

Image mask scene.

IMAGE_DRAW

egui_canvas_draw_image

Standard image draw path.

IMAGE_RESIZE

egui_canvas_draw_image_resize

Standard image resize path.

IMAGE_TINT

egui_canvas_draw_image_color

Standard image tint path.

IMAGE_ROTATE

egui_canvas_draw_image_rotate

Image rotation and transform scene.

TEXT_ROTATE

egui_canvas_draw_text_rotate

Rotated text draw scene.

RLE_DRAW

egui_canvas_draw_image(rle)

RLE codec draw path.

QOI_DRAW

egui_canvas_draw_image(qoi)

QOI codec draw path.

ALL_CANVAS_PATHS

all representative probe functions

All representative canvas path probe scenes enabled together.

Detailed Variants

Variant

Probe Config

Text

Rodata

Data

Bss

Total ROM

BASELINE

(none)

14652

596

1368

7600

15248

RECT_STROKE

-DEGUI_SIZE_PROBE_RECT_STROKE_PATH=1

15664

596

1368

7604

16260

RECT_FILL

-DEGUI_SIZE_PROBE_RECT_FILL_PATH=1

15432

596

1368

7604

16028

ROUND_RECT_STROKE

-DEGUI_SIZE_PROBE_ROUND_RECT_STROKE_PATH=1

21788

1320

1368

7604

23108

ROUND_RECT_FILL

-DEGUI_SIZE_PROBE_ROUND_RECT_FILL_PATH=1

18256

1320

1368

7604

19576

TRIANGLE_STROKE

-DEGUI_SIZE_PROBE_TRIANGLE_STROKE_PATH=1

18792

596

1368

7604

19388

TRIANGLE_FILL

-DEGUI_SIZE_PROBE_TRIANGLE_FILL_PATH=1

18836

596

1368

7604

19432

CIRCLE_BASIC_STROKE

-DEGUI_SIZE_PROBE_CIRCLE_BASIC_STROKE_PATH=1

20748

1320

1368

7604

22068

CIRCLE_BASIC_FILL

-DEGUI_SIZE_PROBE_CIRCLE_BASIC_FILL_PATH=1

17788

1320

1368

7604

19108

ARC_BASIC_STROKE

-DEGUI_SIZE_PROBE_ARC_BASIC_STROKE_PATH=1

27508

2440

1368

7604

29948

ARC_BASIC_FILL

-DEGUI_SIZE_PROBE_ARC_BASIC_FILL_PATH=1

21532

2440

1368

7604

23972

LINE

-DEGUI_SIZE_PROBE_LINE_PATH=1

18636

596

1368

7604

19232

POLYLINE

-DEGUI_SIZE_PROBE_POLYLINE_PATH=1

19148

608

1368

7604

19756

GRADIENT_RECT

-DEGUI_SIZE_PROBE_GRADIENT_RECT_PATH=1

17840

656

1368

7604

18496

GRADIENT_ROUND_RECT

-DEGUI_SIZE_PROBE_GRADIENT_ROUND_RECT_PATH=1

21496

1400

1368

7604

22896

GRADIENT_CIRCLE

-DEGUI_SIZE_PROBE_GRADIENT_CIRCLE_PATH=1

19772

656

1368

7604

20428

MASK_CIRCLE

-DEGUI_SIZE_PROBE_MASK_CIRCLE_PATH=1

14660

596

1368

7604

15256

MASK_ROUND_RECT

-DEGUI_SIZE_PROBE_MASK_ROUND_RECT_PATH=1

14660

596

1368

7604

15256

MASK_IMAGE

-DEGUI_SIZE_PROBE_MASK_IMAGE_PATH=1

14660

596

1368

7604

15256

IMAGE_DRAW

-DEGUI_SIZE_PROBE_IMAGE_DRAW_PATH=1

25192

704

1368

7612

25896

IMAGE_RESIZE

-DEGUI_SIZE_PROBE_IMAGE_RESIZE_PATH=1

25240

704

1368

7612

25944

IMAGE_TINT

-DEGUI_SIZE_PROBE_IMAGE_TINT_PATH=1

25252

704

1368

7612

25956

IMAGE_ROTATE

-DEGUI_SIZE_PROBE_IMAGE_ROTATE_PATH=1

30816

1072

1368

7612

31888

TEXT_ROTATE

-DEGUI_SIZE_PROBE_TEXT_ROTATE_PATH=1

35652

7028

1368

7612

42680

RLE_DRAW

-DEGUI_SIZE_PROBE_RLE_DRAW_PATH=1

14660

596

1368

7604

15256

QOI_DRAW

-DEGUI_SIZE_PROBE_QOI_DRAW_PATH=1

23132

744

1368

7612

23876

ALL_CANVAS_PATHS

-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

88808

8824

1368

7612

97632

Reproduce

python scripts/size_analysis/main.py canvas-path-size-to-doc

Raw JSON is written to output/canvas_path_size_results.json.