// Copyright 2018 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. // Comparing different copy schemes against spread initial literals. // Benchmarks for large packed double arrays. var largeArray = Array.from(Array(1e5).keys()); // TODO(dhai): we should be able to use Array.prototype.map here, but that // implementation is currently creating a HOLEY array. for (var i = 0; i < 1e5; i++) { largeArray[i] += 6.66; } // ---------------------------------------------------------------------------- // Benchmark: Spread // ---------------------------------------------------------------------------- function SpreadLarge() { var newArr = [...largeArray]; // basic sanity check if (newArr.length != largeArray.length) throw 666; return newArr; } // ---------------------------------------------------------------------------- // Benchmark: ForLength // ---------------------------------------------------------------------------- function ForLengthLarge() { var newArr = new Array(largeArray.length); for (let i = 0; i < largeArray.length; i++) { newArr[i] = largeArray[i]; } // basic sanity check if (newArr.length != largeArray.length) throw 666; return newArr; } // ---------------------------------------------------------------------------- // Benchmark: ForLengthEmpty // ---------------------------------------------------------------------------- function ForLengthEmptyLarge() { var newArr = []; for (let i = 0; i < largeArray.length; i++) { newArr[i] = largeArray[i]; } // basic sanity check if (newArr.length != largeArray.length) throw 666; return newArr; } // ---------------------------------------------------------------------------- // Benchmark: Slice // ---------------------------------------------------------------------------- function SliceLarge() { var newArr = largeArray.slice(); // basic sanity check if (newArr.length != largeArray.length) throw 666; return newArr; } // ---------------------------------------------------------------------------- // Benchmark: Slice0 // ---------------------------------------------------------------------------- function Slice0Large() { var newArr = largeArray.slice(0); // basic sanity check if (newArr.length != largeArray.length) throw 666; return newArr; } // ---------------------------------------------------------------------------- // Benchmark: ConcatReceive // ---------------------------------------------------------------------------- function ConcatReceiveLarge() { var newArr = largeArray.concat(); // basic sanity check if (newArr.length != largeArray.length) throw 666; return newArr; } // ---------------------------------------------------------------------------- // Benchmark: ConcatArg // ---------------------------------------------------------------------------- function ConcatArgLarge() { var newArr = [].concat(largeArray); // basic sanity check if (newArr.length != largeArray.length) throw 666; return newArr; } // ---------------------------------------------------------------------------- // Benchmark: ForOfPush // ---------------------------------------------------------------------------- function ForOfPushLarge() { var newArr = []; for (let x of largeArray) { newArr.push(x) } // basic sanity check if (newArr.length != largeArray.length) throw 666; return newArr; } // ---------------------------------------------------------------------------- // Benchmark: MapId // ---------------------------------------------------------------------------- function MapIdLarge() { var newArr = largeArray.map(x => x); // basic sanity check if (newArr.length != largeArray.length) throw 666; return newArr; } // ---------------------------------------------------------------------------- // Setup and Run // ---------------------------------------------------------------------------- load('../base.js'); var success = true; function PrintResult(name, result) { print(name + '-ArrayLiteralInitialSpreadLargeDoublePacked(Score): ' + result); } function PrintError(name, error) { PrintResult('Error: ' + name, error); success = false; } // Run the benchmark (5 x 100) iterations instead of 1 second. function CreateBenchmark(name, f) { new BenchmarkSuite(name, [1000], [ new Benchmark(name, false, false, 5, f) ]); } CreateBenchmark('Spread', SpreadLarge); CreateBenchmark('ForLength', ForLengthLarge); CreateBenchmark('ForLengthEmpty', ForLengthEmptyLarge); CreateBenchmark('Slice', SliceLarge); CreateBenchmark('Slice0', Slice0Large); CreateBenchmark('ConcatReceive', ConcatReceiveLarge); CreateBenchmark('ConcatArg', ConcatArgLarge); BenchmarkSuite.config.doWarmup = true; BenchmarkSuite.config.doDeterministic = true; BenchmarkSuite.RunSuites({NotifyResult: PrintResult, NotifyError: PrintError});