TimeoutBenchmark.cs 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. using BenchmarkDotNet.Attributes;
  2. using Jint.Constraints;
  3. using System;
  4. namespace Jint.Benchmark
  5. {
  6. [MemoryDiagnoser]
  7. public class TimeoutBenchmark
  8. {
  9. private const string Script = "var ret=[],tmp,num=100,i=256;for(var j1=0;j1<i*15;j1++){ret=[];ret.length=i}for(var j2=0;j2<i*10;j2++){ret=new Array(i)}ret=[];for(var j3=0;j3<i;j3++){ret.unshift(j3)}ret=[];for(var j4=0;j4<i;j4++){ret.splice(0,0,j4)}var a=ret.slice();for(var j5=0;j5<i;j5++){tmp=a.shift()}var b=ret.slice();for(var j6=0;j6<i;j6++){tmp=b.splice(0,1)}ret=[];for(var j7=0;j7<i*25;j7++){ret.push(j7)}var c=ret.slice();for(var j8=0;j8<i*25;j8++){tmp=c.pop()}var done = true;";
  10. private Engine engineTimeout1;
  11. private Engine engineTimeout2;
  12. [GlobalSetup]
  13. public void Setup()
  14. {
  15. engineTimeout1 = new Engine(options =>
  16. {
  17. options.Constraint(new TimeConstraint(TimeSpan.FromSeconds(5)));
  18. });
  19. engineTimeout2 = new Engine(options =>
  20. {
  21. options.Constraint(new TimeConstraint2(TimeSpan.FromSeconds(5)));
  22. });
  23. }
  24. [Params(10)]
  25. public virtual int N { get; set; }
  26. [Benchmark]
  27. public bool Timeout1()
  28. {
  29. bool done = false;
  30. for (var i = 0; i < N; i++)
  31. {
  32. engineTimeout1.Execute(Script);
  33. }
  34. return done;
  35. }
  36. [Benchmark]
  37. public bool Timeout2()
  38. {
  39. bool done = false;
  40. for (var i = 0; i < N; i++)
  41. {
  42. engineTimeout2.Execute(Script);
  43. }
  44. return done;
  45. }
  46. }
  47. }