From f7166c380063437327fa1b1d90b6b0eede589519 Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Sat, 9 Jun 2018 09:18:06 +0100 Subject: [PATCH] Add a FPS counter to the perf debug text. --- .../Widgets/Logic/PerfDebugLogic.cs | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/OpenRA.Mods.Common/Widgets/Logic/PerfDebugLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/PerfDebugLogic.cs index 0f7782dadd..3a03d3c302 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/PerfDebugLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/PerfDebugLogic.cs @@ -9,6 +9,7 @@ */ #endregion +using System.Diagnostics; using OpenRA.Support; using OpenRA.Widgets; @@ -24,11 +25,26 @@ namespace OpenRA.Mods.Common.Widgets.Logic var perfText = widget.Get("PERF_TEXT"); perfText.IsVisible = () => Game.Settings.Debug.PerfText; + + var fpsTimer = Stopwatch.StartNew(); + var fpsReferenceFrame = 0; + var fps = 0; perfText.GetText = () => - "Tick {0} @ {1:F1} ms\nRender {2} @ {3:F1} ms\nBatches: {4}".F( - Game.LocalTick, PerfHistory.Items["tick_time"].Average(Game.Settings.Debug.Samples), + { + var elapsed = fpsTimer.ElapsedMilliseconds; + if (elapsed > 1000) + { + // Round to closest integer + fps = (int)(1000.0f * (Game.RenderFrame - fpsReferenceFrame) / fpsTimer.ElapsedMilliseconds + 0.5f); + fpsTimer.Restart(); + fpsReferenceFrame = Game.RenderFrame; + } + + return "FPS: {0}\nTick {1} @ {2:F1} ms\nRender {3} @ {4:F1} ms\nBatches: {5}".F( + fps, Game.LocalTick, PerfHistory.Items["tick_time"].Average(Game.Settings.Debug.Samples), Game.RenderFrame, PerfHistory.Items["render"].Average(Game.Settings.Debug.Samples), PerfHistory.Items["batches"].LastValue); + }; } } }