-
Notifications
You must be signed in to change notification settings - Fork 5.1k
Description
As more applications target .Net in the Browser there is a growing demand to support workloads that require additional performance. The .NET5 browser-wasm runtime supports only interpreted mode and can considerably underperform in performance-sensitive code paths. Large performance gains can be realized by compiling the code ahead of time (AOT) rather than interpreting it.
Performance, size, and other considerations dictate that the AOT compilation step should run after assemblies have been aggressively trimmed. This will require that additional tooling be installed on the developer's machine when targeting AOT, including native and managed cross compilers appropriate for their host environment (emscripten SDK and mono AOT).
AOT compilation also typically generates much less compact code than the original IL. To avoid prohibitively large assets, we will likely need to offer a mode of operation where performance critical code is AOT compiled and the remaining code is interpreted.
Work Items
- Common Tooling [P0]
- Build tasks for AOT publishing
- Workload pack for AOT cross compilers (Windows and macOS)
- Workload pack for AOT tasks and msbuild integration
- Workload pack for emscripten tooling
- Full AOT mode [P0]
- Exception filters handling in WebAssembly AOT Exception filters handling in WebAssembly AOT #46927
- Unmanaged Callers Only fixes
- Native dependencies linking
- Mixed (+PGO) mode [P1] - CUT from .NET 6
- Profile generation and editing
- Produce and consume Wasm AOT profiles
- Tooling to tweak the profiles (aprofutil)
- Testing [P0]
- Reducing Managed Libraries Testing Infrastructure Size Reducing Managed Libraries Testing Infrastructure Size #45126
- Passing Libraries Tests
- Passing Runtime Tests [Mono] Tracking runtime test failures on Mono Interpreter backed WASM #44663
- Add Blazor Functional Tests Convert MonoVM Samples into Functional Tests #43865
- Integrate AoT with Blazor [P0] Blazor WebAssembly AOT compilation aspnetcore#5466