csharpc-sharpdotnetxamlavaloniauicross-platformcross-platform-xamlavaloniaguimulti-platformuser-interfacedotnetcore
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
78 lines
2.1 KiB
78 lines
2.1 KiB
using System;
|
|
using System.Collections.Generic;
|
|
using System.Diagnostics;
|
|
using System.Reactive.Linq;
|
|
using System.Reactive.Subjects;
|
|
using System.Runtime.CompilerServices;
|
|
using Avalonia.Animation;
|
|
using Avalonia.Animation.Animators;
|
|
using Avalonia.Layout;
|
|
using BenchmarkDotNet.Attributes;
|
|
|
|
namespace Avalonia.Benchmarks.Animations
|
|
{
|
|
[MemoryDiagnoser]
|
|
public class TransitionBenchmark
|
|
{
|
|
private readonly AddValueObserver _observer;
|
|
private readonly List<double> _producedValues;
|
|
private readonly Subject<double> _timeProducer;
|
|
private readonly DoubleTransition _transition;
|
|
|
|
public TransitionBenchmark()
|
|
{
|
|
_transition = new DoubleTransition
|
|
{
|
|
Duration = TimeSpan.FromMilliseconds(FrameCount), Property = Layoutable.WidthProperty
|
|
};
|
|
|
|
_timeProducer = new Subject<double>();
|
|
_producedValues = new List<double>(FrameCount);
|
|
|
|
_observer = new AddValueObserver(_producedValues);
|
|
}
|
|
|
|
[Params(10, 100)] public int FrameCount { get; set; }
|
|
|
|
[Benchmark]
|
|
[MethodImpl(MethodImplOptions.NoInlining)]
|
|
public void NewTransition()
|
|
{
|
|
var transitionObs = _transition.DoTransition(_timeProducer, 0, 1);
|
|
|
|
_producedValues.Clear();
|
|
|
|
using var transitionSub = transitionObs.Subscribe(_observer);
|
|
|
|
for (int i = 0; i < FrameCount; i++)
|
|
{
|
|
_timeProducer.OnNext(i / 1000d);
|
|
}
|
|
|
|
Debug.Assert(_producedValues.Count == FrameCount);
|
|
}
|
|
|
|
private class AddValueObserver : IObserver<double>
|
|
{
|
|
private readonly List<double> _values;
|
|
|
|
public AddValueObserver(List<double> values)
|
|
{
|
|
_values = values;
|
|
}
|
|
|
|
public void OnCompleted()
|
|
{
|
|
}
|
|
|
|
public void OnError(Exception error)
|
|
{
|
|
}
|
|
|
|
public void OnNext(double value)
|
|
{
|
|
_values.Add(value);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|