SingleScriptBenchmark.cs 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. using BenchmarkDotNet.Attributes;
  2. using Jurassic;
  3. using NiL.JS.Core;
  4. namespace Jint.Benchmark
  5. {
  6. [MemoryDiagnoser]
  7. public abstract class SingleScriptBenchmark
  8. {
  9. private Engine sharedJint;
  10. private ScriptEngine sharedJurassic;
  11. private Context sharedNilJs;
  12. protected abstract string Script { get; }
  13. [Params(1)]
  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. sharedJurassic = new ScriptEngine();
  22. sharedNilJs = new Context();
  23. }
  24. [Benchmark]
  25. public bool Jint()
  26. {
  27. bool done = false;
  28. for (var i = 0; i < N; i++)
  29. {
  30. var jintEngine = ReuseEngine ? sharedJint : new Engine();
  31. jintEngine.Execute(Script);
  32. done |= jintEngine.GetValue("done").AsBoolean();
  33. }
  34. return done;
  35. }
  36. [Benchmark]
  37. public bool Jurassic()
  38. {
  39. bool done = false;
  40. for (var i = 0; i < N; i++)
  41. {
  42. var jurassicEngine = ReuseEngine ? sharedJurassic : new ScriptEngine();
  43. jurassicEngine.Execute(Script);
  44. done |= jurassicEngine.GetGlobalValue<bool>("done");
  45. }
  46. return done;
  47. }
  48. [Benchmark]
  49. public bool NilJS()
  50. {
  51. bool done = false;
  52. for (var i = 0; i < N; i++)
  53. {
  54. var nilcontext = ReuseEngine ? sharedNilJs : new Context();
  55. nilcontext.Eval(Script);
  56. done |= (bool) nilcontext.GetVariable("done");
  57. }
  58. return done;
  59. }
  60. }
  61. }