diff --git a/KeepersCompound.Lightmapper/Timing.cs b/KeepersCompound.Lightmapper/Timing.cs new file mode 100644 index 0000000..01c682f --- /dev/null +++ b/KeepersCompound.Lightmapper/Timing.cs @@ -0,0 +1,47 @@ +using System.Diagnostics; + +namespace KeepersCompound.Lightmapper; + +public static class Timing +{ + static readonly Dictionary _stages = new(); + + public static void Reset() + { + _stages.Clear(); + } + + public static void TimeStage(string stagename, Action action) + { + var watch = Stopwatch.StartNew(); + action(); + watch.Stop(); + AddOrIncrement(stagename, watch.Elapsed); + } + + public static T TimeStage(string stagename, Func action) + { + var watch = Stopwatch.StartNew(); + var value = action(); + watch.Stop(); + AddOrIncrement(stagename, watch.Elapsed); + return value; + } + + public static void LogAll() + { + foreach (var (stagename, time) in _stages) + { + Console.WriteLine($"[{stagename}]: {time:g}"); + } + } + + private static void AddOrIncrement(string stagename, TimeSpan elapsed) + { + if (_stages.TryGetValue(stagename, out var time)) + { + elapsed += time; + } + _stages[stagename] = elapsed; + } +} \ No newline at end of file