[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": "ObjectDestructuringAssignment",
|
||||
"path": ["ObjectDestructuringAssignment"],
|
||||
"main": "run.js",
|
||||
"resources": [],
|
||||
"results_regexp": "^%s\\-ObjectDestructuringAssignment\\(Score\\): (.+)$",
|
||||
"tests": [
|
||||
{"name": "Babel"},
|
||||
{"name": "ForLoop"},
|
||||
{"name": "DestructuringAssignment"}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "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