diff --git a/Shared/Timer.cs b/Shared/Timer.cs new file mode 100644 index 0000000..ff6d66e --- /dev/null +++ b/Shared/Timer.cs @@ -0,0 +1,46 @@ +using System; +using System.Diagnostics; + +namespace SemiColinGames { + class Timer { + + private readonly Stopwatch stopwatch = new Stopwatch(); + private readonly double targetTime; + private readonly string name; + private double startTime = 0.0; + private int[] histogram = new int[41]; + private int totalFrames = 0; + + public Timer(double targetTime, string name) { + this.targetTime = targetTime; + this.name = name; + } + + public void Start() { + startTime = stopwatch.Elapsed.TotalSeconds; + stopwatch.Start(); + } + + public void Stop() { + stopwatch.Stop(); + totalFrames++; + double frameTime = stopwatch.Elapsed.TotalSeconds - startTime; + int bucket = FMath.Clamp((int) (5.0f * frameTime / targetTime), 0, 40); + histogram[bucket]++; + if (totalFrames % 100 == 0) { + DumpStats(); + } + } + + public void DumpStats() { + Debug.WriteLine(name + ".DumpStats():"); + for (int i = 0; i < histogram.Length - 1; i++) { + int value = histogram[i]; + if (value > 0) { + Debug.WriteLine($"{i * 5}-{(i + 1) * 5}%: {histogram[i]}"); + } + } + Debug.WriteLine($"200+%: {histogram[histogram.Length - 1]}"); + } + } +}