Skip to content

Commit 82e6c60

Browse files
authored
[browser] benchmark for appstart with memory snapshot (#93477)
1 parent bcec497 commit 82e6c60

File tree

4 files changed

+50
-8
lines changed

4 files changed

+50
-8
lines changed

src/mono/sample/wasm/blazor-frame/wwwroot/frame.js

+12-1
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,21 @@ try {
2929
window.muteErrors = () => {
3030
mute = true;
3131
}
32+
33+
const urlParams = new URLSearchParams(window.location.search);
34+
const myParam = urlParams.get('memorySnapshot');
35+
36+
Blazor.start({
37+
configureRuntime: dotnet => {
38+
if (myParam === "true") {
39+
dotnet.withStartupMemoryCache(true);
40+
}
41+
}
42+
});
43+
3244
}
3345
catch (err) {
3446
if (!mute) {
3547
console.error(`WASM ERROR ${err}`);
3648
}
37-
exit(1, err);
3849
}

src/mono/sample/wasm/blazor-frame/wwwroot/index.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
<a href="" class="reload">Reload</a>
2727
<a class="dismiss">🗙</a>
2828
</div>
29-
<script src="./_framework/blazor.webassembly.js"></script>
29+
<script type="module" src="_framework/blazor.webassembly.js" autostart="false"></script>
3030
<script type="module" src="frame.js"></script>
3131
</body>
3232

src/mono/sample/wasm/browser-bench/AppStart.cs

+33-6
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,11 @@ public AppStartTask()
2828
new BlazorReachManaged(),
2929
new BlazorFirstUI(),
3030
new BlazorReachManagedCold(),
31+
new BlazorReachManagedSnapshot(),
3132
new BrowserPageShow(),
3233
new BrowserReachManaged(),
3334
new BrowserReachManagedCold(),
35+
new BrowserReachManagedSnapshot(),
3436
};
3537
}
3638

@@ -77,14 +79,14 @@ public override async Task RunStepAsync()
7779
abstract class BlazorAppStartMeasurement : BenchTask.Measurement
7880
{
7981
protected readonly string urlBase = "blazor-template/";
80-
protected readonly string framePage = "";
82+
protected virtual string FramePage => "";
8183

8284
public override async Task<bool> IsEnabled()
8385
{
8486
using var client = new HttpClient();
8587
try
8688
{
87-
var url = $"{MainApp.Origin()}/{urlBase}{framePage}";
89+
var url = $"{MainApp.Origin()}/{urlBase}{FramePage}";
8890
await client.GetStringAsync(url);
8991
}
9092
catch
@@ -97,7 +99,7 @@ public override async Task<bool> IsEnabled()
9799

98100
public override Task BeforeBatch()
99101
{
100-
MainApp.SetFramePage(framePage);
102+
MainApp.SetFramePage(FramePage);
101103

102104
return Task.CompletedTask;
103105
}
@@ -127,6 +129,18 @@ public override async Task RunStepAsync()
127129
}
128130
}
129131

132+
class BlazorReachManagedSnapshot : BlazorAppStartMeasurement
133+
{
134+
public override string Name => "Blazor Reach managed snapshot";
135+
public override int InitialSamples => 3;
136+
public override bool HasRunStepAsync => true;
137+
138+
public override async Task RunStepAsync()
139+
{
140+
await MainApp.FrameReachedManaged(null, urlBase);
141+
}
142+
}
143+
130144
class BlazorFirstUI : BlazorAppStartMeasurement
131145
{
132146
public override string Name => "Blazor First UI";
@@ -155,14 +169,14 @@ public override async Task RunStepAsync()
155169
abstract class BrowserAppStartMeasurement : BenchTask.Measurement
156170
{
157171
protected readonly string urlBase = "browser-template/";
158-
protected readonly string framePage = "";
172+
protected virtual string FramePage => "";
159173

160174
public override async Task<bool> IsEnabled()
161175
{
162176
using var client = new HttpClient();
163177
try
164178
{
165-
var url = $"{MainApp.Origin()}/{urlBase}{framePage}";
179+
var url = $"{MainApp.Origin()}/{urlBase}{FramePage}";
166180
await client.GetStringAsync(url);
167181
}
168182
catch
@@ -175,7 +189,7 @@ public override async Task<bool> IsEnabled()
175189

176190
public override Task BeforeBatch()
177191
{
178-
MainApp.SetFramePage(framePage);
192+
MainApp.SetFramePage(FramePage);
179193

180194
return Task.CompletedTask;
181195
}
@@ -205,6 +219,19 @@ public override async Task RunStepAsync()
205219
}
206220
}
207221

222+
class BrowserReachManagedSnapshot : BrowserAppStartMeasurement
223+
{
224+
public override string Name => "Browser Reach managed snapshot";
225+
public override int InitialSamples => 3;
226+
public override bool HasRunStepAsync => true;
227+
protected override string FramePage => "?memorySnapshot=true";
228+
229+
public override async Task RunStepAsync()
230+
{
231+
await MainApp.FrameReachedManaged(null, urlBase);
232+
}
233+
}
234+
208235
class BrowserReachManagedCold : BrowserAppStartMeasurement
209236
{
210237
public override string Name => "Browser Reach managed cold";

src/mono/sample/wasm/browser-frame/wwwroot/main.js

+4
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,12 @@
33

44
import { dotnet } from './_framework/dotnet.js'
55

6+
const urlParams = new URLSearchParams(window.location.search);
7+
const myParam = urlParams.get('memorySnapshot');
8+
69
const { setModuleImports, getAssemblyExports, getConfig } = await dotnet
710
.withDiagnosticTracing(false)
11+
.withStartupMemoryCache(myParam === "true")
812
.withApplicationArgumentsFromQuery()
913
.create();
1014

0 commit comments

Comments
 (0)