Browse Source

Apply optimization to Pen as well.

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

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

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

Loading…
Cancel
Save