StopwatchBenchmark.cs 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. using BenchmarkDotNet.Attributes;
  2. namespace Jint.Benchmark
  3. {
  4. [MemoryDiagnoser]
  5. public class StopwatchBenchmark : SingleScriptBenchmark
  6. {
  7. [Params(1)]
  8. public override int N { get; set; }
  9. protected override string Script => @"
  10. function Stopwatch() {
  11. var sw = this;
  12. var start = null;
  13. var stop = null;
  14. var isRunning = false;
  15. sw.Start = function () {
  16. if (isRunning)
  17. return;
  18. start = new Date();
  19. stop = null;
  20. isRunning = true;
  21. }
  22. sw.Stop = function () {
  23. if (!isRunning)
  24. return;
  25. stop = new Date();
  26. isRunning = false;
  27. }
  28. sw.Reset = function () {
  29. start = isRunning ? new Date() : null;
  30. stop = null;
  31. }
  32. sw.Restart = function () {
  33. isRunning = true;
  34. sw.Reset();
  35. }
  36. sw.ElapsedMilliseconds = function () { return (isRunning ? new Date() : stop) - start; }
  37. sw.IsRunning = function() { return isRunning; }
  38. }
  39. var sw = new Stopwatch();
  40. sw.Start();
  41. for (var x = 0; x < 1021; x++) {
  42. for (var y = 0; y < 383; y++) {
  43. var z = x ^ y;
  44. if (z % 2 == 0)
  45. sw.Start();
  46. else if(z % 3 == 0)
  47. sw.Stop();
  48. else if (z % 5 == 0)
  49. sw.Reset();
  50. else if (z % 7 == 0)
  51. sw.Restart();
  52. var ms = sw.ElapsedMilliseconds;
  53. var rn = sw.IsRunning;
  54. }
  55. }
  56. sw.Stop();
  57. var done = true;
  58. ";
  59. }
  60. }