Skip to content

Commit cc9b0db

Browse files
committed
benchmark: add async writev adapter benchmark
Add an asynchronous Writable.toWeb() benchmark with write and writev callbacks deferred by setImmediate. Use 1 KiB chunks and a 64 KiB highWaterMark to measure changes in native batching. Signed-off-by: seungwoo <zoozoo1302@gmail.com>
1 parent 620db54 commit cc9b0db

1 file changed

Lines changed: 24 additions & 0 deletions

File tree

‎benchmark/webstreams/adapters.js‎

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ const bench = common.createBenchmark(main, {
1515
'readable-to-web',
1616
'readable-from-web',
1717
'writable-to-web',
18+
'writable-to-web-async-writev',
1819
'writable-from-web',
1920
],
2021
});
@@ -68,6 +69,26 @@ async function writableToWeb(n) {
6869
bench.end(n);
6970
}
7071

72+
async function writableToWebAsyncWritev(n) {
73+
const chunk = Buffer.alloc(1024);
74+
const streamWritable = new Writable({
75+
highWaterMark: 64 * 1024,
76+
// Defer completion so subsequent writes can be batched in writev().
77+
write(chunk, encoding, callback) {
78+
setImmediate(callback);
79+
},
80+
writev(chunks, callback) {
81+
setImmediate(callback);
82+
},
83+
});
84+
const writer = Writable.toWeb(streamWritable).getWriter();
85+
bench.start();
86+
for (let i = 0; i < n; i++)
87+
await writer.write(chunk);
88+
await writer.close();
89+
bench.end(n);
90+
}
91+
7192
function writableFromWeb(n) {
7293
const chunk = Buffer.alloc(1024);
7394
const writableStream = new WritableStream({
@@ -99,6 +120,9 @@ function main({ n, kind }) {
99120
case 'writable-to-web':
100121
writableToWeb(n);
101122
break;
123+
case 'writable-to-web-async-writev':
124+
writableToWebAsyncWritev(n);
125+
break;
102126
case 'writable-from-web':
103127
writableFromWeb(n);
104128
break;

0 commit comments

Comments
 (0)