Browse Source

Merge pull request #2932 from MarchingCube/prioritybinding-fixes

Get rid of pointless allocations in PriorityBindingEntry
Jumar Macato 6 years ago
parent
commit
938b6daf22
1 changed files with 11 additions and 5 deletions
  1. 11 5
      src/Avalonia.Base/PriorityBindingEntry.cs

+ 11 - 5
src/Avalonia.Base/PriorityBindingEntry.cs

@@ -2,6 +2,7 @@
 // Licensed under the MIT license. See licence.md file in the project root for full license information.
 
 using System;
+using System.Runtime.ExceptionServices;
 using Avalonia.Data;
 using Avalonia.Threading;
 
@@ -10,9 +11,9 @@ namespace Avalonia
     /// <summary>
     /// A registered binding in a <see cref="PriorityValue"/>.
     /// </summary>
-    internal class PriorityBindingEntry : IDisposable
+    internal class PriorityBindingEntry : IDisposable, IObserver<object>
     {
-        private PriorityLevel _owner;
+        private readonly PriorityLevel _owner;
         private IDisposable _subscription;
 
         /// <summary>
@@ -85,7 +86,7 @@ namespace Avalonia
                 Description = ((IDescription)binding).Description;
             }
 
-            _subscription = binding.Subscribe(ValueChanged, Completed);
+            _subscription = binding.Subscribe(this);
         }
 
         /// <summary>
@@ -96,7 +97,7 @@ namespace Avalonia
             _subscription?.Dispose();
         }
 
-        private void ValueChanged(object value)
+        void IObserver<object>.OnNext(object value)
         {
             void Signal()
             {
@@ -132,7 +133,7 @@ namespace Avalonia
             }
         }
 
-        private void Completed()
+        void IObserver<object>.OnCompleted()
         {
             HasCompleted = true;
 
@@ -145,5 +146,10 @@ namespace Avalonia
                 Dispatcher.UIThread.Post(() => _owner.Completed(this));
             }
         }
+
+        void IObserver<object>.OnError(Exception error)
+        {
+            ExceptionDispatchInfo.Capture(error).Throw();
+        }
     }
 }