From 07288d20875dbcb8417a33fb67082905e4b99065 Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Sat, 2 May 2020 19:55:41 +0300 Subject: [PATCH] Reduce allocations --- src/Avalonia.Visuals/Rendering/DeferredRenderer.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Avalonia.Visuals/Rendering/DeferredRenderer.cs b/src/Avalonia.Visuals/Rendering/DeferredRenderer.cs index b89649d591..ccb889ece9 100644 --- a/src/Avalonia.Visuals/Rendering/DeferredRenderer.cs +++ b/src/Avalonia.Visuals/Rendering/DeferredRenderer.cs @@ -35,6 +35,7 @@ namespace Avalonia.Rendering private IRef _currentDraw; private readonly IDeferredRendererLock _lock; private readonly object _sceneLock = new object(); + private readonly Action _updateSceneIfNeededDelegate; /// /// Initializes a new instance of the class. @@ -59,6 +60,7 @@ namespace Avalonia.Rendering Layers = new RenderLayers(); _renderLoop = renderLoop; _lock = rendererLock ?? new ManagedDeferredRendererLock(); + _updateSceneIfNeededDelegate = UpdateSceneIfNeeded; } /// @@ -336,7 +338,7 @@ namespace Avalonia.Rendering // So we are scheduling an update call so UI thread could prepare a scene before // the next render timer tick if (!recursiveCall && !isUiThread) - Dispatcher.UIThread.InvokeAsync(UpdateSceneIfNeeded, DispatcherPriority.Render); + Dispatcher.UIThread.Post(_updateSceneIfNeededDelegate, DispatcherPriority.Render); // Indicate that we have updated the layers return (sceneRef.Clone(), true);