Commit 7a540779 authored by Jaroslav Sevcik's avatar Jaroslav Sevcik Committed by Commit Bot

[js-tests] Add benchmarks for large hash tables.

Change-Id: I1157ef6baaf60bdbf5d55a1b8f75edb15794baef
Bug: v8:6916
Reviewed-on: https://chromium-review.googlesource.com/715800Reviewed-by: 's avatarBenedikt Meurer <bmeurer@chromium.org>
Commit-Queue: Jaroslav Sevcik <jarin@chromium.org>
Cr-Commit-Position: refs/heads/master@{#48724}
parent 50112799
...@@ -2,30 +2,21 @@ ...@@ -2,30 +2,21 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
var N = 10; var N = 10;
var LargeN = 1e4;
var keys; var keys;
function SetupSmiKeys() { function SetupSmiKeys(count = 2 * N) {
keys = new Array(N * 2); keys = Array.from({ length : count }, (v, i) => i);
for (var i = 0; i < N * 2; i++) {
keys[i] = i;
}
} }
function SetupStringKeys() { function SetupStringKeys(count = 2 * N) {
keys = new Array(N * 2); keys = Array.from({ length : count }, (v, i) => 's' + i);
for (var i = 0; i < N * 2; i++) {
keys[i] = 's' + i;
}
} }
function SetupObjectKeys() { function SetupObjectKeys(count = 2 * N) {
keys = new Array(N * 2); keys = Array.from({ length : count }, (v, i) => ({}));
for (var i = 0; i < N * 2; i++) {
keys[i] = {};
}
} }
...@@ -10,7 +10,6 @@ var MapSmiBenchmark = new BenchmarkSuite('Map-Smi', [1000], [ ...@@ -10,7 +10,6 @@ var MapSmiBenchmark = new BenchmarkSuite('Map-Smi', [1000], [
new Benchmark('Delete', false, false, 0, MapDeleteSmi, MapSetupSmi, MapTearDown), new Benchmark('Delete', false, false, 0, MapDeleteSmi, MapSetupSmi, MapTearDown),
]); ]);
var MapStringBenchmark = new BenchmarkSuite('Map-String', [1000], [ var MapStringBenchmark = new BenchmarkSuite('Map-String', [1000], [
new Benchmark('Set', false, false, 0, MapSetString, MapSetupStringBase, MapTearDown), new Benchmark('Set', false, false, 0, MapSetString, MapSetupStringBase, MapTearDown),
new Benchmark('Has', false, false, 0, MapHasString, MapSetupString, MapTearDown), new Benchmark('Has', false, false, 0, MapHasString, MapSetupString, MapTearDown),
...@@ -18,7 +17,6 @@ var MapStringBenchmark = new BenchmarkSuite('Map-String', [1000], [ ...@@ -18,7 +17,6 @@ var MapStringBenchmark = new BenchmarkSuite('Map-String', [1000], [
new Benchmark('Delete', false, false, 0, MapDeleteString, MapSetupString, MapTearDown), new Benchmark('Delete', false, false, 0, MapDeleteString, MapSetupString, MapTearDown),
]); ]);
var MapObjectBenchmark = new BenchmarkSuite('Map-Object', [1000], [ var MapObjectBenchmark = new BenchmarkSuite('Map-Object', [1000], [
new Benchmark('Set', false, false, 0, MapSetObject, MapSetupObjectBase, MapTearDown), new Benchmark('Set', false, false, 0, MapSetObject, MapSetupObjectBase, MapTearDown),
new Benchmark('Has', false, false, 0, MapHasObject, MapSetupObject, MapTearDown), new Benchmark('Has', false, false, 0, MapHasObject, MapSetupObject, MapTearDown),
...@@ -26,68 +24,66 @@ var MapObjectBenchmark = new BenchmarkSuite('Map-Object', [1000], [ ...@@ -26,68 +24,66 @@ var MapObjectBenchmark = new BenchmarkSuite('Map-Object', [1000], [
new Benchmark('Delete', false, false, 0, MapDeleteObject, MapSetupObject, MapTearDown), new Benchmark('Delete', false, false, 0, MapDeleteObject, MapSetupObject, MapTearDown),
]); ]);
var MapObjectLargeBenchmark = new BenchmarkSuite('Map-Object-Set-Get-Large', [1e7], [
new Benchmark('Set-Get', false, false, 0, MapSetGetObjectLarge,
MapSetupObjectBaseLarge, MapTearDown),
]);
var MapIterationBenchmark = new BenchmarkSuite('Map-Iteration', [1000], [ var MapIterationBenchmark = new BenchmarkSuite('Map-Iteration', [1000], [
new Benchmark('ForEach', false, false, 0, MapForEach, MapSetupSmi, MapTearDown), new Benchmark('ForEach', false, false, 0, MapForEach, MapSetupSmi, MapTearDown),
]); ]);
var MapIterationBenchmark = new BenchmarkSuite('Map-Iterator', [1000], [ var MapIterationBenchmark = new BenchmarkSuite('Map-Iterator', [1000], [
new Benchmark('Iterator', false, false, 0, MapIterator, MapSetupSmi, MapTearDown), new Benchmark('Iterator', false, false, 0, MapIterator, MapSetupSmi, MapTearDown),
]); ]);
var map; var map;
function MapSetupSmiBase() { function MapSetupSmiBase() {
SetupSmiKeys(); SetupSmiKeys();
map = new Map; map = new Map;
} }
function MapSetupSmi() { function MapSetupSmi() {
MapSetupSmiBase(); MapSetupSmiBase();
MapSetSmi(); MapSetSmi();
} }
function MapSetupStringBase() { function MapSetupStringBase() {
SetupStringKeys(); SetupStringKeys();
map = new Map; map = new Map;
} }
function MapSetupString() { function MapSetupString() {
MapSetupStringBase(); MapSetupStringBase();
MapSetString(); MapSetString();
} }
function MapSetupObjectBase() { function MapSetupObjectBase() {
SetupObjectKeys(); SetupObjectKeys();
map = new Map; map = new Map;
} }
function MapSetupObjectBaseLarge() {
SetupObjectKeys(2 * LargeN);
map = new Map;
}
function MapSetupObject() { function MapSetupObject() {
MapSetupObjectBase(); MapSetupObjectBase();
MapSetObject(); MapSetObject();
} }
function MapTearDown() { function MapTearDown() {
map = null; map = null;
} }
function MapSetSmi() { function MapSetSmi() {
for (var i = 0; i < N; i++) { for (var i = 0; i < N; i++) {
map.set(keys[i], i); map.set(keys[i], i);
} }
} }
function MapHasSmi() { function MapHasSmi() {
for (var i = 0; i < N; i++) { for (var i = 0; i < N; i++) {
if (!map.has(keys[i])) { if (!map.has(keys[i])) {
...@@ -101,7 +97,6 @@ function MapHasSmi() { ...@@ -101,7 +97,6 @@ function MapHasSmi() {
} }
} }
function MapGetSmi() { function MapGetSmi() {
for (var i = 0; i < N; i++) { for (var i = 0; i < N; i++) {
if (map.get(keys[i]) !== i) { if (map.get(keys[i]) !== i) {
...@@ -124,14 +119,12 @@ function MapDeleteSmi() { ...@@ -124,14 +119,12 @@ function MapDeleteSmi() {
} }
} }
function MapSetString() { function MapSetString() {
for (var i = 0; i < N; i++) { for (var i = 0; i < N; i++) {
map.set(keys[i], i); map.set(keys[i], i);
} }
} }
function MapHasString() { function MapHasString() {
for (var i = 0; i < N; i++) { for (var i = 0; i < N; i++) {
if (!map.has(keys[i])) { if (!map.has(keys[i])) {
...@@ -159,7 +152,6 @@ function MapGetString() { ...@@ -159,7 +152,6 @@ function MapGetString() {
} }
} }
function MapDeleteString() { function MapDeleteString() {
// This is run more than once per setup so we will end up deleting items // This is run more than once per setup so we will end up deleting items
// more than once. Therefore, we do not the return value of delete. // more than once. Therefore, we do not the return value of delete.
...@@ -168,14 +160,12 @@ function MapDeleteString() { ...@@ -168,14 +160,12 @@ function MapDeleteString() {
} }
} }
function MapSetObject() { function MapSetObject() {
for (var i = 0; i < N; i++) { for (var i = 0; i < N; i++) {
map.set(keys[i], i); map.set(keys[i], i);
} }
} }
function MapHasObject() { function MapHasObject() {
for (var i = 0; i < N; i++) { for (var i = 0; i < N; i++) {
if (!map.has(keys[i])) { if (!map.has(keys[i])) {
...@@ -189,7 +179,6 @@ function MapHasObject() { ...@@ -189,7 +179,6 @@ function MapHasObject() {
} }
} }
function MapGetObject() { function MapGetObject() {
for (var i = 0; i < N; i++) { for (var i = 0; i < N; i++) {
if (map.get(keys[i]) !== i) { if (map.get(keys[i]) !== i) {
...@@ -203,6 +192,21 @@ function MapGetObject() { ...@@ -203,6 +192,21 @@ function MapGetObject() {
} }
} }
function MapSetGetObjectLarge() {
for (var i = 0; i < LargeN; i++) {
map.set(keys[i * 2], i);
}
for (var i = 0; i < LargeN; i++) {
if (map.get(keys[i * 2]) !== i) {
throw new Error();
}
}
for (var i = N; i < 2 * LargeN; i++) {
if (map.get(keys[i * 2 + 1]) !== undefined) {
throw new Error();
}
}
}
function MapDeleteObject() { function MapDeleteObject() {
// This is run more than once per setup so we will end up deleting items // This is run more than once per setup so we will end up deleting items
...@@ -212,7 +216,6 @@ function MapDeleteObject() { ...@@ -212,7 +216,6 @@ function MapDeleteObject() {
} }
} }
function MapForEach() { function MapForEach() {
map.forEach(function(v, k) { map.forEach(function(v, k) {
if (v !== k) { if (v !== k) {
...@@ -221,7 +224,6 @@ function MapForEach() { ...@@ -221,7 +224,6 @@ function MapForEach() {
}); });
} }
function MapIterator() { function MapIterator() {
var result = 0; var result = 0;
for (const v of map.values()) result += v; for (const v of map.values()) result += v;
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
"use strict";
load('../base.js'); load('../base.js');
load('common.js'); load('common.js');
......
...@@ -14,6 +14,11 @@ var MapBenchmark = new BenchmarkSuite('WeakMap', [1000], [ ...@@ -14,6 +14,11 @@ var MapBenchmark = new BenchmarkSuite('WeakMap', [1000], [
WeakMapTearDown), WeakMapTearDown),
]); ]);
var MapBenchmark = new BenchmarkSuite('WeakMapSetGet-Large', [1e7], [
new Benchmark('Set-Get', false, false, 0, WeakMapSetGetLarge,
WeakMapSetupBaseLarge, WeakMapTearDown),
]);
var wm; var wm;
...@@ -24,6 +29,12 @@ function WeakMapSetupBase() { ...@@ -24,6 +29,12 @@ function WeakMapSetupBase() {
} }
function WeakMapSetupBaseLarge() {
SetupObjectKeys(2 * LargeN);
wm = new WeakMap;
}
function WeakMapSetup() { function WeakMapSetup() {
WeakMapSetupBase(); WeakMapSetupBase();
WeakMapSet(); WeakMapSet();
...@@ -77,3 +88,19 @@ function WeakMapDelete() { ...@@ -77,3 +88,19 @@ function WeakMapDelete() {
wm.delete(keys[i]); wm.delete(keys[i]);
} }
} }
function WeakMapSetGetLarge() {
for (var i = 0; i < LargeN; i++) {
wm.set(keys[i * 2], i);
}
for (var i = 0; i < LargeN; i++) {
if (wm.get(keys[i * 2]) !== i) {
throw new Error();
}
}
for (var i = N; i < 2 * LargeN; i++) {
if (wm.get(keys[i * 2 + 1]) !== undefined) {
throw new Error();
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment