StopwatchBenchmark.cs 1.4 KB

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