mirror of
https://github.com/zebrajr/node.git
synced 2026-01-15 12:15:26 +00:00
This commit uses the BUILDTYPE for the benchmark targets that currently explicitly use Release as the build type. The motivation for this change is allows switching between debug builds and release builds using the bench-addons-clean/bench-addons-build targets. PR-URL: https://github.com/nodejs/node/pull/24033 Reviewed-By: Richard Lau <riclau@uk.ibm.com> Reviewed-By: Refael Ackermann <refack@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com>
98 lines
2.4 KiB
JavaScript
98 lines
2.4 KiB
JavaScript
// show the difference between calling a V8 binding C++ function
|
|
// relative to a comparable N-API C++ function,
|
|
// in various types/numbers of arguments.
|
|
// Reports n of calls per second.
|
|
'use strict';
|
|
|
|
const common = require('../../common.js');
|
|
|
|
let v8;
|
|
let napi;
|
|
|
|
try {
|
|
v8 = require(`./build/${common.buildType}/binding`);
|
|
} catch {
|
|
console.error(`${__filename}: V8 Binding failed to load`);
|
|
process.exit(0);
|
|
}
|
|
|
|
try {
|
|
napi = require(`./build/${common.buildType}/napi_binding`);
|
|
} catch {
|
|
console.error(`${__filename}: NAPI-Binding failed to load`);
|
|
process.exit(0);
|
|
}
|
|
|
|
const argsTypes = ['String', 'Number', 'Object', 'Array', 'Typedarray',
|
|
'10Numbers', '100Numbers', '1000Numbers'];
|
|
|
|
const generateArgs = (argType) => {
|
|
let args = [];
|
|
|
|
if (argType === 'String') {
|
|
args.push('The quick brown fox jumps over the lazy dog');
|
|
} else if (argType === 'LongString') {
|
|
args.push(Buffer.alloc(32768, '42').toString());
|
|
} else if (argType === 'Number') {
|
|
args.push(Math.floor(314158964 * Math.random()));
|
|
} else if (argType === 'Object') {
|
|
args.push({
|
|
map: 'add',
|
|
operand: 10,
|
|
data: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
|
|
reduce: 'add',
|
|
});
|
|
} else if (argType === 'Array') {
|
|
const arr = [];
|
|
for (let i = 0; i < 50; ++i) {
|
|
arr.push(Math.random() * 10e9);
|
|
}
|
|
args.push(arr);
|
|
} else if (argType === 'Typedarray') {
|
|
const arr = new Uint32Array(1000);
|
|
for (let i = 0; i < 1000; ++i) {
|
|
arr[i] = Math.random() * 4294967296;
|
|
}
|
|
args.push(arr);
|
|
} else if (argType === '10Numbers') {
|
|
args.push(10);
|
|
for (let i = 0; i < 9; ++i) {
|
|
args = [...args, ...generateArgs('Number')];
|
|
}
|
|
} else if (argType === '100Numbers') {
|
|
args.push(100);
|
|
for (let i = 0; i < 99; ++i) {
|
|
args = [...args, ...generateArgs('Number')];
|
|
}
|
|
} else if (argType === '1000Numbers') {
|
|
args.push(1000);
|
|
for (let i = 0; i < 999; ++i) {
|
|
args = [...args, ...generateArgs('Number')];
|
|
}
|
|
}
|
|
|
|
return args;
|
|
};
|
|
|
|
const bench = common.createBenchmark(main, {
|
|
type: argsTypes,
|
|
engine: ['v8', 'napi'],
|
|
n: [1, 1e1, 1e2, 1e3, 1e4, 1e5],
|
|
});
|
|
|
|
function main({ n, engine, type }) {
|
|
const bindings = engine === 'v8' ? v8 : napi;
|
|
const methodName = 'callWith' + type;
|
|
const fn = bindings[methodName];
|
|
|
|
if (fn) {
|
|
const args = generateArgs(type);
|
|
|
|
bench.start();
|
|
for (var i = 0; i < n; i++) {
|
|
fn.apply(null, args);
|
|
}
|
|
bench.end(n);
|
|
}
|
|
}
|