From 61506919480c80b691c312e4df9730ab07a1ee39 Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Thu, 23 Jun 2022 14:19:25 +0300 Subject: [PATCH] Don't allocate a draw list if visual doesn't render anything --- .../Rendering/Composition/CompositingRenderer.cs | 2 +- .../Composition/Drawing/CompositionDrawList.cs | 13 +++++++------ .../Drawing/CompositionDrawingContext.cs | 6 +++--- 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/Avalonia.Base/Rendering/Composition/CompositingRenderer.cs b/src/Avalonia.Base/Rendering/Composition/CompositingRenderer.cs index 5da256475a..282973c26a 100644 --- a/src/Avalonia.Base/Rendering/Composition/CompositingRenderer.cs +++ b/src/Avalonia.Base/Rendering/Composition/CompositingRenderer.cs @@ -223,7 +223,7 @@ public class CompositingRenderer : IRendererWithCompositor comp.TransformMatrix = MatrixUtils.ToMatrix4x4(renderTransform); - _recorder.BeginUpdate(comp.DrawList ?? new CompositionDrawList()); + _recorder.BeginUpdate(comp.DrawList); visual.Render(_recordingContext); comp.DrawList = _recorder.EndUpdate(); diff --git a/src/Avalonia.Base/Rendering/Composition/Drawing/CompositionDrawList.cs b/src/Avalonia.Base/Rendering/Composition/Drawing/CompositionDrawList.cs index 315faf2c86..432a0832f2 100644 --- a/src/Avalonia.Base/Rendering/Composition/Drawing/CompositionDrawList.cs +++ b/src/Avalonia.Base/Rendering/Composition/Drawing/CompositionDrawList.cs @@ -64,7 +64,8 @@ internal class CompositionDrawListBuilder _owns = false; } - public CompositionDrawList DrawOperations => _operations ?? new CompositionDrawList(); + public int Count => _operations?.Count ?? 0; + public CompositionDrawList? DrawOperations => _operations; void MakeWritable(int atIndex) { @@ -84,18 +85,18 @@ internal class CompositionDrawListBuilder public void ReplaceDrawOperation(int index, IDrawOperation node) { MakeWritable(index); - DrawOperations.Add(RefCountable.Create(node)); + DrawOperations!.Add(RefCountable.Create(node)); } public void AddDrawOperation(IDrawOperation node) { - MakeWritable(DrawOperations.Count); - DrawOperations.Add(RefCountable.Create(node)); + MakeWritable(Count); + DrawOperations!.Add(RefCountable.Create(node)); } public void TrimTo(int count) { - if (count < DrawOperations.Count) - DrawOperations.RemoveRange(count, DrawOperations.Count - count); + if (count < Count) + _operations!.RemoveRange(count, _operations.Count - count); } } \ No newline at end of file diff --git a/src/Avalonia.Base/Rendering/Composition/Drawing/CompositionDrawingContext.cs b/src/Avalonia.Base/Rendering/Composition/Drawing/CompositionDrawingContext.cs index c5a970acde..d7c1ef125d 100644 --- a/src/Avalonia.Base/Rendering/Composition/Drawing/CompositionDrawingContext.cs +++ b/src/Avalonia.Base/Rendering/Composition/Drawing/CompositionDrawingContext.cs @@ -344,7 +344,7 @@ internal class CompositionDrawingContext : IDrawingContextImpl, IDrawingContextW private void Add(T node) where T : class, IDrawOperation { - if (_drawOperationIndex < _builder!.DrawOperations.Count) + if (_drawOperationIndex < _builder.Count) { _builder.ReplaceDrawOperation(_drawOperationIndex, node); } @@ -358,8 +358,8 @@ internal class CompositionDrawingContext : IDrawingContextImpl, IDrawingContextW private IRef? NextDrawAs() where T : class, IDrawOperation { - return _drawOperationIndex < _builder!.DrawOperations.Count - ? _builder.DrawOperations[_drawOperationIndex] as IRef + return _drawOperationIndex < _builder.Count + ? _builder.DrawOperations![_drawOperationIndex] as IRef : null; }