DromaeoBenchmark.cs 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. using BenchmarkDotNet.Attributes;
  2. using BenchmarkDotNet.Configs;
  3. namespace Jint.Benchmark;
  4. [MemoryDiagnoser]
  5. [GroupBenchmarksBy(BenchmarkLogicalGroupRule.ByMethod)]
  6. public class DromaeoBenchmark
  7. {
  8. private static readonly Dictionary<string, string> _files = new()
  9. {
  10. { "dromaeo-3d-cube", null },
  11. { "dromaeo-core-eval", null },
  12. { "dromaeo-object-array", null },
  13. { "dromaeo-object-regexp", null },
  14. { "dromaeo-object-string", null },
  15. { "dromaeo-string-base64", null }
  16. };
  17. private readonly Dictionary<string, Prepared<Script>> _prepared = new();
  18. private Engine _engine;
  19. [GlobalSetup]
  20. public void Setup()
  21. {
  22. foreach (var fileName in _files.Keys.ToArray())
  23. {
  24. foreach (var suffix in new[] {"", "-modern"})
  25. {
  26. var name = fileName + suffix;
  27. var script = File.ReadAllText($"Scripts/{name}.js");
  28. _files[name] = script;
  29. _prepared[name] = Engine.PrepareScript(script, name);
  30. }
  31. }
  32. }
  33. [IterationSetup]
  34. public void IterationSetup()
  35. {
  36. _engine = CreteEngine();
  37. }
  38. private static Engine CreteEngine()
  39. {
  40. var engine = new Engine()
  41. .SetValue("log", new Action<object>(Console.WriteLine))
  42. .SetValue("assert", new Action<bool>(b => { }));
  43. engine.Execute("""
  44. var startTest = function () { };
  45. var test = function (name, fn) { fn(); };
  46. var endTest = function () { };
  47. var prep = function (fn) { fn(); };
  48. """);
  49. return engine;
  50. }
  51. [Params(false, true, Priority = 50)]
  52. public bool Modern { get; set; }
  53. [Params(true, false, Priority = 100)]
  54. public bool Prepared { get; set; }
  55. [Benchmark]
  56. public void CoreEval()
  57. {
  58. Run("dromaeo-core-eval");
  59. }
  60. [Benchmark]
  61. public void Cube()
  62. {
  63. Run("dromaeo-3d-cube");
  64. }
  65. [Benchmark]
  66. public void ObjectArray()
  67. {
  68. Run("dromaeo-object-array");
  69. }
  70. [Benchmark]
  71. public void ObjectRegExp()
  72. {
  73. Run("dromaeo-object-regexp");
  74. }
  75. [Benchmark]
  76. public void ObjectString()
  77. {
  78. Run("dromaeo-object-string");
  79. }
  80. [Benchmark]
  81. public void StringBase64()
  82. {
  83. Run("dromaeo-string-base64");
  84. }
  85. private void Run(string fileName)
  86. {
  87. var finalName = Modern ? fileName + "-modern" : fileName;
  88. if (Prepared)
  89. {
  90. _engine.Execute(_prepared[finalName]);
  91. }
  92. else
  93. {
  94. _engine.Execute(_files[finalName], finalName);
  95. }
  96. }
  97. }