[test] add performance tests for String#startsWith

Add benchmarks for String.prototype.startsWith in order to keep track
of performance ahead of the torque port.

Bug: v8:8400
Change-Id: I0276b84b315024bba1a0d6f761ee2c6cf2c516a2
Reviewed-on: https://chromium-review.googlesource.com/c/1416070
Commit-Queue: Jakob Gruber <jgruber@chromium.org>
Reviewed-by: Jakob Gruber <jgruber@chromium.org>
Cr-Commit-Position: refs/heads/master@{#58870}
This commit is contained in:
Ujjwal Sharma 2019-01-17 01:18:53 +05:30 committed by Commit Bot
parent edab9a2021
commit 2f543fad22
2 changed files with 93 additions and 0 deletions

View File

@ -528,6 +528,21 @@
{"name": "endsIndex"}
]
},
{
"name": "StringStartsWith",
"main": "run.js",
"resources": [ "string-startswith.js" ],
"test_flags": [ "string-startswith" ],
"results_regexp": "^%s\\-Strings\\(Score\\): (.+)$",
"run_count": 1,
"flags": [ "--allow-natives-syntax" ],
"tests": [
{"name": "DirectStringsDirectSearch"},
{"name": "ConsStringsDirectSearch"},
{"name": "DirectStringsConsSearch"},
{"name": "ConsStringsConsSearch"}
]
},
{
"name": "StringSubstring",
"main": "run.js",

View File

@ -0,0 +1,78 @@
// Copyright 2019 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 createSuite(name, count, fn) {
new BenchmarkSuite(name, [count], [new Benchmark(name, true, false, 0, fn)]);
}
const inputs = [
'Lorem ipsum dolor sit amet, consectetur adipiscing elit.',
'Integer eu augue suscipit, accumsan ipsum nec, sagittis sem.',
'In vitae pellentesque dolor. Curabitur leo nunc, luctus vitae',
'risus eget, fermentum hendrerit justo.',
'hello'.repeat(1024),
'h',
''
];
const firsts = ['I', 'Integer', 'Lorem', 'risus', 'hello'];
function simpleHelper() {
let sum = 0;
for (const input of inputs) {
for (const first of firsts) {
sum += input.startsWith(first);
}
}
return sum;
}
function consInputHelper() {
let sum = 0;
for (const inputOne of inputs) {
for (const inputTwo of inputs) {
for (const first of firsts) {
// Skip if the length is too small for %ConstructConsString
if (inputOne.length + inputTwo.length < 13) break;
sum += %ConstructConsString(inputOne, inputTwo).startsWith(first);
}
}
}
return sum;
}
function consFirstHelper() {
let sum = 0;
for (const input of inputs) {
for (const firstOne of firsts) {
for (const firstTwo of firsts) {
// Skip if the length is too small for %ConstructConsString
if (firstOne.length + firstTwo.length < 13) break;
sum += input.startsWith(%ConstructConsString(firstOne, firstTwo));
}
}
}
return sum;
}
function doubleConsHelper() {
let sum = 0;
for (const inputOne of inputs) {
for (const inputTwo of inputs) {
for (const firstOne of firsts) {
for (const firstTwo of firsts) {
// Skip if the length is too small for %ConstructConsString
if (inputOne.length + inputTwo.length < 13 || firstOne.length + firstTwo.length) break;
sum += % ConstructConsString(inputOne, inputTwo).startsWith(
% ConstructConsString(firstOne, firstTwo)
);
}
}
}
}
}
createSuite('DirectStringsDirectSearch', 1000, simpleHelper);
createSuite('ConsStringsDirectSearch', 1000, consInputHelper);
createSuite('DirectStringsConsSearch', 1000, consFirstHelper);
createSuite('ConsStringsConsSearch', 1000, doubleConsHelper);