SingleScriptBenchmark.cs 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  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. [GlobalSetup]
  16. public void Setup()
  17. {
  18. sharedJint = new Engine();
  19. #if ENGINE_COMPARISON
  20. sharedJurassic = new Jurassic.ScriptEngine();
  21. sharedNilJs = new NiL.JS.Core.Context();
  22. #endif
  23. }
  24. [Benchmark]
  25. public bool Jint()
  26. {
  27. bool done = false;
  28. for (var i = 0; i < N; i++)
  29. {
  30. sharedJint.Execute(Script);
  31. done |= sharedJint.GetValue("done").AsBoolean();
  32. }
  33. return done;
  34. }
  35. #if ENGINE_COMPARISON
  36. [Benchmark]
  37. public bool Jurassic()
  38. {
  39. bool done = false;
  40. for (var i = 0; i < N; i++)
  41. {
  42. sharedJurassic.Execute(Script);
  43. done |= sharedJurassic.GetGlobalValue<bool>("done");
  44. }
  45. return done;
  46. }
  47. [Benchmark]
  48. public bool NilJS()
  49. {
  50. bool done = false;
  51. for (var i = 0; i < N; i++)
  52. {
  53. sharedNilJs.Eval(Script);
  54. done |= (bool) sharedNilJs.GetVariable("done");
  55. }
  56. return done;
  57. }
  58. #endif
  59. }
  60. }