Просмотр исходного кода

Apply optimization to Pen as well.

Dariusz Komosiński 3 лет назад
Родитель
Сommit
832afd2b46

+ 8 - 7
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;
             }

+ 2 - 2
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()