Browse Source

Benchmark for creating Calendars.

Dariusz Komosinski 5 years ago
parent
commit
ffe0020698

+ 43 - 0
tests/Avalonia.Benchmarks/Layout/CalendarBenchmark.cs

@@ -0,0 +1,43 @@
+using System;
+using System.Runtime.CompilerServices;
+using Avalonia.Controls;
+using Avalonia.UnitTests;
+using BenchmarkDotNet.Attributes;
+
+namespace Avalonia.Benchmarks.Layout
+{
+    [MemoryDiagnoser, InProcess, IterationCount(16)]
+    public class CalendarBenchmark : IDisposable
+    {
+        private readonly IDisposable _app;
+        private readonly TestRoot _root;
+        
+        public CalendarBenchmark()
+        {
+            _app = UnitTestApplication.Start(TestServices.StyledWindow.With(renderInterface: new NullRenderingPlatform(), threadingInterface: new NullThreadingPlatform()));
+
+            _root = new TestRoot(true, null)
+            {
+                Renderer = new NullRenderer(),
+            };
+
+            _root.LayoutManager.ExecuteInitialLayoutPass(_root);
+        }
+
+        [Benchmark]
+        [MethodImpl(MethodImplOptions.NoInlining)]
+        public void CreateCalendar()
+        {
+            var calendar = new Calendar();
+
+            _root.Child = calendar;
+
+            _root.LayoutManager.ExecuteLayoutPass();
+        }
+
+        public void Dispose()
+        {
+            _app.Dispose();
+        }
+    }
+}

+ 36 - 0
tests/Avalonia.Benchmarks/NullFormattedTextImpl.cs

@@ -0,0 +1,36 @@
+using System;
+using System.Collections.Generic;
+using Avalonia.Media;
+using Avalonia.Platform;
+
+namespace Avalonia.Benchmarks
+{
+    internal class NullFormattedTextImpl : IFormattedTextImpl
+    {
+        public Size Constraint { get; }
+
+        public Rect Bounds { get; }
+
+        public string Text { get; }
+
+        public IEnumerable<FormattedTextLine> GetLines()
+        {
+            throw new NotImplementedException();
+        }
+
+        public TextHitTestResult HitTestPoint(Point point)
+        {
+            throw new NotImplementedException();
+        }
+
+        public Rect HitTestTextPosition(int index)
+        {
+            throw new NotImplementedException();
+        }
+
+        public IEnumerable<Rect> HitTestTextRange(int index, int length)
+        {
+            throw new NotImplementedException();
+        }
+    }
+}

+ 78 - 0
tests/Avalonia.Benchmarks/NullRenderingPlatform.cs

@@ -0,0 +1,78 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using Avalonia.Media;
+using Avalonia.Platform;
+using Avalonia.UnitTests;
+
+namespace Avalonia.Benchmarks
+{
+    internal class NullRenderingPlatform : IPlatformRenderInterface
+    {
+        public IFormattedTextImpl CreateFormattedText(string text, Typeface typeface, double fontSize, TextAlignment textAlignment,
+            TextWrapping wrapping, Size constraint, IReadOnlyList<FormattedTextStyleSpan> spans)
+        {
+            return new NullFormattedTextImpl();
+        }
+
+        public IGeometryImpl CreateEllipseGeometry(Rect rect)
+        {
+            throw new NotImplementedException();
+        }
+
+        public IGeometryImpl CreateLineGeometry(Point p1, Point p2)
+        {
+            throw new NotImplementedException();
+        }
+
+        public IGeometryImpl CreateRectangleGeometry(Rect rect)
+        {
+            throw new NotImplementedException();
+        }
+
+        public IStreamGeometryImpl CreateStreamGeometry()
+        {
+            return new MockStreamGeometryImpl();
+        }
+
+        public IRenderTarget CreateRenderTarget(IEnumerable<object> surfaces)
+        {
+            throw new NotImplementedException();
+        }
+
+        public IRenderTargetBitmapImpl CreateRenderTargetBitmap(PixelSize size, Vector dpi)
+        {
+            throw new NotImplementedException();
+        }
+
+        public IWriteableBitmapImpl CreateWriteableBitmap(PixelSize size, Vector dpi, PixelFormat? format = null)
+        {
+            throw new NotImplementedException();
+        }
+
+        public IBitmapImpl LoadBitmap(string fileName)
+        {
+            throw new NotImplementedException();
+        }
+
+        public IBitmapImpl LoadBitmap(Stream stream)
+        {
+            throw new NotImplementedException();
+        }
+
+        public IBitmapImpl LoadBitmap(PixelFormat format, IntPtr data, PixelSize size, Vector dpi, int stride)
+        {
+            throw new NotImplementedException();
+        }
+
+        public IFontManagerImpl CreateFontManager()
+        {
+            return new MockFontManagerImpl();
+        }
+
+        public IGlyphRunImpl CreateGlyphRun(GlyphRun glyphRun, out double width)
+        {
+            throw new NotImplementedException();
+        }
+    }
+}

+ 28 - 0
tests/Avalonia.Benchmarks/NullThreadingPlatform.cs

@@ -0,0 +1,28 @@
+using System;
+using System.Reactive.Disposables;
+using System.Threading;
+using Avalonia.Platform;
+using Avalonia.Threading;
+
+namespace Avalonia.Benchmarks
+{
+    internal class NullThreadingPlatform : IPlatformThreadingInterface
+    {
+        public void RunLoop(CancellationToken cancellationToken)
+        {
+        }
+
+        public IDisposable StartTimer(DispatcherPriority priority, TimeSpan interval, Action tick)
+        {
+            return Disposable.Empty;
+        }
+
+        public void Signal(DispatcherPriority priority)
+        {
+        }
+
+        public bool CurrentThreadIsLoopThread => true;
+
+        public event Action<DispatcherPriority?> Signaled;
+    }
+}