Browse Source

Merge branch 'benchmarks' into fixup-layout-manager

pull/1021/head
Steven Kirk 9 years ago
parent
commit
9da4e5b112
  1. 3
      tests/Avalonia.Benchmarks/Avalonia.Benchmarks.csproj
  2. 65
      tests/Avalonia.Benchmarks/Layout/Measure.cs
  3. 1
      tests/Avalonia.Benchmarks/Styling/ApplyStyling.cs

3
tests/Avalonia.Benchmarks/Avalonia.Benchmarks.csproj

@ -49,6 +49,7 @@
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Layout\Measure.cs" />
<Compile Include="Styling\ApplyStyling.cs" />
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
@ -100,7 +101,7 @@
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<ItemGroup>
<PackageReference Include="BenchmarkDotNet" Version="0.9.2" />
<PackageReference Include="BenchmarkDotNet" Version="0.10.8" />
</ItemGroup>
<Import Project="$(MSBuildThisFileDirectory)..\..\src\Shared\nuget.workaround.targets" />
</Project>

65
tests/Avalonia.Benchmarks/Layout/Measure.cs

@ -0,0 +1,65 @@
using System;
using System.Collections.Generic;
using Avalonia.Controls;
using Avalonia.Layout;
using Avalonia.UnitTests;
using BenchmarkDotNet.Attributes;
namespace Avalonia.Benchmarks.Layout
{
[MemoryDiagnoser]
public class Measure : IDisposable
{
private IDisposable _app;
private TestRoot root;
private List<Control> controls = new List<Control>();
public Measure()
{
_app = UnitTestApplication.Start(TestServices.RealLayoutManager);
var panel = new StackPanel();
root = new TestRoot { Child = panel };
controls.Add(panel);
CreateChildren(panel, 3, 5);
LayoutManager.Instance.ExecuteInitialLayoutPass(root);
}
public void Dispose()
{
_app.Dispose();
}
[Benchmark]
public void Remeasure_Half()
{
var random = new Random(1);
foreach (var control in controls)
{
if (random.Next(2) == 0)
{
control.InvalidateMeasure();
}
}
LayoutManager.Instance.ExecuteLayoutPass();
}
private void CreateChildren(IPanel parent, int childCount, int iterations)
{
for (var i = 0; i < childCount; ++i)
{
var control = new StackPanel();
parent.Children.Add(control);
if (iterations > 0)
{
CreateChildren(control, childCount, iterations - 1);
}
controls.Add(control);
}
}
}
}

1
tests/Avalonia.Benchmarks/Styling/ApplyStyling.cs

@ -11,6 +11,7 @@ using Avalonia.VisualTree;
namespace Avalonia.Benchmarks.Styling
{
[MemoryDiagnoser]
public class ApplyStyling : IDisposable
{
private IDisposable _app;

Loading…
Cancel
Save