|
@@ -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")
|
|
|
+ }
|
|
|
+ };
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|