Skip to content

[browser] contribute dotnet perf benchmark into JetStream suite #109953

Open
@pavelsavara

Description

@pavelsavara

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.

Metadata

Metadata

Labels

Priority:1Work that is critical for the release, but we could probably ship withoutarch-wasmWebAssembly architecturearea-VM-meta-monoos-browserBrowser variant of arch-wasm

Type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions