[test] Add js-perf-test for object destructuring assignment
This CL adds Babel, ForLoop, DestructuringAssignment perf tests for object destructuring assignment. Bug: v8:11614 Change-Id: Iab922f9d79dbb7888b6583e6bf2930e229ad6f38 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3538280 Reviewed-by: Leszek Swirski <leszeks@chromium.org> Commit-Queue: Leszek Swirski <leszeks@chromium.org> Cr-Commit-Position: refs/heads/main@{#79545}
This commit is contained in:
parent
b2978927d8
commit
6691b9c2c2
@ -137,6 +137,18 @@
|
|||||||
{"name": "Spread"}
|
{"name": "Spread"}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "ObjectDestructuringAssignment",
|
||||||
|
"path": ["ObjectDestructuringAssignment"],
|
||||||
|
"main": "run.js",
|
||||||
|
"resources": [],
|
||||||
|
"results_regexp": "^%s\\-ObjectDestructuringAssignment\\(Score\\): (.+)$",
|
||||||
|
"tests": [
|
||||||
|
{"name": "Babel"},
|
||||||
|
{"name": "ForLoop"},
|
||||||
|
{"name": "DestructuringAssignment"}
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "SpreadCallsGeneral",
|
"name": "SpreadCallsGeneral",
|
||||||
"path": ["SpreadCallsGeneral"],
|
"path": ["SpreadCallsGeneral"],
|
||||||
|
98
test/js-perf-test/ObjectDestructuringAssignment/run.js
Normal file
98
test/js-perf-test/ObjectDestructuringAssignment/run.js
Normal file
@ -0,0 +1,98 @@
|
|||||||
|
// Copyright 2022 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.
|
||||||
|
|
||||||
|
const props = {
|
||||||
|
key: 'abc',
|
||||||
|
ref: 1234,
|
||||||
|
a: 10,
|
||||||
|
b: 20,
|
||||||
|
c: 30,
|
||||||
|
d: 40,
|
||||||
|
e: 50
|
||||||
|
};
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// Benchmark: Babel
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
function _objectWithoutProperties(source, excluded) {
|
||||||
|
var target = _objectWithoutPropertiesLoose(source, excluded);
|
||||||
|
var key, i;
|
||||||
|
var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
|
||||||
|
for (i = 0; i < sourceSymbolKeys.length; i++) {
|
||||||
|
key = sourceSymbolKeys[i];
|
||||||
|
if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
|
||||||
|
target[key] = source[key];
|
||||||
|
}
|
||||||
|
return target;
|
||||||
|
}
|
||||||
|
|
||||||
|
function _objectWithoutPropertiesLoose(source, excluded) {
|
||||||
|
var target = {};
|
||||||
|
var sourceKeys = Object.keys(source);
|
||||||
|
var key, i;
|
||||||
|
for (i = 0; i < sourceKeys.length; i++) {
|
||||||
|
key = sourceKeys[i];
|
||||||
|
if (excluded.indexOf(key) >= 0) continue;
|
||||||
|
target[key] = source[key];
|
||||||
|
}
|
||||||
|
return target;
|
||||||
|
}
|
||||||
|
function Babel() {
|
||||||
|
const key = props.key;
|
||||||
|
const ref = props.ref;
|
||||||
|
const normalizedProps = _objectWithoutProperties(props, ['key', 'ref']);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// Benchmark: ForLoop
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
function ForLoop() {
|
||||||
|
const key = props.key;
|
||||||
|
const ref = props.ref;
|
||||||
|
const normalizedProps = {};
|
||||||
|
for (let i in props) {
|
||||||
|
if (i != 'key' && i != 'ref') {
|
||||||
|
normalizedProps[i] = props[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// Benchmark: DestructuringAssignment
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
function DestructuringAssignment() {
|
||||||
|
const {key, ref, ...normalizedProps} = props;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// Setup and Run
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
d8.file.execute('../base.js');
|
||||||
|
|
||||||
|
var success = true;
|
||||||
|
|
||||||
|
function PrintResult(name, result) {
|
||||||
|
print(name + '-ObjectDestructuringAssignment(Score): ' + result);
|
||||||
|
}
|
||||||
|
|
||||||
|
function PrintError(name, error) {
|
||||||
|
PrintResult(name, error);
|
||||||
|
success = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function CreateBenchmark(name, f) {
|
||||||
|
new BenchmarkSuite(name, [100], [new Benchmark(name, false, false, 0, f)]);
|
||||||
|
}
|
||||||
|
|
||||||
|
CreateBenchmark('Babel', Babel);
|
||||||
|
CreateBenchmark('ForLoop', ForLoop);
|
||||||
|
CreateBenchmark('DestructuringAssignment', DestructuringAssignment);
|
||||||
|
|
||||||
|
BenchmarkSuite.config.doWarmup = undefined;
|
||||||
|
BenchmarkSuite.config.doDeterministic = undefined;
|
||||||
|
BenchmarkSuite.RunSuites({NotifyResult: PrintResult, NotifyError: PrintError});
|
Loading…
Reference in New Issue
Block a user