Logger.cs 1.4 KB

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