Skip to content

Commit 99d9d7e

Browse files
nwoltmanbrendanashworth
authored andcommitted
benchmark: add remaining path benchmarks & optimize
As a follow-up to 0d15161, this commit adds benchmarks for the rest of the path functions and also forces V8 to optimize the functions before starting the benchmark test. PR-URL: #2103 Reviewed-By: Brendan Ashworth <[email protected]>
1 parent ac70bc8 commit 99d9d7e

File tree

10 files changed

+147
-0
lines changed

10 files changed

+147
-0
lines changed

benchmark/path/basename.js

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
var common = require('../common.js');
2+
var path = require('path');
3+
var v8 = require('v8');
4+
5+
var bench = common.createBenchmark(main, {
6+
type: ['win32', 'posix'],
7+
n: [1e6],
8+
});
9+
10+
function main(conf) {
11+
var n = +conf.n;
12+
var p = path[conf.type];
13+
14+
// Force optimization before starting the benchmark
15+
p.basename('/foo/bar/baz/asdf/quux.html');
16+
v8.setFlagsFromString('--allow_natives_syntax');
17+
eval('%OptimizeFunctionOnNextCall(p.basename)');
18+
p.basename('/foo/bar/baz/asdf/quux.html');
19+
20+
bench.start();
21+
for (var i = 0; i < n; i++) {
22+
p.basename('/foo/bar/baz/asdf/quux.html');
23+
p.basename('/foo/bar/baz/asdf/quux.html', '.html');
24+
}
25+
bench.end(n);
26+
}

benchmark/path/dirname.js

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
var common = require('../common.js');
2+
var path = require('path');
3+
var v8 = require('v8');
4+
5+
var bench = common.createBenchmark(main, {
6+
type: ['win32', 'posix'],
7+
n: [1e6],
8+
});
9+
10+
function main(conf) {
11+
var n = +conf.n;
12+
var p = path[conf.type];
13+
14+
// Force optimization before starting the benchmark
15+
p.dirname('/foo/bar/baz/asdf/quux');
16+
v8.setFlagsFromString('--allow_natives_syntax');
17+
eval('%OptimizeFunctionOnNextCall(p.dirname)');
18+
p.dirname('/foo/bar/baz/asdf/quux');
19+
20+
bench.start();
21+
for (var i = 0; i < n; i++) {
22+
p.dirname('/foo/bar/baz/asdf/quux');
23+
}
24+
bench.end(n);
25+
}

benchmark/path/extname.js

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
var common = require('../common.js');
2+
var path = require('path');
3+
var v8 = require('v8');
4+
5+
var bench = common.createBenchmark(main, {
6+
type: ['win32', 'posix'],
7+
n: [1e6],
8+
});
9+
10+
function main(conf) {
11+
var n = +conf.n;
12+
var p = path[conf.type];
13+
14+
// Force optimization before starting the benchmark
15+
p.extname('index.html');
16+
v8.setFlagsFromString('--allow_natives_syntax');
17+
eval('%OptimizeFunctionOnNextCall(p.extname)');
18+
p.extname('index.html');
19+
20+
bench.start();
21+
for (var i = 0; i < n; i++) {
22+
p.extname('index.html');
23+
p.extname('index');
24+
}
25+
bench.end(n);
26+
}

benchmark/path/format.js

+7
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
var common = require('../common.js');
22
var path = require('path');
3+
var v8 = require('v8');
34

45
var bench = common.createBenchmark(main, {
56
type: ['win32', 'posix'],
@@ -23,6 +24,12 @@ function main(conf) {
2324
name : 'index'
2425
};
2526

27+
// Force optimization before starting the benchmark
28+
p.format(test);
29+
v8.setFlagsFromString('--allow_natives_syntax');
30+
eval('%OptimizeFunctionOnNextCall(p.format)');
31+
p.format(test);
32+
2633
bench.start();
2734
for (var i = 0; i < n; i++) {
2835
p.format(test);

benchmark/path/isAbsolute.js

+7
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
var common = require('../common.js');
22
var path = require('path');
3+
var v8 = require('v8');
34

45
var bench = common.createBenchmark(main, {
56
type: ['win32', 'posix'],
@@ -13,6 +14,12 @@ function main(conf) {
1314
? ['//server', 'C:\\baz\\..', 'bar\\baz', '.']
1415
: ['/foo/bar', '/baz/..', 'bar/baz', '.'];
1516

17+
// Force optimization before starting the benchmark
18+
p.isAbsolute(tests[0]);
19+
v8.setFlagsFromString('--allow_natives_syntax');
20+
eval('%OptimizeFunctionOnNextCall(p.isAbsolute)');
21+
p.isAbsolute(tests[0]);
22+
1623
bench.start();
1724
for (var i = 0; i < n; i++) {
1825
runTests(p, tests);

benchmark/path/join.js

+7
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
var common = require('../common.js');
22
var path = require('path');
3+
var v8 = require('v8');
34

45
var bench = common.createBenchmark(main, {
56
type: ['win32', 'posix'],
@@ -10,6 +11,12 @@ function main(conf) {
1011
var n = +conf.n;
1112
var p = path[conf.type];
1213

14+
// Force optimization before starting the benchmark
15+
p.join('/foo', 'bar', '', 'baz/asdf', 'quux', '..');
16+
v8.setFlagsFromString('--allow_natives_syntax');
17+
eval('%OptimizeFunctionOnNextCall(p.join)');
18+
p.join('/foo', 'bar', '', 'baz/asdf', 'quux', '..');
19+
1320
bench.start();
1421
for (var i = 0; i < n; i++) {
1522
p.join('/foo', 'bar', '', 'baz/asdf', 'quux', '..');

benchmark/path/normalize.js

+7
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
var common = require('../common.js');
22
var path = require('path');
3+
var v8 = require('v8');
34

45
var bench = common.createBenchmark(main, {
56
type: ['win32', 'posix'],
@@ -10,6 +11,12 @@ function main(conf) {
1011
var n = +conf.n;
1112
var p = path[conf.type];
1213

14+
// Force optimization before starting the benchmark
15+
p.normalize('/foo/bar//baz/asdf/quux/..');
16+
v8.setFlagsFromString('--allow_natives_syntax');
17+
eval('%OptimizeFunctionOnNextCall(p.normalize)');
18+
p.normalize('/foo/bar//baz/asdf/quux/..');
19+
1320
bench.start();
1421
for (var i = 0; i < n; i++) {
1522
p.normalize('/foo/bar//baz/asdf/quux/..');

benchmark/path/parse.js

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
var common = require('../common.js');
2+
var path = require('path');
3+
var v8 = require('v8');
4+
5+
var bench = common.createBenchmark(main, {
6+
type: ['win32', 'posix'],
7+
n: [1e6],
8+
});
9+
10+
function main(conf) {
11+
var n = +conf.n;
12+
var p = path[conf.type];
13+
var test = conf.type === 'win32'
14+
? 'C:\\path\\dir\\index.html'
15+
: '/home/user/dir/index.html';
16+
17+
// Force optimization before starting the benchmark
18+
p.parse(test);
19+
v8.setFlagsFromString('--allow_natives_syntax');
20+
eval('%OptimizeFunctionOnNextCall(p.parse)');
21+
p.parse(test);
22+
23+
bench.start();
24+
for (var i = 0; i < n; i++) {
25+
p.parse(test);
26+
}
27+
bench.end(n);
28+
}

benchmark/path/relative.js

+7
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
var common = require('../common.js');
22
var path = require('path');
3+
var v8 = require('v8');
34

45
var bench = common.createBenchmark(main, {
56
type: ['win32', 'posix'],
@@ -10,6 +11,12 @@ function main(conf) {
1011
var n = +conf.n;
1112
var runTest = conf.type === 'win32' ? runWin32Test : runPosixTest;
1213

14+
// Force optimization before starting the benchmark
15+
runTest();
16+
v8.setFlagsFromString('--allow_natives_syntax');
17+
eval('%OptimizeFunctionOnNextCall(path[conf.type].relative)');
18+
runTest();
19+
1320
bench.start();
1421
for (var i = 0; i < n; i++) {
1522
runTest();

benchmark/path/resolve.js

+7
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
var common = require('../common.js');
22
var path = require('path');
3+
var v8 = require('v8');
34

45
var bench = common.createBenchmark(main, {
56
type: ['win32', 'posix'],
@@ -10,6 +11,12 @@ function main(conf) {
1011
var n = +conf.n;
1112
var p = path[conf.type];
1213

14+
// Force optimization before starting the benchmark
15+
p.resolve('foo/bar', '/tmp/file/', '..', 'a/../subfile');
16+
v8.setFlagsFromString('--allow_natives_syntax');
17+
eval('%OptimizeFunctionOnNextCall(p.resolve)');
18+
p.resolve('foo/bar', '/tmp/file/', '..', 'a/../subfile');
19+
1320
bench.start();
1421
for (var i = 0; i < n; i++) {
1522
p.resolve('foo/bar', '/tmp/file/', '..', 'a/../subfile');

0 commit comments

Comments
 (0)