aboutsummaryrefslogtreecommitdiff
path: root/ARMeilleure/Diagnostics/Logger.cs
diff options
context:
space:
mode:
Diffstat (limited to 'ARMeilleure/Diagnostics/Logger.cs')
-rw-r--r--ARMeilleure/Diagnostics/Logger.cs59
1 files changed, 59 insertions, 0 deletions
diff --git a/ARMeilleure/Diagnostics/Logger.cs b/ARMeilleure/Diagnostics/Logger.cs
new file mode 100644
index 00000000..29d9c79b
--- /dev/null
+++ b/ARMeilleure/Diagnostics/Logger.cs
@@ -0,0 +1,59 @@
+using ARMeilleure.Translation;
+using System;
+using System.Diagnostics;
+
+namespace ARMeilleure.Diagnostics
+{
+ static class Logger
+ {
+ private static long _startTime;
+
+ private static long[] _accumulatedTime;
+
+ static Logger()
+ {
+ _accumulatedTime = new long[(int)PassName.Count];
+ }
+
+ public static void StartPass(PassName name)
+ {
+#if M_DEBUG
+ WriteOutput(name + " pass started...");
+
+ _startTime = Stopwatch.GetTimestamp();
+#endif
+ }
+
+ public static void EndPass(PassName name, ControlFlowGraph cfg)
+ {
+#if M_DEBUG
+ EndPass(name);
+
+ WriteOutput("IR after " + name + " pass:");
+
+ WriteOutput(IRDumper.GetDump(cfg));
+#endif
+ }
+
+ public static void EndPass(PassName name)
+ {
+#if M_DEBUG
+ long elapsedTime = Stopwatch.GetTimestamp() - _startTime;
+
+ _accumulatedTime[(int)name] += elapsedTime;
+
+ WriteOutput($"{name} pass ended after {GetMilliseconds(_accumulatedTime[(int)name])} ms...");
+#endif
+ }
+
+ private static long GetMilliseconds(long ticks)
+ {
+ return (long)(((double)ticks / Stopwatch.Frequency) * 1000);
+ }
+
+ private static void WriteOutput(string text)
+ {
+ Console.WriteLine(text);
+ }
+ }
+} \ No newline at end of file