// 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);