summaryrefslogtreecommitdiff
path: root/benchmark
diff options
context:
space:
mode:
authorJames M Snell <jasnell@gmail.com>2016-03-23 14:27:39 -0700
committerJames M Snell <jasnell@gmail.com>2016-04-08 20:16:46 -0700
commita2466896ddd0c89e80755a64acf0cac7e31e84e0 (patch)
tree0c2588c016e268d9199e62d2077d5e9393e44445 /benchmark
parent820844d6732a471ff0bff5ff477dec70133bdd3d (diff)
downloadandroid-node-v8-a2466896ddd0c89e80755a64acf0cac7e31e84e0.tar.gz
android-node-v8-a2466896ddd0c89e80755a64acf0cac7e31e84e0.tar.bz2
android-node-v8-a2466896ddd0c89e80755a64acf0cac7e31e84e0.zip
buffer: add Buffer.prototype.compare by offset
Adds additional `targetStart`, `targetEnd`, `sourceStart, and `sourceEnd` arguments to `Buffer.prototype.compare` to allow comparison of sub-ranges of two Buffers without requiring Buffer.prototype.slice() Fixes: https://github.com/nodejs/node/issues/521 PR-URL: https://github.com/nodejs/node/pull/5880 Reviewed-By: Trevor Norris <trev.norris@gmail.com>
Diffstat (limited to 'benchmark')
-rw-r--r--benchmark/buffers/buffer-compare-offset.js58
1 files changed, 58 insertions, 0 deletions
diff --git a/benchmark/buffers/buffer-compare-offset.js b/benchmark/buffers/buffer-compare-offset.js
new file mode 100644
index 0000000000..17b36f8288
--- /dev/null
+++ b/benchmark/buffers/buffer-compare-offset.js
@@ -0,0 +1,58 @@
+'use strict';
+const common = require('../common.js');
+const v8 = require('v8');
+
+const bench = common.createBenchmark(main, {
+ method: ['offset', 'slice'],
+ size: [16, 512, 1024, 4096, 16386],
+ millions: [1]
+});
+
+function compareUsingSlice(b0, b1, len, iter) {
+
+ // Force optimization before starting the benchmark
+ Buffer.compare(b0.slice(1, len), b1.slice(1, len));
+ v8.setFlagsFromString('--allow_natives_syntax');
+ eval('%OptimizeFunctionOnNextCall(Buffer.compare)');
+ eval('%OptimizeFunctionOnNextCall(b0.slice)');
+ eval('%OptimizeFunctionOnNextCall(b1.slice)');
+ Buffer.compare(b0.slice(1, len), b1.slice(1, len));
+ doCompareUsingSlice(b0, b1, len, iter);
+}
+
+function doCompareUsingSlice(b0, b1, len, iter) {
+ var i;
+ bench.start();
+ for (i = 0; i < iter; i++)
+ Buffer.compare(b0.slice(1, len), b1.slice(1, len));
+ bench.end(iter / 1e6);
+}
+
+function compareUsingOffset(b0, b1, len, iter) {
+ len = len + 1;
+ // Force optimization before starting the benchmark
+ b0.compare(b1, 1, len, 1, len);
+ v8.setFlagsFromString('--allow_natives_syntax');
+ eval('%OptimizeFunctionOnNextCall(b0.compare)');
+ b0.compare(b1, 1, len, 1, len);
+ doCompareUsingOffset(b0, b1, len, iter);
+}
+
+function doCompareUsingOffset(b0, b1, len, iter) {
+ var i;
+ bench.start();
+ for (i = 0; i < iter; i++)
+ b0.compare(b1, 1, len, 1, len);
+ bench.end(iter / 1e6);
+}
+
+function main(conf) {
+ const iter = (conf.millions >>> 0) * 1e6;
+ const size = (conf.size >>> 0);
+ const method = conf.method === 'slice' ?
+ compareUsingSlice : compareUsingOffset;
+ method(Buffer.alloc(size, 'a'),
+ Buffer.alloc(size, 'b'),
+ size >> 1,
+ iter);
+}