Skip to content

Commit

Permalink
Added benchmark for fluent RepeatButton.
Browse files Browse the repository at this point in the history
As that's where #5027 was showing up most.
  • Loading branch information
grokys committed Nov 18, 2020
1 parent 34b5f07 commit 7469597
Show file tree
Hide file tree
Showing 3 changed files with 76 additions and 1 deletion.
1 change: 1 addition & 0 deletions tests/Avalonia.Benchmarks/Avalonia.Benchmarks.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
<ProjectReference Include="..\..\src\Avalonia.Input\Avalonia.Input.csproj" />
<ProjectReference Include="..\..\src\Avalonia.Interactivity\Avalonia.Interactivity.csproj" />
<ProjectReference Include="..\..\src\Avalonia.Layout\Avalonia.Layout.csproj" />
<ProjectReference Include="..\..\src\Avalonia.Themes.Fluent\Avalonia.Themes.Fluent.csproj" />
<ProjectReference Include="..\..\src\Avalonia.Visuals\Avalonia.Visuals.csproj" />
<ProjectReference Include="..\..\src\Avalonia.Styling\Avalonia.Styling.csproj" />
<ProjectReference Include="..\..\src\Avalonia.Themes.Default\Avalonia.Themes.Default.csproj" />
Expand Down
74 changes: 74 additions & 0 deletions tests/Avalonia.Benchmarks/Themes/FluentBenchmark.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
using System;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
using Avalonia.Markup.Xaml.Styling;
using Avalonia.Platform;
using Avalonia.Shared.PlatformSupport;
using Avalonia.Styling;
using Avalonia.UnitTests;
using BenchmarkDotNet.Attributes;
using Moq;

namespace Avalonia.Benchmarks.Themes
{
[MemoryDiagnoser]
public class FluentBenchmark
{
private readonly IDisposable _app;
private readonly TestRoot _root;

public FluentBenchmark()
{
_app = CreateApp();
_root = new TestRoot(true, null)
{
Renderer = new NullRenderer()
};

_root.LayoutManager.ExecuteInitialLayoutPass();
}

public void Dispose()
{
_app.Dispose();
}

[Benchmark]
public void RepeatButton()
{
var button = new RepeatButton();
_root.Child = button;
_root.LayoutManager.ExecuteLayoutPass();
}

private static IDisposable CreateApp()
{
var services = new TestServices(
assetLoader: new AssetLoader(),
globalClock: new MockGlobalClock(),
platform: new AppBuilder().RuntimePlatform,
renderInterface: new MockPlatformRenderInterface(),
standardCursorFactory: Mock.Of<IStandardCursorFactory>(),
styler: new Styler(),
theme: () => LoadFluentTheme(),
threadingInterface: new NullThreadingPlatform(),
fontManagerImpl: new MockFontManagerImpl(),
textShaperImpl: new MockTextShaperImpl(),
windowingPlatform: new MockWindowingPlatform());

return UnitTestApplication.Start(services);
}

private static Styles LoadFluentTheme()
{
AssetLoader.RegisterResUriParsers();
return new Styles
{
new StyleInclude(new Uri("avares://Avalonia.Benchmarks"))
{
Source = new Uri("avares://Avalonia.Themes.Fluent/Accents/FluentDark.xaml")
}
};
}
}
}
2 changes: 1 addition & 1 deletion tests/Avalonia.UnitTests/UnitTestApplication.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ public UnitTestApplication() : this(null)
public UnitTestApplication(TestServices services)
{
_services = services ?? new TestServices();
AvaloniaLocator.CurrentMutable.BindToSelf<Application>(this);
RegisterServices();
}

Expand All @@ -36,7 +37,6 @@ public static IDisposable Start(TestServices services = null)
{
var scope = AvaloniaLocator.EnterScope();
var app = new UnitTestApplication(services);
AvaloniaLocator.CurrentMutable.BindToSelf<Application>(app);
Dispatcher.UIThread.UpdateServices();
return Disposable.Create(() =>
{
Expand Down

0 comments on commit 7469597

Please sign in to comment.