StopwatchBenchmark.cs 1.4 KB

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