From 82e6c605a92042477f4ac44bc8ca2039d29f0b6f Mon Sep 17 00:00:00 2001 From: Pavel Savara Date: Fri, 13 Oct 2023 18:55:32 +0200 Subject: [PATCH] [browser] benchmark for appstart with memory snapshot (#93477) --- .../sample/wasm/blazor-frame/wwwroot/frame.js | 13 ++++++- .../wasm/blazor-frame/wwwroot/index.html | 2 +- .../sample/wasm/browser-bench/AppStart.cs | 39 ++++++++++++++++--- .../sample/wasm/browser-frame/wwwroot/main.js | 4 ++ 4 files changed, 50 insertions(+), 8 deletions(-) diff --git a/src/mono/sample/wasm/blazor-frame/wwwroot/frame.js b/src/mono/sample/wasm/blazor-frame/wwwroot/frame.js index 322d3eb766b173..4e8403bdc7b8e4 100644 --- a/src/mono/sample/wasm/blazor-frame/wwwroot/frame.js +++ b/src/mono/sample/wasm/blazor-frame/wwwroot/frame.js @@ -29,10 +29,21 @@ try { window.muteErrors = () => { mute = true; } + + const urlParams = new URLSearchParams(window.location.search); + const myParam = urlParams.get('memorySnapshot'); + + Blazor.start({ + configureRuntime: dotnet => { + if (myParam === "true") { + dotnet.withStartupMemoryCache(true); + } + } + }); + } catch (err) { if (!mute) { console.error(`WASM ERROR ${err}`); } - exit(1, err); } diff --git a/src/mono/sample/wasm/blazor-frame/wwwroot/index.html b/src/mono/sample/wasm/blazor-frame/wwwroot/index.html index f2ee44e19a7ebc..581f46b23a663a 100644 --- a/src/mono/sample/wasm/blazor-frame/wwwroot/index.html +++ b/src/mono/sample/wasm/blazor-frame/wwwroot/index.html @@ -26,7 +26,7 @@ Reload 🗙 - + diff --git a/src/mono/sample/wasm/browser-bench/AppStart.cs b/src/mono/sample/wasm/browser-bench/AppStart.cs index 7acd192e3203d1..045449c2522a62 100644 --- a/src/mono/sample/wasm/browser-bench/AppStart.cs +++ b/src/mono/sample/wasm/browser-bench/AppStart.cs @@ -28,9 +28,11 @@ public AppStartTask() new BlazorReachManaged(), new BlazorFirstUI(), new BlazorReachManagedCold(), + new BlazorReachManagedSnapshot(), new BrowserPageShow(), new BrowserReachManaged(), new BrowserReachManagedCold(), + new BrowserReachManagedSnapshot(), }; } @@ -77,14 +79,14 @@ public override async Task RunStepAsync() abstract class BlazorAppStartMeasurement : BenchTask.Measurement { protected readonly string urlBase = "blazor-template/"; - protected readonly string framePage = ""; + protected virtual string FramePage => ""; public override async Task IsEnabled() { using var client = new HttpClient(); try { - var url = $"{MainApp.Origin()}/{urlBase}{framePage}"; + var url = $"{MainApp.Origin()}/{urlBase}{FramePage}"; await client.GetStringAsync(url); } catch @@ -97,7 +99,7 @@ public override async Task IsEnabled() public override Task BeforeBatch() { - MainApp.SetFramePage(framePage); + MainApp.SetFramePage(FramePage); return Task.CompletedTask; } @@ -127,6 +129,18 @@ public override async Task RunStepAsync() } } + class BlazorReachManagedSnapshot : BlazorAppStartMeasurement + { + public override string Name => "Blazor Reach managed snapshot"; + public override int InitialSamples => 3; + public override bool HasRunStepAsync => true; + + public override async Task RunStepAsync() + { + await MainApp.FrameReachedManaged(null, urlBase); + } + } + class BlazorFirstUI : BlazorAppStartMeasurement { public override string Name => "Blazor First UI"; @@ -155,14 +169,14 @@ public override async Task RunStepAsync() abstract class BrowserAppStartMeasurement : BenchTask.Measurement { protected readonly string urlBase = "browser-template/"; - protected readonly string framePage = ""; + protected virtual string FramePage => ""; public override async Task IsEnabled() { using var client = new HttpClient(); try { - var url = $"{MainApp.Origin()}/{urlBase}{framePage}"; + var url = $"{MainApp.Origin()}/{urlBase}{FramePage}"; await client.GetStringAsync(url); } catch @@ -175,7 +189,7 @@ public override async Task IsEnabled() public override Task BeforeBatch() { - MainApp.SetFramePage(framePage); + MainApp.SetFramePage(FramePage); return Task.CompletedTask; } @@ -205,6 +219,19 @@ public override async Task RunStepAsync() } } + class BrowserReachManagedSnapshot : BrowserAppStartMeasurement + { + public override string Name => "Browser Reach managed snapshot"; + public override int InitialSamples => 3; + public override bool HasRunStepAsync => true; + protected override string FramePage => "?memorySnapshot=true"; + + public override async Task RunStepAsync() + { + await MainApp.FrameReachedManaged(null, urlBase); + } + } + class BrowserReachManagedCold : BrowserAppStartMeasurement { public override string Name => "Browser Reach managed cold"; diff --git a/src/mono/sample/wasm/browser-frame/wwwroot/main.js b/src/mono/sample/wasm/browser-frame/wwwroot/main.js index a073fc9cf70327..25d884bca36200 100644 --- a/src/mono/sample/wasm/browser-frame/wwwroot/main.js +++ b/src/mono/sample/wasm/browser-frame/wwwroot/main.js @@ -3,8 +3,12 @@ import { dotnet } from './_framework/dotnet.js' +const urlParams = new URLSearchParams(window.location.search); +const myParam = urlParams.get('memorySnapshot'); + const { setModuleImports, getAssemblyExports, getConfig } = await dotnet .withDiagnosticTracing(false) + .withStartupMemoryCache(myParam === "true") .withApplicationArgumentsFromQuery() .create();