From eef7ffbe6e32fcb9f47f053a26c68f81504d421b Mon Sep 17 00:00:00 2001 From: Christopher Jeffrey Date: Sun, 11 Dec 2016 19:41:23 -0800 Subject: [PATCH] bench: add buffer writer bench. --- bench/buffer.js | 50 +++++++++++++++++++++++++++++++++++++++++++++++++ bench/tx.js | 12 ++++++------ 2 files changed, 56 insertions(+), 6 deletions(-) create mode 100644 bench/buffer.js diff --git a/bench/buffer.js b/bench/buffer.js new file mode 100644 index 00000000..ad509f8b --- /dev/null +++ b/bench/buffer.js @@ -0,0 +1,50 @@ +'use strict'; + +var fs = require('fs'); +var TX = require('../lib/primitives/tx'); +var CoinView = require('../lib/coins/coinview'); +var BufferWriter = require('../lib/utils/writer'); +var StaticWriter = require('../lib/utils/staticwriter'); +var bench = require('./bench'); + +var tx3 = parseTX('../test/data/tx3.hex'); +var wtx = fs.readFileSync(__dirname + '/../test/data/wtx.hex', 'utf8'); +var i, tx, end, raw; + +wtx = new Buffer(wtx.trim(), 'hex'); +tx = TX.fromRaw(wtx); + +function parseTX(file) { + var data = fs.readFileSync(__dirname + '/' + file, 'utf8'); + var parts = data.trim().split(/\n+/); + var raw = parts[0]; + var tx = TX.fromRaw(raw.trim(), 'hex'); + var view = new CoinView(); + var i, prev; + + for (i = 1; i < parts.length; i++) { + raw = parts[i]; + prev = TX.fromRaw(raw.trim(), 'hex'); + view.addTX(prev, -1); + } + + return { tx: tx, view: view }; +} + +end = bench('serialize (static-writer)'); +for (i = 0; i < 10000; i++) { + tx._raw = null; + tx._size = -1; + tx._witness = -1; + raw = tx.writeWitness(new StaticWriter(tx.getWitnessSizes().total)).render(); +} +end(i); + +end = bench('serialize (buffer-writer)'); +for (i = 0; i < 10000; i++) { + tx._raw = null; + tx._size = -1; + tx._witness = -1; + raw = tx.writeWitness(new BufferWriter()).render(); +} +end(i); diff --git a/bench/tx.js b/bench/tx.js index 4f8cfa29..36fcd004 100644 --- a/bench/tx.js +++ b/bench/tx.js @@ -15,7 +15,7 @@ var json = require('../test/data/block300025.json'); var block = Block.fromJSON(json); var btx = { tx: block.txs[397], view: new CoinView() }; -var tx1 = parseTX('../test/data/tx3.hex'); +var tx3 = parseTX('../test/data/tx3.hex'); var wtx = fs.readFileSync(__dirname + '/../test/data/wtx.hex', 'utf8'); var i, tx, raw, end, flags, input; @@ -58,8 +58,8 @@ end(i); end = bench('hash'); for (i = 0; i < 3000; i++) { - tx1.tx.hash(); - tx1.tx._hash = null; + tx3.tx.hash(); + tx3.tx._hash = null; } end(i); @@ -92,12 +92,12 @@ end(i); end = bench('verify'); for (i = 0; i < 3000; i++) - tx1.tx.verify(tx1.view, constants.flags.VERIFY_P2SH); -end(i * tx1.tx.inputs.length); + tx3.tx.verify(tx3.view, constants.flags.VERIFY_P2SH); +end(i * tx3.tx.inputs.length); end = bench('fee'); for (i = 0; i < 1000; i++) - tx1.tx.getFee(tx1.view); + tx3.tx.getFee(tx3.view); end(i); flags = constants.flags.VERIFY_P2SH | constants.flags.VERIFY_DERSIG;