Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2219)

Unified Diff: test/js-perf-test/Array/filter.js

Issue 2769973005: [JSPerfTests] New tests for Array.prototype.filter and map. (Closed)
Patch Set: Naive tests go generic. Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | test/js-perf-test/Array/map.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: test/js-perf-test/Array/filter.js
diff --git a/test/js-perf-test/Array/filter.js b/test/js-perf-test/Array/filter.js
index 58995849fd423ae9d4077a45cbc04ab23d83913d..de510a4097fbb4748050b24836e548774b4af685 100644
--- a/test/js-perf-test/Array/filter.js
+++ b/test/js-perf-test/Array/filter.js
@@ -2,22 +2,18 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-new BenchmarkSuite('Filter', [1000], [
- new Benchmark('SmiFilter', false, false, 0,
- Filter, SmiFilterSetup, ()=>{}),
- new Benchmark('DoubleFilter', false, false, 0,
- Filter, DoubleFilterSetup, ()=>{}),
- new Benchmark('FastFilter', false, false, 0,
- Filter, FastFilterSetup, ()=>{}),
- new Benchmark('HoleySmiFilter', false, false, 0,
- Filter, HoleySmiFilterSetup, ()=>{}),
- new Benchmark('HoleyDoubleFilter', false, false, 0,
- Filter, HoleyDoubleFilterSetup, ()=>{}),
- new Benchmark('HoleyFastFilter', false, false, 0,
- Filter, HoleyFastFilterSetup, ()=>{}),
- new Benchmark('ObjectFilter', false, false, 0,
- GenericFilter, ObjectFilterSetup, ()=>{}),
-]);
+function benchy(name, test, testSetup) {
+ new BenchmarkSuite(name, [1000],
+ [
+ new Benchmark(name, false, false, 0, test, testSetup, ()=>{})
+ ]);
+}
+
+benchy('NaiveFilterReplacement', NaiveFilter, NaiveFilterSetup);
+benchy('DoubleFilter', DoubleFilter, DoubleFilterSetup);
+benchy('SmiFilter', SmiFilter, SmiFilterSetup);
+benchy('FastFilter', FastFilter, FastFilterSetup);
+benchy('ObjectFilter', GenericFilter, ObjectFilterSetup);
var array;
var func;
@@ -25,7 +21,15 @@ var this_arg;
var result;
var array_size = 100;
-function Filter() {
+// Although these functions have the same code, they are separated for
+// clean IC feedback.
+function DoubleFilter() {
+ result = array.filter(func, this_arg);
+}
+function SmiFilter() {
+ result = array.filter(func, this_arg);
+}
+function FastFilter() {
result = array.filter(func, this_arg);
}
@@ -33,52 +37,52 @@ function GenericFilter() {
result = Array.prototype.filter.call(array, func, this_arg);
}
+// From the lodash implementation.
+function NaiveFilter() {
+ let index = -1
+ let resIndex = 0
+ const length = array == null ? 0 : array.length
+ const result = []
+
+ while (++index < length) {
+ const value = array[index]
+ if (func(value, index, array)) {
+ result[resIndex++] = value
+ }
+ }
+ return result
+}
+
+function NaiveFilterSetup() {
+ // Prime NaiveFilter with polymorphic cases.
+ array = [1, 2, 3];
+ func = ()=>true;
+ NaiveFilter();
+ NaiveFilter();
+ array = [3.4]; NaiveFilter();
+ array = new Array(10); array[0] = 'hello'; NaiveFilter();
+ SmiFilterSetup();
+ delete array[1];
+}
+
function SmiFilterSetup() {
array = new Array();
for (var i = 0; i < array_size; i++) array[i] = i;
func = (value, index, object) => { return value % 2 === 0; };
}
-function HoleySmiFilterSetup() {
- array = new Array(array_size);
- for (var i = 0; i < array_size; i++) {
- if (i % 2 === 0) array[i] = i;
- }
- func = (value, index, object) => { return value % 2 === 0; };
-}
-
function DoubleFilterSetup() {
array = new Array();
for (var i = 0; i < array_size; i++) array[i] = (i + 0.5);
func = (value, index, object) => { return Math.floor(value) % 2 === 0; };
}
-function HoleyDoubleFilterSetup() {
- array = new Array(array_size);
- for (var i = 0; i < array_size; i++) {
- if (i != 3) {
- array[i] = (i + 0.5);
- }
- }
- func = (value, index, object) => { return Math.floor(value) % 2 === 0; };
-}
-
function FastFilterSetup() {
array = new Array();
for (var i = 0; i < array_size; i++) array[i] = 'value ' + i;
func = (value, index, object) => { return index % 2 === 0; };
}
-function HoleyFastFilterSetup() {
- array = new Array(array_size);
- for (var i = 0; i < array_size; i++) {
- if (i % 2 != 0) {
- array[i] = 'value ' + i;
- }
- }
- func = (value, index, object) => { return index % 2 === 0; };
-}
-
function ObjectFilterSetup() {
array = { length: array_size };
for (var i = 0; i < array_size; i++) {
« no previous file with comments | « no previous file | test/js-perf-test/Array/map.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698