Browse Source

Don't allocate a draw list if visual doesn't render anything

pull/8105/head
Nikita Tsukanov 4 years ago
parent
commit
6150691948
  1. 2
      src/Avalonia.Base/Rendering/Composition/CompositingRenderer.cs
  2. 13
      src/Avalonia.Base/Rendering/Composition/Drawing/CompositionDrawList.cs
  3. 6
      src/Avalonia.Base/Rendering/Composition/Drawing/CompositionDrawingContext.cs

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

13
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);
}
}

6
src/Avalonia.Base/Rendering/Composition/Drawing/CompositionDrawingContext.cs

@ -344,7 +344,7 @@ internal class CompositionDrawingContext : IDrawingContextImpl, IDrawingContextW
private void Add<T>(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<T>? NextDrawAs<T>() where T : class, IDrawOperation
{
return _drawOperationIndex < _builder!.DrawOperations.Count
? _builder.DrawOperations[_drawOperationIndex] as IRef<T>
return _drawOperationIndex < _builder.Count
? _builder.DrawOperations![_drawOperationIndex] as IRef<T>
: null;
}

Loading…
Cancel
Save