diff --git a/Directory.Packages.props b/Directory.Packages.props
index 96d6f314d8..7e137dbea4 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -7,7 +7,7 @@
-
+
diff --git a/src/Avalonia.Base/Rendering/Composition/Compositor.Factories.cs b/src/Avalonia.Base/Rendering/Composition/Compositor.Factories.cs
index 8a75681c68..52c34cbc41 100644
--- a/src/Avalonia.Base/Rendering/Composition/Compositor.Factories.cs
+++ b/src/Avalonia.Base/Rendering/Composition/Compositor.Factories.cs
@@ -14,7 +14,7 @@ public partial class Compositor
///
internal CompositionTarget CreateCompositionTarget(Func> surfaces)
{
- return new CompositionTarget(this, new ServerCompositionTarget(_server, surfaces, DiagnosticTextRenderer));
+ return new CompositionTarget(this, new ServerCompositionTarget(_server, surfaces));
}
public CompositionContainerVisual CreateContainerVisual() => new(this, new ServerCompositionContainerVisual(_server));
diff --git a/src/Avalonia.Base/Rendering/Composition/Compositor.cs b/src/Avalonia.Base/Rendering/Composition/Compositor.cs
index e8cd29f195..2398468456 100644
--- a/src/Avalonia.Base/Rendering/Composition/Compositor.cs
+++ b/src/Avalonia.Base/Rendering/Composition/Compositor.cs
@@ -37,29 +37,12 @@ namespace Avalonia.Rendering.Composition
private readonly object _pendingBatchLock = new();
private readonly List _pendingServerCompositorJobs = new();
private readonly List _pendingServerCompositorPostTargetJobs = new();
- private DiagnosticTextRenderer? _diagnosticTextRenderer;
private readonly Action _triggerCommitRequested;
internal IEasing DefaultEasing { get; }
internal Dispatcher Dispatcher { get; }
- private DiagnosticTextRenderer? DiagnosticTextRenderer
- {
- get
- {
- if (_diagnosticTextRenderer == null)
- {
- // We are running in some unit test context
- if (AvaloniaLocator.Current.GetService() == null)
- return null;
- _diagnosticTextRenderer = new(Typeface.Default.GlyphTypeface, 12.0);
- }
-
- return _diagnosticTextRenderer;
- }
- }
-
internal event Action? AfterCommit;
diff --git a/src/Avalonia.Base/Rendering/Composition/Server/CompositionTargetOverlays.cs b/src/Avalonia.Base/Rendering/Composition/Server/CompositionTargetOverlays.cs
index a8c2908b88..9873fe6ff3 100644
--- a/src/Avalonia.Base/Rendering/Composition/Server/CompositionTargetOverlays.cs
+++ b/src/Avalonia.Base/Rendering/Composition/Server/CompositionTargetOverlays.cs
@@ -17,20 +17,16 @@ internal class CompositionTargetOverlays
private Rect? _oldFpsCounterRect;
private long _updateStarted;
private readonly ServerCompositionTarget _target;
- private readonly DiagnosticTextRenderer? _diagnosticTextRenderer;
- public CompositionTargetOverlays(
- ServerCompositionTarget target,
- DiagnosticTextRenderer? diagnosticTextRenderer)
+ public CompositionTargetOverlays(ServerCompositionTarget target)
{
_target = target;
- _diagnosticTextRenderer = diagnosticTextRenderer;
}
private RendererDebugOverlays DebugOverlays { get; set; }
private FpsCounter? FpsCounter
- => _fpsCounter ??= _diagnosticTextRenderer != null ? new FpsCounter(_diagnosticTextRenderer) : null;
+ => _fpsCounter ??= DiagnosticTextRenderer is { } diagnosticTextRenderer ? new FpsCounter(diagnosticTextRenderer) : null;
private FrameTimeGraph? LayoutTimeGraph
=> _layoutTimeGraph ??= CreateTimeGraph("Layout");
@@ -44,15 +40,29 @@ internal class CompositionTargetOverlays
private FrameTimeGraph? UpdateTimeGraph
=> _updateTimeGraph ??= CreateTimeGraph("TUpdate");
+ private DiagnosticTextRenderer? DiagnosticTextRenderer
+ {
+ get
+ {
+ if (field is null)
+ {
+ // We are running in some unit test context
+ if (AvaloniaLocator.Current.GetService() == null)
+ return null;
+ field = new DiagnosticTextRenderer(Typeface.Default.GlyphTypeface, 12.0);
+ }
+ return field;
+ }
+ }
public bool RequireLayer => DebugOverlays.HasAnyFlag(RendererDebugOverlays.DirtyRects);
private FrameTimeGraph? CreateTimeGraph(string title)
{
- if (_diagnosticTextRenderer == null)
+ if (DiagnosticTextRenderer is not { } diagnosticTextRenderer)
return null;
- return new FrameTimeGraph(360, new Size(360.0, 64.0), 1000.0 / 60.0, title, _diagnosticTextRenderer);
+ return new FrameTimeGraph(360, new Size(360.0, 64.0), 1000.0 / 60.0, title, diagnosticTextRenderer);
}
@@ -73,6 +83,8 @@ internal class CompositionTargetOverlays
if ((DebugOverlays & RendererDebugOverlays.RenderTimeGraph) == 0)
{
_renderTimeGraph?.Reset();
+ _compositorUpdateTimeGraph?.Reset();
+ _updateTimeGraph?.Reset();
}
}
@@ -170,4 +182,4 @@ internal class CompositionTargetOverlays
LayoutTimeGraph?.AddFrameValue(lastLayoutPassTiming.Elapsed.TotalMilliseconds);
}
}
-}
\ No newline at end of file
+}
diff --git a/src/Avalonia.Base/Rendering/Composition/Server/ServerCompositionTarget.cs b/src/Avalonia.Base/Rendering/Composition/Server/ServerCompositionTarget.cs
index b7a1993510..0c8656604a 100644
--- a/src/Avalonia.Base/Rendering/Composition/Server/ServerCompositionTarget.cs
+++ b/src/Avalonia.Base/Rendering/Composition/Server/ServerCompositionTarget.cs
@@ -39,13 +39,12 @@ namespace Avalonia.Rendering.Composition.Server
public int RenderedVisuals { get; set; }
public int VisitedVisuals { get; set; }
- public ServerCompositionTarget(ServerCompositor compositor, Func> surfaces,
- DiagnosticTextRenderer? diagnosticTextRenderer)
+ public ServerCompositionTarget(ServerCompositor compositor, Func> surfaces)
: base(compositor)
{
_compositor = compositor;
_surfaces = surfaces;
- _overlays = new CompositionTargetOverlays(this, diagnosticTextRenderer);
+ _overlays = new CompositionTargetOverlays(this);
var platformRender = AvaloniaLocator.Current.GetService();
if (platformRender?.SupportsRegions == true && compositor.Options.UseRegionDirtyRectClipping != false)