Browse Source

Benchmark for creating Calendars.

pull/3543/head
Dariusz Komosinski 6 years ago
parent
commit
ffe0020698
  1. 43
      tests/Avalonia.Benchmarks/Layout/CalendarBenchmark.cs
  2. 36
      tests/Avalonia.Benchmarks/NullFormattedTextImpl.cs
  3. 78
      tests/Avalonia.Benchmarks/NullRenderingPlatform.cs
  4. 28
      tests/Avalonia.Benchmarks/NullThreadingPlatform.cs

43
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
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
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
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;
}
}
Loading…
Cancel
Save