| 'use strict'; |
| |
| const common = require('../common'); |
| const Writable = require('stream').Writable; |
| |
| const bench = common.createBenchmark(main, { |
| n: [2e6], |
| sync: ['yes', 'no'], |
| writev: ['yes', 'no'], |
| callback: ['yes', 'no'], |
| len: [1024, 32 * 1024] |
| }); |
| |
| function main({ n, sync, writev, callback, len }) { |
| const b = Buffer.allocUnsafe(len); |
| const s = new Writable(); |
| sync = sync === 'yes'; |
| |
| const writecb = (cb) => { |
| if (sync) |
| cb(); |
| else |
| process.nextTick(cb); |
| }; |
| |
| if (writev === 'yes') { |
| s._writev = (chunks, cb) => writecb(cb); |
| } else { |
| s._write = (chunk, encoding, cb) => writecb(cb); |
| } |
| |
| const cb = callback === 'yes' ? () => {} : null; |
| |
| bench.start(); |
| |
| let k = 0; |
| function run() { |
| while (k++ < n && s.write(b, cb)); |
| if (k >= n) { |
| bench.end(n); |
| s.removeListener('drain', run); |
| } |
| } |
| s.on('drain', run); |
| run(); |
| } |