From ec628116f6e52909bcd3df0dcaeb485d3c1e7c4b Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Sat, 17 Nov 2018 14:20:48 +0300 Subject: [PATCH] Force RenderComposite on UI thread --- .../Rendering/DeferredRenderer.cs | 27 +++++++++---------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/src/Avalonia.Visuals/Rendering/DeferredRenderer.cs b/src/Avalonia.Visuals/Rendering/DeferredRenderer.cs index 40be0055d3..a268eff78a 100644 --- a/src/Avalonia.Visuals/Rendering/DeferredRenderer.cs +++ b/src/Avalonia.Visuals/Rendering/DeferredRenderer.cs @@ -144,7 +144,7 @@ namespace Avalonia.Rendering var t = (IRenderLoopTask)this; if(t.NeedsUpdate) UpdateScene(); - t.Render(); + Render(true); } /// @@ -176,12 +176,7 @@ namespace Avalonia.Rendering void IRenderLoopTask.Update(TimeSpan time) => UpdateScene(); - void IRenderLoopTask.Render() - { - using (var l = _lock.TryLock()) - if (l != null) - Render(); - } + void IRenderLoopTask.Render() => Render(false); /// Size IVisualBrushRenderer.GetRenderTargetSize(IVisualBrush brush) @@ -202,17 +197,19 @@ namespace Avalonia.Rendering internal void UnitTestUpdateScene() => UpdateScene(); - internal void UnitTestRender() => Render(_scene.Item); + internal void UnitTestRender() => Render(_scene.Item, false); - private void Render() + private void Render(bool forceComposite) { - using (var scene = _scene?.Clone()) - { - Render(scene?.Item); - } + using (var l = _lock.TryLock()) + if (l != null) + using (var scene = _scene?.Clone()) + { + Render(scene?.Item, forceComposite); + } } - private void Render(Scene scene) + private void Render(Scene scene, bool forceComposite) { bool renderOverlay = DrawDirtyRects || DrawFps; bool composite = false; @@ -256,7 +253,7 @@ namespace Avalonia.Rendering RenderOverlay(scene, context); RenderComposite(scene, context); } - else if (composite) + else if (composite || forceComposite) { context = context ?? RenderTarget.CreateDrawingContext(this); RenderComposite(scene, context);