Logger.cs
1 using ARMeilleure.Translation; 2 using System; 3 using System.Diagnostics; 4 5 namespace ARMeilleure.Diagnostics 6 { 7 static class Logger 8 { 9 private static long _startTime; 10 11 private static readonly long[] _accumulatedTime; 12 13 static Logger() 14 { 15 _accumulatedTime = new long[(int)PassName.Count]; 16 } 17 18 [Conditional("M_DEBUG")] 19 public static void StartPass(PassName name) 20 { 21 WriteOutput(name + " pass started..."); 22 23 _startTime = Stopwatch.GetTimestamp(); 24 } 25 26 [Conditional("M_DEBUG")] 27 public static void EndPass(PassName name, ControlFlowGraph cfg) 28 { 29 EndPass(name); 30 31 WriteOutput("IR after " + name + " pass:"); 32 33 WriteOutput(IRDumper.GetDump(cfg)); 34 } 35 36 [Conditional("M_DEBUG")] 37 public static void EndPass(PassName name) 38 { 39 long elapsedTime = Stopwatch.GetTimestamp() - _startTime; 40 41 _accumulatedTime[(int)name] += elapsedTime; 42 43 WriteOutput($"{name} pass ended after {GetMilliseconds(_accumulatedTime[(int)name])} ms..."); 44 } 45 46 private static long GetMilliseconds(long ticks) 47 { 48 return (long)(((double)ticks / Stopwatch.Frequency) * 1000); 49 } 50 51 private static void WriteOutput(string text) 52 { 53 Console.WriteLine(text); 54 } 55 } 56 }