diff options
author | James M Snell <jasnell@gmail.com> | 2016-03-23 14:27:39 -0700 |
---|---|---|
committer | James M Snell <jasnell@gmail.com> | 2016-04-08 20:16:46 -0700 |
commit | a2466896ddd0c89e80755a64acf0cac7e31e84e0 (patch) | |
tree | 0c2588c016e268d9199e62d2077d5e9393e44445 /benchmark | |
parent | 820844d6732a471ff0bff5ff477dec70133bdd3d (diff) | |
download | android-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.js | 58 |
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); +} |