Skip to content

Commit edf8f8a

Browse files
mscdexrvagg
authored andcommitted
benchmark: split path benchmarks
This commit splits each path benchmark into separate posix and Windows benchmark files. This allows benchmarking (platform-)specific inputs against specific platforms (only). PR-URL: #5123 Reviewed-By: Roman Reiss <[email protected]> Reviewed-By: James M Snell <[email protected]>
1 parent 8d713d8 commit edf8f8a

24 files changed

+592
-152
lines changed

benchmark/path/basename-posix.js

+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
var common = require('../common.js');
2+
var path = require('path');
3+
var v8 = require('v8');
4+
5+
var bench = common.createBenchmark(main, {
6+
pathext: [
7+
'',
8+
'/',
9+
'/foo',
10+
'/foo/.bar.baz',
11+
['/foo/.bar.baz', '.baz'].join('|'),
12+
'foo',
13+
'foo/bar.',
14+
['foo/bar.', '.'].join('|'),
15+
'/foo/bar/baz/asdf/quux.html',
16+
['/foo/bar/baz/asdf/quux.html', '.html'].join('|')
17+
],
18+
n: [1e6]
19+
});
20+
21+
function main(conf) {
22+
var n = +conf.n;
23+
var p = path.posix;
24+
var input = '' + conf.pathext;
25+
var ext;
26+
var extIdx = input.indexOf('|');
27+
if (extIdx !== -1) {
28+
ext = input.slice(extIdx + 1);
29+
input = input.slice(0, extIdx);
30+
}
31+
32+
// Force optimization before starting the benchmark
33+
p.basename(input, ext);
34+
v8.setFlagsFromString('--allow_natives_syntax');
35+
eval('%OptimizeFunctionOnNextCall(p.basename)');
36+
p.basename(input, ext);
37+
38+
bench.start();
39+
for (var i = 0; i < n; i++) {
40+
p.basename(input, ext);
41+
}
42+
bench.end(n);
43+
}

benchmark/path/basename-win32.js

+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
var common = require('../common.js');
2+
var path = require('path');
3+
var v8 = require('v8');
4+
5+
var bench = common.createBenchmark(main, {
6+
pathext: [
7+
'',
8+
'C:\\',
9+
'C:\\foo',
10+
'D:\\foo\\.bar.baz',
11+
['E:\\foo\\.bar.baz','.baz'].join('|'),
12+
'foo',
13+
'foo\\bar.',
14+
['foo\\bar.', '.'].join('|'),
15+
'\\foo\\bar\\baz\\asdf\\quux.html',
16+
['\\foo\\bar\\baz\\asdf\\quux.html', '.html'].join('|')
17+
],
18+
n: [1e6]
19+
});
20+
21+
function main(conf) {
22+
var n = +conf.n;
23+
var p = path.win32;
24+
var input = '' + conf.pathext;
25+
var ext;
26+
var extIdx = input.indexOf('|');
27+
if (extIdx !== -1) {
28+
ext = input.slice(extIdx + 1);
29+
input = input.slice(0, extIdx);
30+
}
31+
32+
// Force optimization before starting the benchmark
33+
p.basename(input, ext);
34+
v8.setFlagsFromString('--allow_natives_syntax');
35+
eval('%OptimizeFunctionOnNextCall(p.basename)');
36+
p.basename(input, ext);
37+
38+
bench.start();
39+
for (var i = 0; i < n; i++) {
40+
p.basename(input, ext);
41+
}
42+
bench.end(n);
43+
}

benchmark/path/basename.js

-26
This file was deleted.

benchmark/path/dirname.js benchmark/path/dirname-posix.js

+15-6
Original file line numberDiff line numberDiff line change
@@ -3,23 +3,32 @@ var path = require('path');
33
var v8 = require('v8');
44

55
var bench = common.createBenchmark(main, {
6-
type: ['win32', 'posix'],
7-
n: [1e6],
6+
path: [
7+
'',
8+
'/',
9+
'/foo',
10+
'/foo/bar',
11+
'foo',
12+
'foo/bar',
13+
'/foo/bar/baz/asdf/quux'
14+
],
15+
n: [1e6]
816
});
917

1018
function main(conf) {
1119
var n = +conf.n;
12-
var p = path[conf.type];
20+
var p = path.posix;
21+
var input = '' + conf.path;
1322

1423
// Force optimization before starting the benchmark
15-
p.dirname('/foo/bar/baz/asdf/quux');
24+
p.dirname(input);
1625
v8.setFlagsFromString('--allow_natives_syntax');
1726
eval('%OptimizeFunctionOnNextCall(p.dirname)');
18-
p.dirname('/foo/bar/baz/asdf/quux');
27+
p.dirname(input);
1928

2029
bench.start();
2130
for (var i = 0; i < n; i++) {
22-
p.dirname('/foo/bar/baz/asdf/quux');
31+
p.dirname(input);
2332
}
2433
bench.end(n);
2534
}

benchmark/path/dirname-win32.js

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

benchmark/path/extname-posix.js

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

benchmark/path/extname-win32.js

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

benchmark/path/format.js benchmark/path/format-posix.js

+15-18
Original file line numberDiff line numberDiff line change
@@ -3,36 +3,33 @@ var path = require('path');
33
var v8 = require('v8');
44

55
var bench = common.createBenchmark(main, {
6-
type: ['win32', 'posix'],
7-
n: [1e7],
6+
props: [
7+
['/', '/home/user/dir', 'index.html', '.html', 'index'].join('|')
8+
],
9+
n: [1e7]
810
});
911

1012
function main(conf) {
1113
var n = +conf.n;
12-
var p = path[conf.type];
13-
var test = conf.type === 'win32' ? {
14-
root: 'C:\\',
15-
dir: 'C:\\path\\dir',
16-
base: 'index.html',
17-
ext: '.html',
18-
name: 'index'
19-
} : {
20-
root : '/',
21-
dir : '/home/user/dir',
22-
base : 'index.html',
23-
ext : '.html',
24-
name : 'index'
14+
var p = path.posix;
15+
var props = ('' + conf.props).split('|');
16+
var obj = {
17+
root: props[0] || '',
18+
dir: props[1] || '',
19+
base: props[2] || '',
20+
ext: props[3] || '',
21+
name: props[4] || '',
2522
};
2623

2724
// Force optimization before starting the benchmark
28-
p.format(test);
25+
p.format(obj);
2926
v8.setFlagsFromString('--allow_natives_syntax');
3027
eval('%OptimizeFunctionOnNextCall(p.format)');
31-
p.format(test);
28+
p.format(obj);
3229

3330
bench.start();
3431
for (var i = 0; i < n; i++) {
35-
p.format(test);
32+
p.format(obj);
3633
}
3734
bench.end(n);
3835
}

benchmark/path/format-win32.js

+35
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
var common = require('../common.js');
2+
var path = require('path');
3+
var v8 = require('v8');
4+
5+
var bench = common.createBenchmark(main, {
6+
props: [
7+
['C:\\', 'C:\\path\\dir', 'index.html', '.html', 'index'].join('|')
8+
],
9+
n: [1e7]
10+
});
11+
12+
function main(conf) {
13+
var n = +conf.n;
14+
var p = path.win32;
15+
var props = ('' + conf.props).split('|');
16+
var obj = {
17+
root: props[0] || '',
18+
dir: props[1] || '',
19+
base: props[2] || '',
20+
ext: props[3] || '',
21+
name: props[4] || '',
22+
};
23+
24+
// Force optimization before starting the benchmark
25+
p.format(obj);
26+
v8.setFlagsFromString('--allow_natives_syntax');
27+
eval('%OptimizeFunctionOnNextCall(p.format)');
28+
p.format(obj);
29+
30+
bench.start();
31+
for (var i = 0; i < n; i++) {
32+
p.format(obj);
33+
}
34+
bench.end(n);
35+
}

benchmark/path/extname.js benchmark/path/isAbsolute-posix.js

+14-8
Original file line numberDiff line numberDiff line change
@@ -3,24 +3,30 @@ var path = require('path');
33
var v8 = require('v8');
44

55
var bench = common.createBenchmark(main, {
6-
type: ['win32', 'posix'],
7-
n: [1e6],
6+
path: [
7+
'',
8+
'.',
9+
'/foo/bar',
10+
'/baz/..',
11+
'bar/baz'
12+
],
13+
n: [1e6]
814
});
915

1016
function main(conf) {
1117
var n = +conf.n;
12-
var p = path[conf.type];
18+
var p = path.posix;
19+
var input = '' + conf.path;
1320

1421
// Force optimization before starting the benchmark
15-
p.extname('index.html');
22+
p.isAbsolute(input);
1623
v8.setFlagsFromString('--allow_natives_syntax');
17-
eval('%OptimizeFunctionOnNextCall(p.extname)');
18-
p.extname('index.html');
24+
eval('%OptimizeFunctionOnNextCall(p.isAbsolute)');
25+
p.isAbsolute(input);
1926

2027
bench.start();
2128
for (var i = 0; i < n; i++) {
22-
p.extname('index.html');
23-
p.extname('index');
29+
p.isAbsolute(input);
2430
}
2531
bench.end(n);
2632
}

0 commit comments

Comments
 (0)