benchmark: include webstreams benchmark
Signed-off-by: RafaelGSS <rafael.nunu@hotmail.com> PR-URL: https://github.com/nodejs/node/pull/45876 Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com> Reviewed-By: Paolo Insogna <paolo@cowtech.it>
This commit is contained in:
parent
42d3d74717
commit
70d269de77
49
benchmark/webstreams/creation.js
Normal file
49
benchmark/webstreams/creation.js
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
'use strict';
|
||||||
|
const common = require('../common.js');
|
||||||
|
const {
|
||||||
|
ReadableStream,
|
||||||
|
TransformStream,
|
||||||
|
WritableStream,
|
||||||
|
} = require('node:stream/web');
|
||||||
|
const assert = require('assert');
|
||||||
|
|
||||||
|
const bench = common.createBenchmark(main, {
|
||||||
|
n: [50e3],
|
||||||
|
kind: ['ReadableStream', 'TransformStream', 'WritableStream']
|
||||||
|
});
|
||||||
|
|
||||||
|
let rs, ws, ts;
|
||||||
|
|
||||||
|
function main({ n, kind }) {
|
||||||
|
switch (kind) {
|
||||||
|
case 'ReadableStream':
|
||||||
|
bench.start();
|
||||||
|
for (let i = 0; i < n; ++i)
|
||||||
|
rs = new ReadableStream();
|
||||||
|
bench.end(n);
|
||||||
|
|
||||||
|
// Avoid V8 deadcode (elimination)
|
||||||
|
assert.ok(rs);
|
||||||
|
break;
|
||||||
|
case 'WritableStream':
|
||||||
|
bench.start();
|
||||||
|
for (let i = 0; i < n; ++i)
|
||||||
|
ws = new WritableStream();
|
||||||
|
bench.end(n);
|
||||||
|
|
||||||
|
// Avoid V8 deadcode (elimination)
|
||||||
|
assert.ok(ws);
|
||||||
|
break;
|
||||||
|
case 'TransformStream':
|
||||||
|
bench.start();
|
||||||
|
for (let i = 0; i < n; ++i)
|
||||||
|
ts = new TransformStream();
|
||||||
|
bench.end(n);
|
||||||
|
|
||||||
|
// Avoid V8 deadcode (elimination)
|
||||||
|
assert.ok(ts);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw new Error('Invalid kind');
|
||||||
|
}
|
||||||
|
}
|
36
benchmark/webstreams/pipe-to.js
Normal file
36
benchmark/webstreams/pipe-to.js
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
'use strict';
|
||||||
|
const common = require('../common.js');
|
||||||
|
const {
|
||||||
|
ReadableStream,
|
||||||
|
WritableStream,
|
||||||
|
} = require('node:stream/web');
|
||||||
|
|
||||||
|
const bench = common.createBenchmark(main, {
|
||||||
|
n: [5e6],
|
||||||
|
highWaterMarkR: [512, 1024, 2048, 4096],
|
||||||
|
highWaterMarkW: [512, 1024, 2048, 4096],
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
async function main({ n, highWaterMarkR, highWaterMarkW }) {
|
||||||
|
const b = Buffer.alloc(1024);
|
||||||
|
let i = 0;
|
||||||
|
const rs = new ReadableStream({
|
||||||
|
highWaterMark: highWaterMarkR,
|
||||||
|
pull: function(controller) {
|
||||||
|
if (i++ === n) {
|
||||||
|
controller.enqueue(b);
|
||||||
|
} else {
|
||||||
|
controller.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
const ws = new WritableStream({
|
||||||
|
highWaterMark: highWaterMarkW,
|
||||||
|
write(chunk, controller) {},
|
||||||
|
close() { bench.end(n); },
|
||||||
|
});
|
||||||
|
|
||||||
|
bench.start();
|
||||||
|
rs.pipeTo(ws);
|
||||||
|
}
|
31
benchmark/webstreams/readable-async-iterator.js
Normal file
31
benchmark/webstreams/readable-async-iterator.js
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
'use strict';
|
||||||
|
const common = require('../common.js');
|
||||||
|
const {
|
||||||
|
ReadableStream,
|
||||||
|
} = require('node:stream/web');
|
||||||
|
|
||||||
|
const bench = common.createBenchmark(main, {
|
||||||
|
n: [1e5],
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
async function main({ n }) {
|
||||||
|
const rs = new ReadableStream({
|
||||||
|
pull: function(controller) {
|
||||||
|
controller.enqueue(1);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
let x = 0;
|
||||||
|
|
||||||
|
bench.start();
|
||||||
|
for await (const chunk of rs) {
|
||||||
|
x += chunk;
|
||||||
|
if (x > n) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Use x to ensure V8 does not optimize away the loop as a noop.
|
||||||
|
console.assert(x);
|
||||||
|
bench.end(n);
|
||||||
|
}
|
7
test/benchmark/test-benchmark-webstreams.js
Normal file
7
test/benchmark/test-benchmark-webstreams.js
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
require('../common');
|
||||||
|
|
||||||
|
const runBenchmark = require('../common/benchmark');
|
||||||
|
|
||||||
|
runBenchmark('webstreams', { NODEJS_BENCHMARK_ZERO_ALLOWED: 1 });
|
Loading…
x
Reference in New Issue
Block a user