TimeoutBenchmark.cs 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. using BenchmarkDotNet.Attributes;
  2. using Jint.Constraints;
  3. namespace Jint.Benchmark
  4. {
  5. [MemoryDiagnoser]
  6. public class TimeoutBenchmark
  7. {
  8. 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;";
  9. private Engine engineTimeout1;
  10. private Engine engineTimeout2;
  11. [GlobalSetup]
  12. public void Setup()
  13. {
  14. engineTimeout1 = new Engine(options =>
  15. {
  16. options.Constraint(new TimeConstraint(TimeSpan.FromSeconds(5)));
  17. });
  18. engineTimeout2 = new Engine(options =>
  19. {
  20. options.Constraint(new TimeConstraint2(TimeSpan.FromSeconds(5)));
  21. });
  22. }
  23. [Params(10)]
  24. public virtual int N { get; set; }
  25. [Benchmark]
  26. public bool Timeout1()
  27. {
  28. bool done = false;
  29. for (var i = 0; i < N; i++)
  30. {
  31. engineTimeout1.Execute(Script);
  32. }
  33. return done;
  34. }
  35. [Benchmark]
  36. public bool Timeout2()
  37. {
  38. bool done = false;
  39. for (var i = 0; i < N; i++)
  40. {
  41. engineTimeout2.Execute(Script);
  42. }
  43. return done;
  44. }
  45. }
  46. }