-
Notifications
You must be signed in to change notification settings - Fork 14
Add .NET on WebAssembly workload #73
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
✅ Deploy Preview for webkit-jetstream-preview ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
@maraf Thanks for this! A couple of questions:
I think we should probably reduce the number or combine some of these tests so that we're not weighting dotnet too heavily. Right now there are 8 added, which makes it 8 times more important than any other wasm test. I think we've talked about having experimental tests that are not in the main score by default, we could potentially do that here. |
@eqrion Thank you for feedback!
|
Add benchmarks for .NET runtime on WebAssembly.
This PR adds 8 benchmarks that test characteristic WebAssembly code for .NET. Benchmarks don't contain UI manipulations and javascript interop except for the necessary startup.
Flavors
There are 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.
Code samples
RayTracer
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. The UI update part is removed.
Exception handling
.NET uses a two-phase exception handling that is built on top of WasmExceptionHandling.
String
Very common and often used type in .NET codebase.
JSON serialization & deserialization
Very common and often used type in .NET codebase.
Fixes dotnet/runtime#109953