Skip to content

Commit

Permalink
[browser] benchmark for appstart with memory snapshot (#93477)
Browse files Browse the repository at this point in the history
  • Loading branch information
pavelsavara authored Oct 13, 2023
1 parent bcec497 commit 82e6c60
Show file tree
Hide file tree
Showing 4 changed files with 50 additions and 8 deletions.
13 changes: 12 additions & 1 deletion src/mono/sample/wasm/blazor-frame/wwwroot/frame.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,21 @@ try {
window.muteErrors = () => {
mute = true;
}

const urlParams = new URLSearchParams(window.location.search);
const myParam = urlParams.get('memorySnapshot');

Blazor.start({

This comment has been minimized.

Copy link
@radekdoulik

radekdoulik Oct 16, 2023

Member

Looks like there is large penalty for autostart="false".

Screenshot 2023-10-16 at 13 44 32

That can lead to a situation, where we will miss regression in default startup without autostart used, which is the default case.

@pavelsavara could you make the use of autostart attribute and Blazor.start call optional and use it only for the memory snapshot measurement?

This comment has been minimized.

Copy link
@pavelsavara

pavelsavara Oct 16, 2023

Author Member

autostart is relevant for Blazor template only and this graph is browser template.

This comment has been minimized.

Copy link
@pavelsavara

pavelsavara Oct 16, 2023

Author Member

Perhaps this will help #93548

This comment has been minimized.

Copy link
@pavelsavara

pavelsavara Oct 16, 2023

Author Member

I also wonder how it could only make difference for AOT in this graph

configureRuntime: dotnet => {
if (myParam === "true") {
dotnet.withStartupMemoryCache(true);
}
}
});

}
catch (err) {
if (!mute) {
console.error(`WASM ERROR ${err}`);
}
exit(1, err);
}
2 changes: 1 addition & 1 deletion src/mono/sample/wasm/blazor-frame/wwwroot/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
<a href="" class="reload">Reload</a>
<a class="dismiss">🗙</a>
</div>
<script src="./_framework/blazor.webassembly.js"></script>
<script type="module" src="_framework/blazor.webassembly.js" autostart="false"></script>
<script type="module" src="frame.js"></script>
</body>

Expand Down
39 changes: 33 additions & 6 deletions src/mono/sample/wasm/browser-bench/AppStart.cs
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,11 @@ public AppStartTask()
new BlazorReachManaged(),
new BlazorFirstUI(),
new BlazorReachManagedCold(),
new BlazorReachManagedSnapshot(),
new BrowserPageShow(),
new BrowserReachManaged(),
new BrowserReachManagedCold(),
new BrowserReachManagedSnapshot(),
};
}

Expand Down Expand Up @@ -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<bool> IsEnabled()
{
using var client = new HttpClient();
try
{
var url = $"{MainApp.Origin()}/{urlBase}{framePage}";
var url = $"{MainApp.Origin()}/{urlBase}{FramePage}";
await client.GetStringAsync(url);
}
catch
Expand All @@ -97,7 +99,7 @@ public override async Task<bool> IsEnabled()

public override Task BeforeBatch()
{
MainApp.SetFramePage(framePage);
MainApp.SetFramePage(FramePage);

return Task.CompletedTask;
}
Expand Down Expand Up @@ -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";
Expand Down Expand Up @@ -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<bool> IsEnabled()
{
using var client = new HttpClient();
try
{
var url = $"{MainApp.Origin()}/{urlBase}{framePage}";
var url = $"{MainApp.Origin()}/{urlBase}{FramePage}";
await client.GetStringAsync(url);
}
catch
Expand All @@ -175,7 +189,7 @@ public override async Task<bool> IsEnabled()

public override Task BeforeBatch()
{
MainApp.SetFramePage(framePage);
MainApp.SetFramePage(FramePage);

return Task.CompletedTask;
}
Expand Down Expand Up @@ -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";
Expand Down
4 changes: 4 additions & 0 deletions src/mono/sample/wasm/browser-frame/wwwroot/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -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();

Expand Down

0 comments on commit 82e6c60

Please sign in to comment.