3 changed files with 68 additions and 1 deletions
@ -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); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue