Browse Source

Added benchmark for fluent RepeatButton.

As that's where #5027 was showing up most.
pull/5070/head
Steven Kirk 6 years ago
parent
commit
7469597712
  1. 1
      tests/Avalonia.Benchmarks/Avalonia.Benchmarks.csproj
  2. 74
      tests/Avalonia.Benchmarks/Themes/FluentBenchmark.cs
  3. 2
      tests/Avalonia.UnitTests/UnitTestApplication.cs

1
tests/Avalonia.Benchmarks/Avalonia.Benchmarks.csproj

@ -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" />

74
tests/Avalonia.Benchmarks/Themes/FluentBenchmark.cs

@ -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
tests/Avalonia.UnitTests/UnitTestApplication.cs

@ -25,6 +25,7 @@ namespace Avalonia.UnitTests
public UnitTestApplication(TestServices services)
{
_services = services ?? new TestServices();
AvaloniaLocator.CurrentMutable.BindToSelf<Application>(this);
RegisterServices();
}
@ -36,7 +37,6 @@ namespace Avalonia.UnitTests
{
var scope = AvaloniaLocator.EnterScope();
var app = new UnitTestApplication(services);
AvaloniaLocator.CurrentMutable.BindToSelf<Application>(app);
Dispatcher.UIThread.UpdateServices();
return Disposable.Create(() =>
{

Loading…
Cancel
Save