[js-perf-test] Add micro-benchmarks for spreading maps and sets.
Bug: v8:7980 Change-Id: I640119fc9a9af66370c47f4d5b16244a1cc3f716 Reviewed-on: https://chromium-review.googlesource.com/c/1256810 Commit-Queue: Hai Dang <dhai@google.com> Reviewed-by: Georg Neis <neis@chromium.org> Reviewed-by: Benedikt Meurer <bmeurer@chromium.org> Cr-Commit-Position: refs/heads/master@{#56504}
This commit is contained in:
parent
a4a8917335
commit
2293f88074
@ -0,0 +1,94 @@
|
||||
// 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 iterating schemes against spread initial literals.
|
||||
// Benchmarks for large smi maps.
|
||||
|
||||
var keys = Array.from(Array(1e4).keys());
|
||||
var keyValuePairs = keys.map((value) => [value, value + 1]);
|
||||
var map = new Map(keyValuePairs);
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Benchmark: SpreadKeys
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
function SpreadKeys() {
|
||||
var newArr = [...map.keys()];
|
||||
// basic sanity check
|
||||
if (newArr.length != map.size) throw 666;
|
||||
return newArr;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Benchmark: SpreadValues
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
function SpreadValues() {
|
||||
var newArr = [...map.values()];
|
||||
// basic sanity check
|
||||
if (newArr.length != map.size) throw 666;
|
||||
return newArr;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Benchmark: ForOfKeys
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
function ForOfKeys() {
|
||||
var newArr = new Array(map.size);
|
||||
var i = 0;
|
||||
for (let x of map.keys()) {
|
||||
newArr[i] = x;
|
||||
i++;
|
||||
}
|
||||
if (newArr.length != map.size) throw 666;
|
||||
return newArr;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Benchmark: ForOfValues
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
function ForOfValues() {
|
||||
var newArr = new Array(map.size);
|
||||
var i = 0;
|
||||
for (let x of map.values()) {
|
||||
newArr[i] = x;
|
||||
i++;
|
||||
}
|
||||
if (newArr.length != map.size) throw 666;
|
||||
return newArr;
|
||||
}
|
||||
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Setup and Run
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
load('../base.js');
|
||||
|
||||
var success = true;
|
||||
|
||||
function PrintResult(name, result) {
|
||||
print(name + '-ArrayLiteralInitialSpreadLargeSmiMap(Score): ' + result);
|
||||
}
|
||||
|
||||
function PrintError(name, error) {
|
||||
PrintResult('Error: ' + name, error);
|
||||
success = false;
|
||||
}
|
||||
|
||||
function CreateBenchmark(name, f) {
|
||||
new BenchmarkSuite(name, [1000], [ new Benchmark(name, false, false, 0, f) ]);
|
||||
}
|
||||
|
||||
CreateBenchmark('ForOfKeys', ForOfKeys);
|
||||
CreateBenchmark('ForOfValues', ForOfValues);
|
||||
CreateBenchmark('SpreadKeys', SpreadKeys);
|
||||
CreateBenchmark('SpreadValues', SpreadValues);
|
||||
|
||||
|
||||
BenchmarkSuite.config.doWarmup = true;
|
||||
BenchmarkSuite.config.doDeterministic = false;
|
||||
BenchmarkSuite.RunSuites({NotifyResult: PrintResult, NotifyError: PrintError});
|
121
test/js-perf-test/ArrayLiteralInitialSpreadLargeSmiSet/run.js
Normal file
121
test/js-perf-test/ArrayLiteralInitialSpreadLargeSmiSet/run.js
Normal file
@ -0,0 +1,121 @@
|
||||
// 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 iterating schemes against spread initial literals.
|
||||
// Benchmarks for large smi sets.
|
||||
|
||||
var keys = Array.from(Array(1e4).keys());
|
||||
var set = new Set(keys);
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Benchmark: Spread
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
function Spread() {
|
||||
var newArr = [...set];
|
||||
// basic sanity check
|
||||
if (newArr.length != set.size) throw 666;
|
||||
return newArr;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Benchmark: SpreadKeys
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
function SpreadKeys() {
|
||||
var newArr = [...set.keys()];
|
||||
// basic sanity check
|
||||
if (newArr.length != set.size) throw 666;
|
||||
return newArr;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Benchmark: SpreadValues
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
function SpreadValues() {
|
||||
var newArr = [...set.values()];
|
||||
// basic sanity check
|
||||
if (newArr.length != set.size) throw 666;
|
||||
return newArr;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Benchmark: ForOf
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
function ForOf() {
|
||||
var newArr = new Array(set.size);
|
||||
var i = 0;
|
||||
for (let x of set) {
|
||||
newArr[i] = x;
|
||||
i++;
|
||||
}
|
||||
if (newArr.length != set.size) throw 666;
|
||||
return newArr;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Benchmark: ForOfKeys
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
function ForOfKeys() {
|
||||
var newArr = new Array(set.size);
|
||||
var i = 0;
|
||||
for (let x of set.keys()) {
|
||||
newArr[i] = x;
|
||||
i++;
|
||||
}
|
||||
if (newArr.length != set.size) throw 666;
|
||||
return newArr;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Benchmark: ForOfValues
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
function ForOfValues() {
|
||||
var newArr = new Array(set.size);
|
||||
var i = 0;
|
||||
for (let kv of set.values()) {
|
||||
newArr[i] = kv;
|
||||
i++;
|
||||
}
|
||||
if (newArr.length != set.size) throw 666;
|
||||
return newArr;
|
||||
}
|
||||
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Setup and Run
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
load('../base.js');
|
||||
|
||||
var success = true;
|
||||
|
||||
function PrintResult(name, result) {
|
||||
print(name + '-ArrayLiteralInitialSpreadLargeSmiSet(Score): ' + result);
|
||||
}
|
||||
|
||||
function PrintError(name, error) {
|
||||
PrintResult('Error: ' + name, error);
|
||||
success = false;
|
||||
}
|
||||
|
||||
function CreateBenchmark(name, f) {
|
||||
new BenchmarkSuite(name, [1000], [ new Benchmark(name, false, false, 0, f) ]);
|
||||
}
|
||||
|
||||
CreateBenchmark('ForOf', ForOf);
|
||||
CreateBenchmark('ForOfKeys', ForOfKeys);
|
||||
CreateBenchmark('ForOfKeys', ForOfValues);
|
||||
CreateBenchmark('Spread', Spread);
|
||||
CreateBenchmark('SpreadKeys', SpreadKeys);
|
||||
CreateBenchmark('SpreadValues', SpreadValues);
|
||||
|
||||
|
||||
BenchmarkSuite.config.doWarmup = true;
|
||||
BenchmarkSuite.config.doDeterministic = false;
|
||||
BenchmarkSuite.RunSuites({NotifyResult: PrintResult, NotifyError: PrintError});
|
@ -0,0 +1,93 @@
|
||||
// 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 iterating schemes against spread initial literals.
|
||||
// Benchmarks for small smi maps.
|
||||
|
||||
var keys = Array.from(Array(50).keys());
|
||||
var keyValuePairs = keys.map((value) => [value, value + 1]);
|
||||
var map = new Map(keyValuePairs);
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Benchmark: SpreadKeys
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
function SpreadKeys() {
|
||||
var newArr = [...map.keys()];
|
||||
// basic sanity check
|
||||
if (newArr.length != map.size) throw 666;
|
||||
return newArr;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Benchmark: SpreadValues
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
function SpreadValues() {
|
||||
var newArr = [...map.values()];
|
||||
// basic sanity check
|
||||
if (newArr.length != map.size) throw 666;
|
||||
return newArr;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Benchmark: ForOfKeys
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
function ForOfKeys() {
|
||||
var newArr = new Array(map.size);
|
||||
var i = 0;
|
||||
for (let x of map.keys()) {
|
||||
newArr[i] = x;
|
||||
i++;
|
||||
}
|
||||
if (newArr.length != map.size) throw 666;
|
||||
return newArr;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Benchmark: ForOfValues
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
function ForOfValues() {
|
||||
var newArr = new Array(map.size);
|
||||
var i = 0;
|
||||
for (let x of map.values()) {
|
||||
newArr[i] = x;
|
||||
i++;
|
||||
}
|
||||
if (newArr.length != map.size) throw 666;
|
||||
return newArr;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Setup and Run
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
load('../base.js');
|
||||
|
||||
var success = true;
|
||||
|
||||
function PrintResult(name, result) {
|
||||
print(name + '-ArrayLiteralInitialSpreadSmallSmiMap(Score): ' + result);
|
||||
}
|
||||
|
||||
function PrintError(name, error) {
|
||||
PrintResult('Error: ' + name, error);
|
||||
success = false;
|
||||
}
|
||||
|
||||
function CreateBenchmark(name, f) {
|
||||
new BenchmarkSuite(name, [1000], [ new Benchmark(name, false, false, 0, f) ]);
|
||||
}
|
||||
|
||||
CreateBenchmark('ForOfKeys', ForOfKeys);
|
||||
CreateBenchmark('ForOfValues', ForOfValues);
|
||||
CreateBenchmark('SpreadKeys', SpreadKeys);
|
||||
CreateBenchmark('SpreadValues', SpreadValues);
|
||||
|
||||
|
||||
BenchmarkSuite.config.doWarmup = true;
|
||||
BenchmarkSuite.config.doDeterministic = false;
|
||||
BenchmarkSuite.RunSuites({NotifyResult: PrintResult, NotifyError: PrintError});
|
120
test/js-perf-test/ArrayLiteralInitialSpreadSmallSmiSet/run.js
Normal file
120
test/js-perf-test/ArrayLiteralInitialSpreadSmallSmiSet/run.js
Normal file
@ -0,0 +1,120 @@
|
||||
// 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 iterating schemes against spread initial literals.
|
||||
// Benchmarks for small smi sets.
|
||||
|
||||
var keys = Array.from(Array(50).keys());
|
||||
var set = new Set(keys);
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Benchmark: Spread
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
function Spread() {
|
||||
var newArr = [...set];
|
||||
// basic sanity check
|
||||
if (newArr.length != set.size) throw 666;
|
||||
return newArr;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Benchmark: SpreadKeys
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
function SpreadKeys() {
|
||||
var newArr = [...set.keys()];
|
||||
// basic sanity check
|
||||
if (newArr.length != set.size) throw 666;
|
||||
return newArr;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Benchmark: SpreadValues
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
function SpreadValues() {
|
||||
var newArr = [...set.values()];
|
||||
// basic sanity check
|
||||
if (newArr.length != set.size) throw 666;
|
||||
return newArr;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Benchmark: ForOf
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
function ForOf() {
|
||||
var newArr = new Array(set.size);
|
||||
var i = 0;
|
||||
for (let x of set) {
|
||||
newArr[i] = x;
|
||||
i++;
|
||||
}
|
||||
if (newArr.length != set.size) throw 666;
|
||||
return newArr;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Benchmark: ForOfKeys
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
function ForOfKeys() {
|
||||
var newArr = new Array(set.size);
|
||||
var i = 0;
|
||||
for (let x of set.keys()) {
|
||||
newArr[i] = x;
|
||||
i++;
|
||||
}
|
||||
if (newArr.length != set.size) throw 666;
|
||||
return newArr;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Benchmark: ForOfValues
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
function ForOfValues() {
|
||||
var newArr = new Array(set.size);
|
||||
var i = 0;
|
||||
for (let x of set.values()) {
|
||||
newArr[i] = x;
|
||||
i++;
|
||||
}
|
||||
if (newArr.length != set.size) throw 666;
|
||||
return newArr;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Setup and Run
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
load('../base.js');
|
||||
|
||||
var success = true;
|
||||
|
||||
function PrintResult(name, result) {
|
||||
print(name + '-ArrayLiteralInitialSpreadSmallSmiSet(Score): ' + result);
|
||||
}
|
||||
|
||||
function PrintError(name, error) {
|
||||
PrintResult('Error: ' + name, error);
|
||||
success = false;
|
||||
}
|
||||
|
||||
function CreateBenchmark(name, f) {
|
||||
new BenchmarkSuite(name, [1000], [ new Benchmark(name, false, false, 0, f) ]);
|
||||
}
|
||||
|
||||
CreateBenchmark('ForOf', ForOf);
|
||||
CreateBenchmark('ForOfKeys', ForOfKeys);
|
||||
CreateBenchmark('ForOfKeys', ForOfValues);
|
||||
CreateBenchmark('Spread', Spread);
|
||||
CreateBenchmark('SpreadKeys', SpreadKeys);
|
||||
CreateBenchmark('SpreadValues', SpreadValues);
|
||||
|
||||
|
||||
BenchmarkSuite.config.doWarmup = true;
|
||||
BenchmarkSuite.config.doDeterministic = false;
|
||||
BenchmarkSuite.RunSuites({NotifyResult: PrintResult, NotifyError: PrintError});
|
@ -127,6 +127,62 @@
|
||||
{"name": "ConcatArg"}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "ArrayLiteralInitialSpreadSmallSmiMap",
|
||||
"path": ["ArrayLiteralInitialSpreadSmallSmiMap"],
|
||||
"main": "run.js",
|
||||
"resources": [],
|
||||
"results_regexp": "^%s\\-ArrayLiteralInitialSpreadSmallSmiMap\\(Score\\): (.+)$",
|
||||
"tests": [
|
||||
{"name": "ForOfKeys"},
|
||||
{"name": "ForOfValues"},
|
||||
{"name": "SpreadKeys"},
|
||||
{"name": "SpreadValues"}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "ArrayLiteralInitialSpreadLargeSmiMap",
|
||||
"path": ["ArrayLiteralInitialSpreadLargeSmiMap"],
|
||||
"main": "run.js",
|
||||
"resources": [],
|
||||
"results_regexp": "^%s\\-ArrayLiteralInitialSpreadLargeSmiMap\\(Score\\): (.+)$",
|
||||
"tests": [
|
||||
{"name": "ForOfKeys"},
|
||||
{"name": "ForOfValues"},
|
||||
{"name": "SpreadKeys"},
|
||||
{"name": "SpreadValues"}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "ArrayLiteralInitialSpreadSmallSmiSet",
|
||||
"path": ["ArrayLiteralInitialSpreadSmallSmiSet"],
|
||||
"main": "run.js",
|
||||
"resources": [],
|
||||
"results_regexp": "^%s\\-ArrayLiteralInitialSpreadSmallSmiSet\\(Score\\): (.+)$",
|
||||
"tests": [
|
||||
{"name": "ForOf"},
|
||||
{"name": "ForOfKeys"},
|
||||
{"name": "ForOfValues"},
|
||||
{"name": "Spread"},
|
||||
{"name": "SpreadKeys"},
|
||||
{"name": "SpreadValues"}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "ArrayLiteralInitialSpreadLargeSmiSet",
|
||||
"path": ["ArrayLiteralInitialSpreadLargeSmiSet"],
|
||||
"main": "run.js",
|
||||
"resources": [],
|
||||
"results_regexp": "^%s\\-ArrayLiteralInitialSpreadLargeSmiSet\\(Score\\): (.+)$",
|
||||
"tests": [
|
||||
{"name": "ForOf"},
|
||||
{"name": "ForOfKeys"},
|
||||
{"name": "ForOfValues"},
|
||||
{"name": "Spread"},
|
||||
{"name": "SpreadKeys"},
|
||||
{"name": "SpreadValues"}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "ArrayLiteralSpread",
|
||||
"path": ["ArrayLiteralSpread"],
|
||||
|
Loading…
Reference in New Issue
Block a user