TypedArrayBenchmark.cs 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. using BenchmarkDotNet.Attributes;
  2. namespace Jint.Benchmark
  3. {
  4. [MemoryDiagnoser]
  5. public class TypedArrayBenchmark
  6. {
  7. private const string script = @"
  8. var testArray = new Int32Array([29, 27, 28, 838, 22, 2882, 2, 93, 84, 74, 7, 933, 3754, 3874, 22838, 38464, 3837, 82424, 2927, 2625, 63, 27, 28, 838, 22, 2882, 2, 93, 84, 74, 7, 933, 3754, 3874, 22838, 38464, 3837, 82424, 2927, 2625, 63, 27, 28, 838, 22, 2882, 2, 93, 84, 74, 7, 933, 3754, 3874, 22838, 38464, 3837, 82424, 2927, 2625, 63, 27, 28, 838, 22, 2882, 2, 93, 84, 74, 7, 933, 3754, 3874, 22838, 38464, 3837, 82424, 2927, 2625, 63]);
  9. ";
  10. private Engine engine;
  11. [GlobalSetup]
  12. public void Setup()
  13. {
  14. engine = new Engine();
  15. engine.Execute(script);
  16. }
  17. [Params(100)]
  18. public int N { get; set; }
  19. [Benchmark]
  20. public void Slice()
  21. {
  22. for (var i = 0; i < N; ++i)
  23. {
  24. engine.Execute("testArray.slice();");
  25. }
  26. }
  27. [Benchmark]
  28. public void Concat()
  29. {
  30. // tests conversion performance as TypedArray does not have concat
  31. for (var i = 0; i < N; ++i)
  32. {
  33. engine.Execute("[].concat(testArray);");
  34. }
  35. }
  36. [Benchmark]
  37. public void Index()
  38. {
  39. for (var i = 0; i < N; ++i)
  40. {
  41. engine.Execute(@"
  42. var obj2 = new Int32Array(testArray.length);
  43. for (var i = 0, l = testArray.length; i < l; i++) {
  44. obj2[i] = testArray[i];
  45. }
  46. ");
  47. }
  48. }
  49. [Benchmark]
  50. public void Map()
  51. {
  52. for (var i = 0; i < N; ++i)
  53. {
  54. engine.Execute(@"
  55. var obj2 = testArray.map(function(i) {
  56. return i;
  57. });
  58. ");
  59. }
  60. }
  61. [Benchmark]
  62. public void Apply()
  63. {
  64. for (var i = 0; i < N; ++i)
  65. {
  66. engine.Execute("Array.apply(undefined, testArray);");
  67. }
  68. }
  69. [Benchmark]
  70. public void JsonStringifyParse()
  71. {
  72. for (var i = 0; i < N; ++i)
  73. {
  74. engine.Execute("JSON.parse(JSON.stringify(testArray));");
  75. }
  76. }
  77. [Benchmark]
  78. public void FilterWithNumber()
  79. {
  80. for (var i = 0; i < N; ++i)
  81. {
  82. engine.Execute("testArray.filter(function(i) { return i > 55; });");
  83. }
  84. }
  85. }
  86. }