Browse Source

Added TemplateBinding benchmarks.

pull/13970/head
Steven Kirk 3 years ago
parent
commit
e7d236e6ed
  1. 7
      tests/Avalonia.Benchmarks/Data/Binding_Setup.cs
  2. 4
      tests/Avalonia.Benchmarks/Data/Binding_Values.cs
  3. 46
      tests/Avalonia.Benchmarks/Data/TemplateBinding_Setup.cs
  4. 50
      tests/Avalonia.Benchmarks/Data/TemplateBinding_Values.cs

7
tests/Avalonia.Benchmarks/Data/Binding_Setup.cs

@ -16,20 +16,19 @@ public class Binding_Setup
} }
[Benchmark] [Benchmark]
public void DataContext_Property_OneWay() public void Setup_DataContext_Property_Binding_OneWay()
{ {
var target = _target; var target = _target;
var binding = new Binding(nameof(_data.IntValue)); var binding = new Binding(nameof(_data.IntValue));
for (var i = 0; i < 100; ++i) for (var i = 0; i < 100; ++i)
{ {
var d = target.Bind(TestControl.IntValueProperty, binding); using var d = target.Bind(TestControl.IntValueProperty, binding);
d.Dispose();
} }
} }
[Benchmark] [Benchmark]
public void DataContext_Property_TwoWay() public void Setup_DataContext_Property_Binding_TwoWay()
{ {
var target = _target; var target = _target;
var binding = new Binding(nameof(_data.IntValue), mode: BindingMode.TwoWay); var binding = new Binding(nameof(_data.IntValue), mode: BindingMode.TwoWay);

4
tests/Avalonia.Benchmarks/Data/Binding_Values.cs

@ -16,7 +16,7 @@ public class Binding_Values
} }
[Benchmark] [Benchmark]
public void DataContext_Property_OneWay() public void Produce_DataContext_Property_Binding_Value_OneWay()
{ {
_data.IntValue = -1; _data.IntValue = -1;
@ -31,7 +31,7 @@ public class Binding_Values
} }
[Benchmark] [Benchmark]
public void DataContext_Property_TwoWay() public void Produce_DataContext_Property_Binding_Value_TwoWay()
{ {
_data.IntValue = -1; _data.IntValue = -1;

46
tests/Avalonia.Benchmarks/Data/TemplateBinding_Setup.cs

@ -0,0 +1,46 @@
using Avalonia.Controls;
using Avalonia.Data;
using BenchmarkDotNet.Attributes;
namespace Avalonia.Benchmarks.Data;
[MemoryDiagnoser]
public class TemplateBinding_Setup
{
private Decorator _target = new();
private Control _templatedParent = new();
public TemplateBinding_Setup()
{
_target.TemplatedParent = _templatedParent;
_templatedParent.Tag = "parentTag";
}
[Benchmark]
public void Setup_TemplateBinding_OneWay()
{
var target = _target;
var binding = new TemplateBinding(Control.TagProperty);
for (var i = 0; i < 100; ++i)
{
// Explicit cast to IBinding is required to prevent the IObservable<object?>
// overload being selected.
using var d = target.Bind(Control.TagProperty, (IBinding)binding);
}
}
[Benchmark]
public void Setup_TemplateBinding_TwoWay()
{
var target = _target;
var binding = new TemplateBinding(Control.TagProperty) { Mode = BindingMode.TwoWay };
for (var i = 0; i < 100; ++i)
{
// Explicit cast to IBinding is required to prevent the IObservable<object?>
// overload being selected.
using var d = target.Bind(Control.TagProperty, (IBinding)binding);
}
}
}

50
tests/Avalonia.Benchmarks/Data/TemplateBinding_Values.cs

@ -0,0 +1,50 @@
using Avalonia.Controls;
using Avalonia.Data;
using BenchmarkDotNet.Attributes;
namespace Avalonia.Benchmarks.Data;
[MemoryDiagnoser]
public class TemplateBinding_Values
{
private Decorator _target = new();
private Control _templatedParent = new();
public TemplateBinding_Values()
{
_target.TemplatedParent = _templatedParent;
}
[Benchmark]
public void Produce_TemplateBinding_Value_OneWay()
{
var target = _target;
var binding = new TemplateBinding(Control.TagProperty);
// Explicit cast to IBinding is required to prevent the IObservable<object?>
// overload being selected.
using var d = target.Bind(Control.TagProperty, (IBinding)binding);
for (var i = 0; i < 100; ++i)
{
_templatedParent.Tag = i;
}
}
[Benchmark]
public void Produce_TemplateBinding_Value_TwoWay()
{
var target = _target;
var binding = new TemplateBinding(Control.TagProperty) { Mode = BindingMode.TwoWay };
// Explicit cast to IBinding is required to prevent the IObservable<object?>
// overload being selected.
using var d = target.Bind(Control.TagProperty, (IBinding)binding);
for (var i = 0; i < 100; ++i)
{
_templatedParent.Tag = i * 2;
target.SetCurrentValue(Control.TagProperty, (i * 2) + 1);
}
}
}
Loading…
Cancel
Save