[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:
jameslahm 2022-03-19 23:46:53 +08:00 committed by V8 LUCI CQ
parent b2978927d8
commit 6691b9c2c2
2 changed files with 110 additions and 0 deletions

View File

@ -137,6 +137,18 @@
{"name": "Spread"}
]
},
{
"name": "ObjectDestructuringAssignment",
"path": ["ObjectDestructuringAssignment"],
"main": "run.js",
"resources": [],
"results_regexp": "^%s\\-ObjectDestructuringAssignment\\(Score\\): (.+)$",
"tests": [
{"name": "Babel"},
{"name": "ForLoop"},
{"name": "DestructuringAssignment"}
]
},
{
"name": "SpreadCallsGeneral",
"path": ["SpreadCallsGeneral"],

View 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});