From 847f7775998f23f8c9f5618f8a3ad91b22f335c4 Mon Sep 17 00:00:00 2001 From: Andreas Madsen Date: Fri, 29 Jan 2016 21:40:04 +0100 Subject: [PATCH 1/4] benchmark: move misc to categorized directories --- benchmark/{misc => buffers}/string-decoder.js | 0 benchmark/{misc => child_process}/child-process-read.js | 0 benchmark/{misc => child_process}/spawn-echo.js | 0 benchmark/{misc => domain}/domain-fn-args.js | 0 benchmark/{misc => module}/module-loader.js | 0 benchmark/{misc => process}/bench-env.js | 0 benchmark/{misc => process}/bench-hrtime.js | 0 benchmark/{misc => process}/next-tick-breadth-args.js | 0 benchmark/{misc => process}/next-tick-breadth.js | 0 benchmark/{misc => process}/next-tick-depth-args.js | 0 benchmark/{misc => process}/next-tick-depth.js | 0 benchmark/{misc => timers}/timers.js | 0 benchmark/{misc => url}/url.js | 0 13 files changed, 0 insertions(+), 0 deletions(-) rename benchmark/{misc => buffers}/string-decoder.js (100%) rename benchmark/{misc => child_process}/child-process-read.js (100%) rename benchmark/{misc => child_process}/spawn-echo.js (100%) rename benchmark/{misc => domain}/domain-fn-args.js (100%) rename benchmark/{misc => module}/module-loader.js (100%) rename benchmark/{misc => process}/bench-env.js (100%) rename benchmark/{misc => process}/bench-hrtime.js (100%) rename benchmark/{misc => process}/next-tick-breadth-args.js (100%) rename benchmark/{misc => process}/next-tick-breadth.js (100%) rename benchmark/{misc => process}/next-tick-depth-args.js (100%) rename benchmark/{misc => process}/next-tick-depth.js (100%) rename benchmark/{misc => timers}/timers.js (100%) rename benchmark/{misc => url}/url.js (100%) diff --git a/benchmark/misc/string-decoder.js b/benchmark/buffers/string-decoder.js similarity index 100% rename from benchmark/misc/string-decoder.js rename to benchmark/buffers/string-decoder.js diff --git a/benchmark/misc/child-process-read.js b/benchmark/child_process/child-process-read.js similarity index 100% rename from benchmark/misc/child-process-read.js rename to benchmark/child_process/child-process-read.js diff --git a/benchmark/misc/spawn-echo.js b/benchmark/child_process/spawn-echo.js similarity index 100% rename from benchmark/misc/spawn-echo.js rename to benchmark/child_process/spawn-echo.js diff --git a/benchmark/misc/domain-fn-args.js b/benchmark/domain/domain-fn-args.js similarity index 100% rename from benchmark/misc/domain-fn-args.js rename to benchmark/domain/domain-fn-args.js diff --git a/benchmark/misc/module-loader.js b/benchmark/module/module-loader.js similarity index 100% rename from benchmark/misc/module-loader.js rename to benchmark/module/module-loader.js diff --git a/benchmark/misc/bench-env.js b/benchmark/process/bench-env.js similarity index 100% rename from benchmark/misc/bench-env.js rename to benchmark/process/bench-env.js diff --git a/benchmark/misc/bench-hrtime.js b/benchmark/process/bench-hrtime.js similarity index 100% rename from benchmark/misc/bench-hrtime.js rename to benchmark/process/bench-hrtime.js diff --git a/benchmark/misc/next-tick-breadth-args.js b/benchmark/process/next-tick-breadth-args.js similarity index 100% rename from benchmark/misc/next-tick-breadth-args.js rename to benchmark/process/next-tick-breadth-args.js diff --git a/benchmark/misc/next-tick-breadth.js b/benchmark/process/next-tick-breadth.js similarity index 100% rename from benchmark/misc/next-tick-breadth.js rename to benchmark/process/next-tick-breadth.js diff --git a/benchmark/misc/next-tick-depth-args.js b/benchmark/process/next-tick-depth-args.js similarity index 100% rename from benchmark/misc/next-tick-depth-args.js rename to benchmark/process/next-tick-depth-args.js diff --git a/benchmark/misc/next-tick-depth.js b/benchmark/process/next-tick-depth.js similarity index 100% rename from benchmark/misc/next-tick-depth.js rename to benchmark/process/next-tick-depth.js diff --git a/benchmark/misc/timers.js b/benchmark/timers/timers.js similarity index 100% rename from benchmark/misc/timers.js rename to benchmark/timers/timers.js diff --git a/benchmark/misc/url.js b/benchmark/url/url.js similarity index 100% rename from benchmark/misc/url.js rename to benchmark/url/url.js From 3f751dde2d9416ea73bd822ac9181be4154e7fdb Mon Sep 17 00:00:00 2001 From: Andreas Madsen Date: Fri, 29 Jan 2016 22:15:39 +0100 Subject: [PATCH 2/4] benchmark: merge url.js with url-resolve.js url.js was broken since it didn't use the common.js runner. This fixes that issue by merging it with url-resolve.js, which also benchmarks url.resolve. --- benchmark/url/url-resolve.js | 37 +++++++++++++++++++++----------- benchmark/url/url.js | 41 ------------------------------------ 2 files changed, 25 insertions(+), 53 deletions(-) delete mode 100644 benchmark/url/url.js diff --git a/benchmark/url/url-resolve.js b/benchmark/url/url-resolve.js index 18f67e82e30787..8372132e4d269e 100644 --- a/benchmark/url/url-resolve.js +++ b/benchmark/url/url-resolve.js @@ -3,30 +3,43 @@ var common = require('../common.js'); var url = require('url'); var v8 = require('v8'); +var hrefs = [ + 'http://example.com/', + 'http://nodejs.org/docs/latest/api/url.html#url_url_format_urlobj', + 'http://blog.nodejs.org/', + 'https://encrypted.google.com/search?q=url&q=site:npmjs.org&hl=en', + 'javascript:alert("node is awesome");', + 'some.ran/dom/url.thing?oh=yes#whoo' +]; + + +var paths = [ + '../../../../../etc/passwd', + '../foo/bar?baz=boom', + 'foo/bar', + 'http://nodejs.org', + './foo/bar?baz' +]; + var bench = common.createBenchmark(main, { - type: ['one'], - n: [1e5], + href: Object.keys(hrefs), + path: Object.keys(paths), + n: [1e5] }); function main(conf) { - var type = conf.type; var n = conf.n | 0; - - var inputs = { - one: ['http://example.com/', '../../../../../etc/passwd'], - }; - var input = inputs[type] || []; + var href = hrefs[conf.href]; + var path = paths[conf.path]; // Force-optimize url.resolve() so that the benchmark doesn't get // disrupted by the optimizer kicking in halfway through. - for (var name in inputs) - url.resolve(inputs[name][0], inputs[name][1]); - + url.resolve(href, path); v8.setFlagsFromString('--allow_natives_syntax'); eval('%OptimizeFunctionOnNextCall(url.resolve)'); bench.start(); for (var i = 0; i < n; i += 1) - url.resolve(input[0], input[1]); + url.resolve(href, path); bench.end(n); } diff --git a/benchmark/url/url.js b/benchmark/url/url.js deleted file mode 100644 index 78fe7b6c560ef2..00000000000000 --- a/benchmark/url/url.js +++ /dev/null @@ -1,41 +0,0 @@ -'use strict'; -var url = require('url') -var n = 25 * 100; - -var urls = [ - 'http://nodejs.org/docs/latest/api/url.html#url_url_format_urlobj', - 'http://blog.nodejs.org/', - 'https://encrypted.google.com/search?q=url&q=site:npmjs.org&hl=en', - 'javascript:alert("node is awesome");', - 'some.ran/dom/url.thing?oh=yes#whoo' -]; - -var paths = [ - '../foo/bar?baz=boom', - 'foo/bar', - 'http://nodejs.org', - './foo/bar?baz' -]; - -benchmark('parse()', url.parse); -benchmark('format()', url.format); -paths.forEach(function(p) { - benchmark('resolve("' + p + '")', function(u) { - url.resolve(u, p) - }); -}); - -function benchmark(name, fun) { - var timestamp = process.hrtime(); - for (var i = 0; i < n; ++i) { - for (var j = 0, k = urls.length; j < k; ++j) fun(urls[j]); - } - timestamp = process.hrtime(timestamp); - - var seconds = timestamp[0]; - var nanos = timestamp[1]; - var time = seconds + nanos / 1e9; - var rate = n / time; - - console.log('misc/url.js %s: %s', name, rate.toPrecision(5)); -} From 863e392173fb92c2301f193251e9af892b50639d Mon Sep 17 00:00:00 2001 From: Andreas Madsen Date: Mon, 8 Feb 2016 21:50:10 +0100 Subject: [PATCH 3/4] benchmark: fix configuation parameters The benchmark runner spawns new processes for each configuration. The specific configuration is transfered by process.argv. This means that the values have to be parsed. As of right now only numbers and strings are parsed correctly. However other values such as objects where used. This fixes the benchmarks that used non-string/number values and prevents future issues by asserting the type. --- .../deepequal-prims-and-objs-big-array.js | 25 +++++++++++-------- .../deepequal-prims-and-objs-big-loop.js | 25 +++++++++++-------- benchmark/buffers/buffer-read.js | 2 +- benchmark/buffers/buffer-tostring.js | 4 +-- benchmark/buffers/buffer-write.js | 2 +- benchmark/common.js | 4 +++ 6 files changed, 36 insertions(+), 26 deletions(-) diff --git a/benchmark/assert/deepequal-prims-and-objs-big-array.js b/benchmark/assert/deepequal-prims-and-objs-big-array.js index d8d2b57331f7ef..dc18d959bbce2b 100644 --- a/benchmark/assert/deepequal-prims-and-objs-big-array.js +++ b/benchmark/assert/deepequal-prims-and-objs-big-array.js @@ -1,22 +1,25 @@ 'use strict'; var common = require('../common.js'); var assert = require('assert'); + +const primValues = { + 'null': null, + 'undefined': undefined, + 'string': 'a', + 'number': 1, + 'boolean': true, + 'object': { 0: 'a' }, + 'array': [1, 2, 3], + 'new-array': new Array([1, 2, 3]) +}; + var bench = common.createBenchmark(main, { - prim: [ - null, - undefined, - 'a', - 1, - true, - {0: 'a'}, - [1, 2, 3], - new Array([1, 2, 3]) - ], + prim: Object.keys(primValues), n: [25] }); function main(conf) { - var prim = conf.prim; + var prim = primValues[conf.prim]; var n = +conf.n; var primArray; var primArrayCompare; diff --git a/benchmark/assert/deepequal-prims-and-objs-big-loop.js b/benchmark/assert/deepequal-prims-and-objs-big-loop.js index 5f0519bb3b45ad..3c76a586f7d5fb 100644 --- a/benchmark/assert/deepequal-prims-and-objs-big-loop.js +++ b/benchmark/assert/deepequal-prims-and-objs-big-loop.js @@ -1,22 +1,25 @@ 'use strict'; var common = require('../common.js'); var assert = require('assert'); + +const primValues = { + 'null': null, + 'undefined': undefined, + 'string': 'a', + 'number': 1, + 'boolean': true, + 'object': { 0: 'a' }, + 'array': [1, 2, 3], + 'new-array': new Array([1, 2, 3]) +}; + var bench = common.createBenchmark(main, { - prim: [ - null, - undefined, - 'a', - 1, - true, - {0: 'a'}, - [1, 2, 3], - new Array([1, 2, 3]) - ], + prim: Object.keys(primValues), n: [1e5] }); function main(conf) { - var prim = conf.prim; + var prim = primValues[conf.prim]; var n = +conf.n; var x; diff --git a/benchmark/buffers/buffer-read.js b/benchmark/buffers/buffer-read.js index e50de84b043af7..47affeee79edad 100644 --- a/benchmark/buffers/buffer-read.js +++ b/benchmark/buffers/buffer-read.js @@ -2,7 +2,7 @@ var common = require('../common.js'); var bench = common.createBenchmark(main, { - noAssert: [false, true], + noAssert: ['false', 'true'], buffer: ['fast', 'slow'], type: ['UInt8', 'UInt16LE', 'UInt16BE', 'UInt32LE', 'UInt32BE', diff --git a/benchmark/buffers/buffer-tostring.js b/benchmark/buffers/buffer-tostring.js index 948052042d677b..97f5fb12294d2a 100644 --- a/benchmark/buffers/buffer-tostring.js +++ b/benchmark/buffers/buffer-tostring.js @@ -3,13 +3,13 @@ const common = require('../common.js'); const bench = common.createBenchmark(main, { - arg: [true, false], + arg: ['true', 'false'], len: [0, 1, 64, 1024], n: [1e7] }); function main(conf) { - const arg = conf.arg; + const arg = conf.arg === 'true'; const len = conf.len | 0; const n = conf.n | 0; const buf = Buffer(len).fill(42); diff --git a/benchmark/buffers/buffer-write.js b/benchmark/buffers/buffer-write.js index 22383319d9ea30..657cebfacb5723 100644 --- a/benchmark/buffers/buffer-write.js +++ b/benchmark/buffers/buffer-write.js @@ -1,7 +1,7 @@ 'use strict'; var common = require('../common.js'); var bench = common.createBenchmark(main, { - noAssert: [false, true], + noAssert: ['false', 'true'], buffer: ['fast', 'slow'], type: ['UInt8', 'UInt16LE', 'UInt16BE', 'UInt32LE', 'UInt32BE', diff --git a/benchmark/common.js b/benchmark/common.js index 6878d41d1416bc..1ff4b50f8a409e 100644 --- a/benchmark/common.js +++ b/benchmark/common.js @@ -154,6 +154,10 @@ Benchmark.prototype._run = function() { var j = 0; set.forEach(function(s) { vals.forEach(function(val) { + if (typeof val !== 'number' && typeof val !== 'string') { + throw new TypeError(`configuration "${key}" had type ${typeof val}`); + } + newSet[j++] = s.concat(key + '=' + val); }); }); From 4aba8bc40ec68e2b1b3c71fc82cc02ef3d1452fc Mon Sep 17 00:00:00 2001 From: Andreas Madsen Date: Fri, 19 Feb 2016 18:02:54 +0100 Subject: [PATCH 4/4] benchmark: move string-decoder to its own category --- benchmark/{buffers => string_decoder}/string-decoder.js | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename benchmark/{buffers => string_decoder}/string-decoder.js (100%) diff --git a/benchmark/buffers/string-decoder.js b/benchmark/string_decoder/string-decoder.js similarity index 100% rename from benchmark/buffers/string-decoder.js rename to benchmark/string_decoder/string-decoder.js