Browse Source

Apply optimization to Pen as well.

pull/7372/head
Dariusz Komosiński 4 years ago
parent
commit
832afd2b46
  1. 15
      src/Avalonia.Base/Media/Pen.cs
  2. 4
      tests/Avalonia.Benchmarks/Visuals/VisualAffectsRenderBenchmarks.cs

15
src/Avalonia.Base/Media/Pen.cs

@ -48,7 +48,7 @@ namespace Avalonia.Media
private EventHandler? _invalidated;
private IAffectsRender? _subscribedToBrush;
private IAffectsRender? _subscribedToDashes;
private WeakEventSubscriber<EventArgs>? _weakSubscriber;
private TargetWeakEventSubscriber<Pen, EventArgs>? _weakSubscriber;
/// <summary>
/// Initializes a new instance of the <see cref="Pen"/> class.
@ -217,13 +217,14 @@ namespace Avalonia.Media
{
if (_weakSubscriber == null)
{
_weakSubscriber = new WeakEventSubscriber<EventArgs>();
_weakSubscriber.Event += (_, ev, __) =>
{
if (ev == InvalidatedWeakEvent)
_invalidated?.Invoke(this, EventArgs.Empty);
};
_weakSubscriber = new TargetWeakEventSubscriber<Pen, EventArgs>(
this, static (target, _, ev, _) =>
{
if (ev == InvalidatedWeakEvent)
target._invalidated?.Invoke(target, EventArgs.Empty);
});
}
InvalidatedWeakEvent.Subscribe(affectsRender, _weakSubscriber);
field = affectsRender;
}

4
tests/Avalonia.Benchmarks/Visuals/VisualAffectsRenderBenchmarks.cs

@ -33,8 +33,8 @@ public class VisualAffectsRenderBenchmarks
public IPen Pen
{
get { return GetValue(PenProperty); }
set { SetValue(PenProperty, value); }
get => GetValue(PenProperty);
set => SetValue(PenProperty, value);
}
static TestVisual()

Loading…
Cancel
Save