Description
The goal of the benchmark is to test characteristic WebAssembly code for .NET. The benchmark won't contain UI manipulations, javascript interop, and it won't test startup time.
From time to time, we see regressions in microbenchmarks caused by Chrome updates. They are tracked in #96444. The goal of the benchmark is to minimize them.
The repository with JetStream benchmarks is https://browserbench.org/JetStream/ & https://github.com/WebKit/JetStream. The benchmark should finish under 10s on average laptop.
Flavors
We will provide two flavors of the same benchmark code.
1. Interpreter
The default mode for running .NET (Mono runtime) on WebAssembly is using an interpreter. In this mode .NET assemblies are loaded into WebAssembly memory and IL interpreter interprets the code in a loop.
2. AOT
The second mode Mono runtime on WebAssembly operates in is mixed AOT. It is a mixture of AOTed code and fallbacks to interpreter for scenarios that are not supported by the AOT compiler.
Candidates
RayTracer 20-30 frames
Source code at https://github.com/pavelsavara/dotnet-wasm-raytracer. It computes a 3D scene in memory. It is a computation heavy algorithm that stretches the performance of interpreter loop. We won't do the UI update part. Computing 20-30 frames.
Exception handling
.NET uses a two-phase exception handling that is built on top of WasmExceptionHandling.
String & Span
The two are common and very often used types in .NET codebase.