Skip to content

benchmark: Add remaining path benchmarks & optimize #2103

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 26 additions & 0 deletions benchmark/path/basename.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
var common = require('../common.js');
var path = require('path');
var v8 = require('v8');

var bench = common.createBenchmark(main, {
type: ['win32', 'posix'],
n: [1e6],
});

function main(conf) {
var n = +conf.n;
var p = path[conf.type];

// Force optimization before starting the benchmark
p.basename('/foo/bar/baz/asdf/quux.html');
v8.setFlagsFromString('--allow_natives_syntax');
eval('%OptimizeFunctionOnNextCall(p.basename)');
p.basename('/foo/bar/baz/asdf/quux.html');
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why the call is made in all the cases before benchmark is started?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is because it takes V8 extra time to optimize the function when it is called after %OptimizeFunctionOnNextCall is called on it. So calling the function before the benchmark starts means that the time it takes for V8 to optimize the function does not get recorded as part of the benchmark time.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice :-) Did you check if v8 is really going to optimize the function? If the function is never going to be optimized by v8, then we don't have to use this, right?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Even if it doesn't now, that could change in the future, so it might be worth keeping it there anyway.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@mscdex Oh okay then :-)


bench.start();
for (var i = 0; i < n; i++) {
p.basename('/foo/bar/baz/asdf/quux.html');
p.basename('/foo/bar/baz/asdf/quux.html', '.html');
}
bench.end(n);
}
25 changes: 25 additions & 0 deletions benchmark/path/dirname.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
var common = require('../common.js');
var path = require('path');
var v8 = require('v8');

var bench = common.createBenchmark(main, {
type: ['win32', 'posix'],
n: [1e6],
});

function main(conf) {
var n = +conf.n;
var p = path[conf.type];

// Force optimization before starting the benchmark
p.dirname('/foo/bar/baz/asdf/quux');
v8.setFlagsFromString('--allow_natives_syntax');
eval('%OptimizeFunctionOnNextCall(p.dirname)');
p.dirname('/foo/bar/baz/asdf/quux');

bench.start();
for (var i = 0; i < n; i++) {
p.dirname('/foo/bar/baz/asdf/quux');
}
bench.end(n);
}
26 changes: 26 additions & 0 deletions benchmark/path/extname.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
var common = require('../common.js');
var path = require('path');
var v8 = require('v8');

var bench = common.createBenchmark(main, {
type: ['win32', 'posix'],
n: [1e6],
});

function main(conf) {
var n = +conf.n;
var p = path[conf.type];

// Force optimization before starting the benchmark
p.extname('index.html');
v8.setFlagsFromString('--allow_natives_syntax');
eval('%OptimizeFunctionOnNextCall(p.extname)');
p.extname('index.html');

bench.start();
for (var i = 0; i < n; i++) {
p.extname('index.html');
p.extname('index');
}
bench.end(n);
}
7 changes: 7 additions & 0 deletions benchmark/path/format.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
var common = require('../common.js');
var path = require('path');
var v8 = require('v8');

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

// Force optimization before starting the benchmark
p.format(test);
v8.setFlagsFromString('--allow_natives_syntax');
eval('%OptimizeFunctionOnNextCall(p.format)');
p.format(test);

bench.start();
for (var i = 0; i < n; i++) {
p.format(test);
Expand Down
7 changes: 7 additions & 0 deletions benchmark/path/isAbsolute.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
var common = require('../common.js');
var path = require('path');
var v8 = require('v8');

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

// Force optimization before starting the benchmark
p.isAbsolute(tests[0]);
v8.setFlagsFromString('--allow_natives_syntax');
eval('%OptimizeFunctionOnNextCall(p.isAbsolute)');
p.isAbsolute(tests[0]);

bench.start();
for (var i = 0; i < n; i++) {
runTests(p, tests);
Expand Down
7 changes: 7 additions & 0 deletions benchmark/path/join.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
var common = require('../common.js');
var path = require('path');
var v8 = require('v8');

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

// Force optimization before starting the benchmark
p.join('/foo', 'bar', '', 'baz/asdf', 'quux', '..');
v8.setFlagsFromString('--allow_natives_syntax');
eval('%OptimizeFunctionOnNextCall(p.join)');
p.join('/foo', 'bar', '', 'baz/asdf', 'quux', '..');

bench.start();
for (var i = 0; i < n; i++) {
p.join('/foo', 'bar', '', 'baz/asdf', 'quux', '..');
Expand Down
7 changes: 7 additions & 0 deletions benchmark/path/normalize.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
var common = require('../common.js');
var path = require('path');
var v8 = require('v8');

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

// Force optimization before starting the benchmark
p.normalize('/foo/bar//baz/asdf/quux/..');
v8.setFlagsFromString('--allow_natives_syntax');
eval('%OptimizeFunctionOnNextCall(p.normalize)');
p.normalize('/foo/bar//baz/asdf/quux/..');

bench.start();
for (var i = 0; i < n; i++) {
p.normalize('/foo/bar//baz/asdf/quux/..');
Expand Down
28 changes: 28 additions & 0 deletions benchmark/path/parse.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
var common = require('../common.js');
var path = require('path');
var v8 = require('v8');

var bench = common.createBenchmark(main, {
type: ['win32', 'posix'],
n: [1e6],
});

function main(conf) {
var n = +conf.n;
var p = path[conf.type];
var test = conf.type === 'win32'
? 'C:\\path\\dir\\index.html'
: '/home/user/dir/index.html';

// Force optimization before starting the benchmark
p.parse(test);
v8.setFlagsFromString('--allow_natives_syntax');
eval('%OptimizeFunctionOnNextCall(p.parse)');
p.parse(test);

bench.start();
for (var i = 0; i < n; i++) {
p.parse(test);
}
bench.end(n);
}
7 changes: 7 additions & 0 deletions benchmark/path/relative.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
var common = require('../common.js');
var path = require('path');
var v8 = require('v8');

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

// Force optimization before starting the benchmark
runTest();
v8.setFlagsFromString('--allow_natives_syntax');
eval('%OptimizeFunctionOnNextCall(path[conf.type].relative)');
runTest();

bench.start();
for (var i = 0; i < n; i++) {
runTest();
Expand Down
7 changes: 7 additions & 0 deletions benchmark/path/resolve.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
var common = require('../common.js');
var path = require('path');
var v8 = require('v8');

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

// Force optimization before starting the benchmark
p.resolve('foo/bar', '/tmp/file/', '..', 'a/../subfile');
v8.setFlagsFromString('--allow_natives_syntax');
eval('%OptimizeFunctionOnNextCall(p.resolve)');
p.resolve('foo/bar', '/tmp/file/', '..', 'a/../subfile');

bench.start();
for (var i = 0; i < n; i++) {
p.resolve('foo/bar', '/tmp/file/', '..', 'a/../subfile');
Expand Down