# HG changeset patch # User Alys Brooks # Date 2022-11-14 05:15:33 # Node ID a5e03a25946d8613c772c6dd978e885f5fd2468b # Parent 6a1d64c93e495bf00b8545d6b500d7be1ba433f8 Streamline performance of debug code. Use raw floats for draw times and avoid resorting so many times. Seems to reduce time by about a third. Still ends up slow after leaving the game running for a few minutes. diff --git a/isometric-park-fna/FNAGame.cs b/isometric-park-fna/FNAGame.cs --- a/isometric-park-fna/FNAGame.cs +++ b/isometric-park-fna/FNAGame.cs @@ -11,6 +11,7 @@ using System.Collections.Generic; using System.Linq; using SpriteFontPlus; +using JM.LinqFaster; using isometricparkfna; using static isometricparkfna.CellMap; @@ -70,6 +71,7 @@ Queue past_fps = new Queue(100); Queue past_draw = new Queue(100); + Queue past_draw_millis = new Queue(100); int tilesDrawn = 0; private static int width = 1280; @@ -995,6 +997,7 @@ stopWatch2.Start(); //Calcs for debug window: past_draw.Enqueue(this.drawTime); + past_draw_millis.Enqueue((float)this.drawTime.TotalMilliseconds); if ((this.frameCounter % 15) == 0) { past_fps.Enqueue(this.frameRate); @@ -1072,15 +1075,18 @@ additionalInfo.Add("Dialog entries", entries); additionalInfo.Add("Metadata entries", descriptions); - if (past_fps.Count() > 5) { - additionalInfo.Add(".01%% fps", MathUtils.Percentile(past_fps.Skip(5).ToArray(), 0.0001f).ToString()); - additionalInfo.Add(".1%% fps", MathUtils.Percentile(past_fps.Skip(5).ToArray(), 0.001f).ToString()); - additionalInfo.Add("1%% fps", MathUtils.Percentile(past_fps.Skip(5).ToArray(), 0.01f).ToString()); - additionalInfo.Add("50%% fps", MathUtils.Percentile(past_fps.Skip(5).ToArray(), 0.50f).ToString()); + if ((past_fps.Count() > 5) && show_another_window) { + var past_fps_floats = past_fps.Skip(5).ToArray(); + Array.Sort(past_fps_floats); + additionalInfo.Add(".01%% fps", MathUtils.Percentile(past_fps_floats, 0.0001f).ToString()); + additionalInfo.Add(".1%% fps", MathUtils.Percentile(past_fps_floats, 0.001f).ToString()); + additionalInfo.Add("1%% fps", MathUtils.Percentile(past_fps_floats, 0.01f).ToString()); + additionalInfo.Add("50%% fps", MathUtils.Percentile(past_fps_floats, 0.50f).ToString()); } - if (past_draw.Count() > 5) { - var past_draw_floats = past_draw.Skip(5).Select(ts => ts.TotalMilliseconds).ToArray(); + if ((past_draw.Count() > 5) && show_another_window) { + var past_draw_floats = past_draw_millis.Skip(5).ToArray(); + Array.Sort(past_draw_floats); additionalInfo.Add(".01%% draw", MathUtils.Percentile(past_draw_floats, 0.0001f).ToString()); additionalInfo.Add(".1%% draw", MathUtils.Percentile(past_draw_floats, 0.001f).ToString()); additionalInfo.Add("1%% draw", MathUtils.Percentile(past_draw_floats, 0.01f).ToString()); diff --git a/isometric-park-fna/Utils/MathUtils.cs b/isometric-park-fna/Utils/MathUtils.cs --- a/isometric-park-fna/Utils/MathUtils.cs +++ b/isometric-park-fna/Utils/MathUtils.cs @@ -154,7 +154,7 @@ public static float Percentile(float[] floats, float percentile) { if (floats.Length > 0) { - Array.Sort(floats); + // Array.Sort(floats); var raw_position = (floats.Length-1) * percentile; var lower_position = (int)raw_position;