sneak/Shared/Timer.cs
Colin McMillen 36ebeadddf add Timer class for tracking draw & update times (etc)
related issue: #33

GitOrigin-RevId: 3762a7a5c7becf83cc50f80d4e5bb6f27244a952
2020-02-13 14:54:06 -05:00

47 lines
1.2 KiB
C#

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]}");
}
}
}