Browse Source

Show the effective rendered frame count instead of render timer tick count

pull/3875/head
Nikita Tsukanov 6 years ago
parent
commit
b201e8c591
  1. 5
      src/Avalonia.Visuals/Rendering/DeferredRenderer.cs
  2. 9
      src/Avalonia.Visuals/Rendering/RendererBase.cs

5
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<ArgumentNullException>(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)

9
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)
{

Loading…
Cancel
Save