SingleScriptBenchmark.cs 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. using BenchmarkDotNet.Attributes;
  2. namespace Jint.Benchmark
  3. {
  4. [MemoryDiagnoser]
  5. public abstract class SingleScriptBenchmark
  6. {
  7. private Engine sharedJint;
  8. #if ENGINE_COMPARISON
  9. private Jurassic.ScriptEngine sharedJurassic;
  10. private NiL.JS.Core.Context sharedNilJs;
  11. #endif
  12. protected abstract string Script { get; }
  13. [Params(10)]
  14. public virtual int N { get; set; }
  15. [Params(true, false)]
  16. public bool ReuseEngine { get; set; }
  17. [GlobalSetup]
  18. public void Setup()
  19. {
  20. sharedJint = new Engine();
  21. #if ENGINE_COMPARISON
  22. sharedJurassic = new Jurassic.ScriptEngine();
  23. sharedNilJs = new NiL.JS.Core.Context();
  24. #endif
  25. }
  26. [Benchmark]
  27. public bool Jint()
  28. {
  29. bool done = false;
  30. for (var i = 0; i < N; i++)
  31. {
  32. var jintEngine = ReuseEngine ? sharedJint : new Engine();
  33. jintEngine.Execute(Script);
  34. done |= jintEngine.GetValue("done").AsBoolean();
  35. }
  36. return done;
  37. }
  38. #if ENGINE_COMPARISON
  39. [Benchmark]
  40. public bool Jurassic()
  41. {
  42. bool done = false;
  43. for (var i = 0; i < N; i++)
  44. {
  45. var jurassicEngine = ReuseEngine ? sharedJurassic : new Jurassic.ScriptEngine();
  46. jurassicEngine.Execute(Script);
  47. done |= jurassicEngine.GetGlobalValue<bool>("done");
  48. }
  49. return done;
  50. }
  51. [Benchmark]
  52. public bool NilJS()
  53. {
  54. bool done = false;
  55. for (var i = 0; i < N; i++)
  56. {
  57. var nilcontext = ReuseEngine ? sharedNilJs : new NiL.JS.Core.Context();
  58. nilcontext.Eval(Script);
  59. done |= (bool) nilcontext.GetVariable("done");
  60. }
  61. return done;
  62. }
  63. #endif
  64. }
  65. }