/ src / ARMeilleure / Diagnostics / Logger.cs
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  }