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)