You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: content/blog/2025-08-05-tmil-19/index.md
+64-15Lines changed: 64 additions & 15 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -32,21 +32,61 @@ You can follow this work at [servo#38345][].
32
32
33
33
### Benchmarking
34
34
35
-
<!-- TODO: Clean up long sentences, hedge, ensure link text is meaningfuly, etc. -->
36
-
In order to get a better understanding of where we lie performance-wise, we included `tiny-skia` and `vello-cpu` in the [Blend2D benchmark harness](https://blend2d.com/performance.html), a comprehensive benchmarking tool that tests the performance of different parts of a 2D renderer and compares it against other renderers.
37
-
In order to do so, a [fork](https://github.com/LaurenzV/blend2d-apps/tree/benching) of the benchmark harness was created that uses C bindings to both libraries to include them in the harness.
38
-
To visualize the results, we created a chart, similar to how it is available on the official Blend2D website.
39
-
We do want to emphasize again that full credit for building this benchmark tool goes to the Blend2D team, and we merely extended it to also include `tiny-skia` and `vello-cpu`.
40
-
41
-
The results can be viewed [here](https://laurenzv.github.io/vello_chart/), the source code for generating the charts is available [here](https://github.com/LaurenzV/vello_chart).
35
+
We have performed some benchmarking to understand where Vello CPU's performance lies in the available 2d renderers.
36
+
We did this by creating [a fork of the Blend2D benchmark harness](https://github.com/LaurenzV/blend2d-apps/tree/benching) with the addition of Vello CPU.
37
+
We also added Tiny Skia, which is also stewarded by Linebender and is another popular renderer written in Rust.
38
+
You can read more about the benchmark methodology on [Blend2D's performance page](https://blend2d.com/performance.html).
39
+
We wish to thank the Blend2D team for creating this excellent suite of tests.
40
+
41
+
<!-- We did try embedding the results here, but it doesn't really work nicely -->
The [benchmark results page](https://laurenzv.github.io/vello_chart/) shows the results of running this suite on an Apple M1 Pro.
74
+
This shows the results for Blend2D, Agg, Tiny Skia, Vello CPU, Cairo, Skia, and JUCE.
75
+
The source for this results page is available on GitHub at <https://github.com/LaurenzV/vello_chart>.
42
76
43
77
Some things that should be noted here:
44
78
45
-
- Note that these are only preliminary results, and there are plans for making further improvements, especially for multi-threading.
46
-
- We currently do not support x86 SIMD, which is why they are currently not included in the chart.
47
-
It should be noted that the [README](https://github.com/linebender/tiny-skia?tab=readme-ov-file#performance) of `tiny-skia` explicitly mentions that performance on ARM is worse than on x86, so we expect the performance gap to be smaller on x86.
79
+
- Vello CPU is still under active development, so these are only preliminary results.
80
+
- We currently do not support x86-64 SIMD, which is why these charts currently only show an ARM machine.
81
+
As noted below, we're actively working on x86-64 support.
82
+
- Tiny Skia's relative performance [is documented](https://github.com/linebender/tiny-skia?tab=readme-ov-file#performance) to be worse on ARM than on x86-64.
83
+
We therefore expect the performance gap between Vello CPU and Tiny Skia to be smaller on x86-64.
48
84
49
-
Nevertheless, by looking at this chart, it is clear that `vello-cpu` has very impressive performance and on track to become the fastest CPU-based renderer in the Rust ecosystem! When taking all renderers into consideration, Blend2D is still the clear winner in terms of raw performance, but `vello-cpu` does end up taking the second place in many of the benchmarks and beating other renderers such as Skia and Cairo, especially as the size of the geometry gets larger. Similarly to Blend2D, `vello-cpu` also offers a multi-threaded rendering mode, which is especially effective when drawing larger geometries with curves or when using complex paints such as gradients or patterns.
85
+
It is clear that `vello-cpu` has very impressive performance and on track to become the fastest CPU-only renderer in the Rust ecosystem!
86
+
Blend2D is still the clear winner in these tests, but `vello-cpu` takes second place in many of the benchmarks, beating other mature renderers such as Skia and Cairo.
87
+
This is especially the case as the size of the geometry gets larger.
88
+
Blend2D and `vello-cpu` both offer multi-threaded rendering modes (marked by the 2T/4T/8T suffices, as opposed to ST for single threaded).
89
+
Vello CPU's multithreading is especially effective when drawing larger geometries with curves or when using complex paints such as gradients or patterns.
50
90
51
91
### Fearless SIMD
52
92
@@ -65,7 +105,7 @@ Thanks to new contributions from Benjamin Saunders we've started on SSE 4.2 supp
65
105
Masonry is the widget system developed by Linebender.
66
106
It provides a non-opinionated retained widget tree, designed as a base layer for high-level GUI frameworks.
67
107
68
-
<!-- TODO: Trim again? -->
108
+
<!-- TODO: Maybe trim again? -->
69
109
-[xilem#1077][]: Added the accessibility integration for VirtualScroll.
70
110
-[xilem#1096][]: Improved the default styles in Masonry, by Marco Melorio.
71
111
-[xilem#1124][]: Make Checkbox support keyboard interaction, by tannal.
@@ -85,8 +125,6 @@ It provides a non-opinionated retained widget tree, designed as a base layer for
85
125
-[xilem#1248][]: Make all widget associated properties be stored in the same arena.
86
126
-[xilem#1253][]: Let Masonry's button have any, by Nixon.
87
127
88
-
<!-- TODO: Screenshot for xilem#1096? -->
89
-
90
128
<figure>
91
129
92
130
<imgstyle="height: auto"width="521"height="420"src="masonry_new_style.png"alt="A todo list app, with items referring to aspects of the new design language, namely 'New Colours', 'Increased Consistency', and 'More Rounded Corners'. The item labelled 'A full design system' is unchecked.">
@@ -111,7 +149,18 @@ Our work on Placehero, which is the working name for our Mastodon client example
111
149
-[xilem#1220][], [xilem#1256][]: Use the environment system for avatars in Placehero.
112
150
-[xilem#1257][]: Avoid per-frame potential allocations in views with multiple children (i.e. Flex, Grid).
113
151
114
-
<!-- Image of Xilem Chess GUI, if we have permission. -->
152
+
<figure>
153
+
154
+
<!-- TODO: Correct image, once we have it. -->
155
+
<!-- <img style="height: auto" width="521" height="420" src="masonry_new_style.png" alt="A todo list app, with items referring to aspects of the new design language, namely 'New Colours', 'Increased Consistency', and 'More Rounded Corners'. The item labelled 'A full design system' is unchecked."> -->
156
+
157
+
<figcaption>
158
+
159
+
For July, we would like to showcase this Chess GUI developed using Xilem by Dr. Salewski.
160
+
It can be found in its repository at <https://github.com/StefanSalewski/xilem-chess>.
0 commit comments