|
|
@ -17,20 +17,16 @@ internal class CompositionTargetOverlays |
|
|
private Rect? _oldFpsCounterRect; |
|
|
private Rect? _oldFpsCounterRect; |
|
|
private long _updateStarted; |
|
|
private long _updateStarted; |
|
|
private readonly ServerCompositionTarget _target; |
|
|
private readonly ServerCompositionTarget _target; |
|
|
private readonly DiagnosticTextRenderer? _diagnosticTextRenderer; |
|
|
|
|
|
|
|
|
|
|
|
public CompositionTargetOverlays( |
|
|
public CompositionTargetOverlays(ServerCompositionTarget target) |
|
|
ServerCompositionTarget target, |
|
|
|
|
|
DiagnosticTextRenderer? diagnosticTextRenderer) |
|
|
|
|
|
{ |
|
|
{ |
|
|
_target = target; |
|
|
_target = target; |
|
|
_diagnosticTextRenderer = diagnosticTextRenderer; |
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
private RendererDebugOverlays DebugOverlays { get; set; } |
|
|
private RendererDebugOverlays DebugOverlays { get; set; } |
|
|
|
|
|
|
|
|
private FpsCounter? FpsCounter |
|
|
private FpsCounter? FpsCounter |
|
|
=> _fpsCounter ??= _diagnosticTextRenderer != null ? new FpsCounter(_diagnosticTextRenderer) : null; |
|
|
=> _fpsCounter ??= DiagnosticTextRenderer is { } diagnosticTextRenderer ? new FpsCounter(diagnosticTextRenderer) : null; |
|
|
|
|
|
|
|
|
private FrameTimeGraph? LayoutTimeGraph |
|
|
private FrameTimeGraph? LayoutTimeGraph |
|
|
=> _layoutTimeGraph ??= CreateTimeGraph("Layout"); |
|
|
=> _layoutTimeGraph ??= CreateTimeGraph("Layout"); |
|
|
@ -44,15 +40,29 @@ internal class CompositionTargetOverlays |
|
|
private FrameTimeGraph? UpdateTimeGraph |
|
|
private FrameTimeGraph? UpdateTimeGraph |
|
|
=> _updateTimeGraph ??= CreateTimeGraph("TUpdate"); |
|
|
=> _updateTimeGraph ??= CreateTimeGraph("TUpdate"); |
|
|
|
|
|
|
|
|
|
|
|
private DiagnosticTextRenderer? DiagnosticTextRenderer |
|
|
|
|
|
{ |
|
|
|
|
|
get |
|
|
|
|
|
{ |
|
|
|
|
|
if (field is null) |
|
|
|
|
|
{ |
|
|
|
|
|
// We are running in some unit test context
|
|
|
|
|
|
if (AvaloniaLocator.Current.GetService<IFontManagerImpl>() == null) |
|
|
|
|
|
return null; |
|
|
|
|
|
field = new DiagnosticTextRenderer(Typeface.Default.GlyphTypeface, 12.0); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
return field; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
public bool RequireLayer => DebugOverlays.HasAnyFlag(RendererDebugOverlays.DirtyRects); |
|
|
public bool RequireLayer => DebugOverlays.HasAnyFlag(RendererDebugOverlays.DirtyRects); |
|
|
|
|
|
|
|
|
private FrameTimeGraph? CreateTimeGraph(string title) |
|
|
private FrameTimeGraph? CreateTimeGraph(string title) |
|
|
{ |
|
|
{ |
|
|
if (_diagnosticTextRenderer == null) |
|
|
if (DiagnosticTextRenderer is not { } diagnosticTextRenderer) |
|
|
return null; |
|
|
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) |
|
|
if ((DebugOverlays & RendererDebugOverlays.RenderTimeGraph) == 0) |
|
|
{ |
|
|
{ |
|
|
_renderTimeGraph?.Reset(); |
|
|
_renderTimeGraph?.Reset(); |
|
|
|
|
|
_compositorUpdateTimeGraph?.Reset(); |
|
|
|
|
|
_updateTimeGraph?.Reset(); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|