| // Copyright 2019 the V8 project authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| function setupArray(length) { |
| var a = new Array(length); |
| for (var i=0;i<length;i++) { |
| a[i] = ''+i; |
| } |
| return Object.freeze(a); |
| } |
| |
| const frozenSpreadArray = setupArray(100); |
| |
| function foo() { |
| var result = arguments[0]; |
| for (var i = 1; i < arguments.length; ++i) { |
| result += arguments[i]; |
| } |
| return result; |
| } |
| |
| // ---------------------------------------------------------------------------- |
| // Benchmark: SpreadCall |
| // ---------------------------------------------------------------------------- |
| |
| function SpreadCall() { |
| foo(...frozenSpreadArray); |
| } |
| |
| |
| // ---------------------------------------------------------------------------- |
| // Benchmark: SpreadCallSpreadLiteral |
| // ---------------------------------------------------------------------------- |
| |
| function SpreadCallSpreadLiteral() { |
| foo(...[...frozenSpreadArray]); |
| } |
| |
| |
| // ---------------------------------------------------------------------------- |
| // Benchmark: ApplySpreadLiteral |
| // ---------------------------------------------------------------------------- |
| |
| function ApplySpreadLiteral() { |
| foo.apply(this, [...frozenSpreadArray]); |
| } |
| |
| // ---------------------------------------------------------------------------- |
| // Setup and Run |
| // ---------------------------------------------------------------------------- |
| |
| function CreateBenchmark(name, f) { |
| new BenchmarkSuite(name, [10], [ new Benchmark(name, false, false, 0, f) ]); |
| } |
| |
| CreateBenchmark('ApplySpreadLiteral', ApplySpreadLiteral); |
| CreateBenchmark('SpreadCall', SpreadCall); |
| CreateBenchmark('SpreadCallSpreadLiteral', SpreadCallSpreadLiteral); |