Skip to content

Commit f54368b

Browse files
committed
Cleanup section on benchmarking
1 parent c405111 commit f54368b

1 file changed

Lines changed: 64 additions & 15 deletions

File tree

content/blog/2025-08-05-tmil-19/index.md

Lines changed: 64 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -32,21 +32,61 @@ You can follow this work at [servo#38345][].
3232

3333
### Benchmarking
3434

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 -->
42+
<!-- <details>
43+
44+
<style>
45+
@media screen and (max-width: 800px) {
46+
#tmil19-vello-charts-frame {
47+
width: 800px;
48+
position: relative;
49+
left: -15px;
50+
}
51+
}
52+
@media screen and (max-width: 1000px) {
53+
#tmil19-vello-charts-frame {
54+
width: 800px;
55+
position: relative;
56+
left: -30px;
57+
/* min-height: 65vh */
58+
}
59+
}
60+
#tmil19-vello-charts-frame {
61+
width: 1000px;
62+
position: relative;
63+
left: -80px;
64+
height: 65vh;
65+
max-height: content;
66+
}
67+
</style>
68+
69+
<iframe src="https://laurenzv.github.io/vello_chart/" id="tmil19-vello-charts-frame"></iframe>
70+
71+
</details> -->
72+
73+
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>.
4276

4377
Some things that should be noted here:
4478

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.
4884

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.
5090

5191
### Fearless SIMD
5292

@@ -65,7 +105,7 @@ Thanks to new contributions from Benjamin Saunders we've started on SSE 4.2 supp
65105
Masonry is the widget system developed by Linebender.
66106
It provides a non-opinionated retained widget tree, designed as a base layer for high-level GUI frameworks.
67107

68-
<!-- TODO: Trim again? -->
108+
<!-- TODO: Maybe trim again? -->
69109
- [xilem#1077][]: Added the accessibility integration for VirtualScroll.
70110
- [xilem#1096][]: Improved the default styles in Masonry, by Marco Melorio.
71111
- [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
85125
- [xilem#1248][]: Make all widget associated properties be stored in the same arena.
86126
- [xilem#1253][]: Let Masonry's button have any, by Nixon.
87127

88-
<!-- TODO: Screenshot for xilem#1096? -->
89-
90128
<figure>
91129

92130
<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.">
@@ -111,7 +149,18 @@ Our work on Placehero, which is the working name for our Mastodon client example
111149
- [xilem#1220][], [xilem#1256][]: Use the environment system for avatars in Placehero.
112150
- [xilem#1257][]: Avoid per-frame potential allocations in views with multiple children (i.e. Flex, Grid).
113151

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>.
161+
162+
</figcaption>
163+
</figure>
115164

116165
## Anymore
117166

0 commit comments

Comments
 (0)