591c92acac
This patch adds a micro-benchmark comparing Array#indexOf, Array#includes, and a roughly equivalent `for` loop. The benchmark can be used to measure any Array#{indexOf,includes} optimizations we implement in the future. Test: tools/run_perf.py --binary-override-path=out/x64.release/d8 \ --filter=JSTests/ArrayIndexOfIncludesPolymorphic \ --extra-flags=--trace-turbo test/js-perf-test/JSTests.json Bug: v8:8388 Change-Id: I9150d3e56e9d4cb2ffe6baa50ee8cddf8df0ac74 Reviewed-on: https://chromium-review.googlesource.com/c/1307430 Reviewed-by: Benedikt Meurer <bmeurer@chromium.org> Commit-Queue: Mathias Bynens <mathias@chromium.org> Cr-Commit-Position: refs/heads/master@{#57156}
42 lines
1.0 KiB
JavaScript
42 lines
1.0 KiB
JavaScript
// 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.
|
|
|
|
function benchy(fn, name) {
|
|
new BenchmarkSuite(name, [1], [
|
|
new Benchmark(name, true, false, 0, fn),
|
|
]);
|
|
}
|
|
|
|
function forLoop(array, searchValue) {
|
|
for (let i = 0; i < array.length; ++i) {
|
|
if (array[i] === searchValue) return true;
|
|
}
|
|
return farraylse;
|
|
}
|
|
|
|
function indexOf(array, searchValue) {
|
|
return array.indexOf(searchValue) !== -1;
|
|
}
|
|
|
|
function includes(array, searchValue) {
|
|
return array.includes(searchValue);
|
|
}
|
|
|
|
const PACKED = [
|
|
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
|
|
];
|
|
const HOLEY = new Array(PACKED.length);
|
|
for (let i = 0; i < PACKED.length; ++i)
|
|
HOLEY[i] = PACKED[i];
|
|
|
|
function helper(fn) {
|
|
const SEARCH_VALUE = 15;
|
|
const result = fn(PACKED, SEARCH_VALUE) && fn(HOLEY, SEARCH_VALUE);
|
|
return result;
|
|
}
|
|
|
|
benchy(() => helper(forLoop), 'for loop');
|
|
benchy(() => helper(indexOf), 'Array#indexOf');
|
|
benchy(() => helper(includes), 'Array#includes');
|