From b201e8c59173942ad3a2186dfe26ce7a2e99c52e Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Sat, 2 May 2020 19:29:01 +0300 Subject: [PATCH] Show the effective rendered frame count instead of render timer tick count --- src/Avalonia.Visuals/Rendering/DeferredRenderer.cs | 5 +++-- src/Avalonia.Visuals/Rendering/RendererBase.cs | 9 +++++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/Avalonia.Visuals/Rendering/DeferredRenderer.cs b/src/Avalonia.Visuals/Rendering/DeferredRenderer.cs index 24ff600ca9..b89649d591 100644 --- a/src/Avalonia.Visuals/Rendering/DeferredRenderer.cs +++ b/src/Avalonia.Visuals/Rendering/DeferredRenderer.cs @@ -49,7 +49,7 @@ namespace Avalonia.Rendering IRenderLoop renderLoop, ISceneBuilder sceneBuilder = null, IDispatcher dispatcher = null, - IDeferredRendererLock rendererLock = null) + IDeferredRendererLock rendererLock = null) : base(true) { Contract.Requires(root != null); @@ -261,7 +261,8 @@ namespace Avalonia.Rendering try { var (scene, updated) = UpdateRenderLayersAndConsumeSceneIfNeeded(ref context); - + if (updated) + FpsTick(); using (scene) { if (scene?.Item != null) diff --git a/src/Avalonia.Visuals/Rendering/RendererBase.cs b/src/Avalonia.Visuals/Rendering/RendererBase.cs index 1e7b5c2923..b37d5d660b 100644 --- a/src/Avalonia.Visuals/Rendering/RendererBase.cs +++ b/src/Avalonia.Visuals/Rendering/RendererBase.cs @@ -7,6 +7,7 @@ namespace Avalonia.Rendering { public class RendererBase { + private readonly bool _useManualFpsCounting; private static int s_fontSize = 18; private readonly Stopwatch _stopwatch = Stopwatch.StartNew(); private int _framesThisSecond; @@ -14,8 +15,9 @@ namespace Avalonia.Rendering private FormattedText _fpsText; private TimeSpan _lastFpsUpdate; - public RendererBase() + public RendererBase(bool useManualFpsCounting = false) { + _useManualFpsCounting = useManualFpsCounting; _fpsText = new FormattedText { Typeface = FontManager.Current?.GetOrAddTypeface(FontFamily.Default), @@ -23,12 +25,15 @@ namespace Avalonia.Rendering }; } + protected void FpsTick() => _framesThisSecond++; + protected void RenderFps(IDrawingContextImpl context, Rect clientRect, int? layerCount) { var now = _stopwatch.Elapsed; var elapsed = now - _lastFpsUpdate; - ++_framesThisSecond; + if (!_useManualFpsCounting) + ++_framesThisSecond; if (elapsed.TotalSeconds > 1) {