Skip to content

Commit c13eadc

Browse files
mmomtchevtargos
authored andcommitted
errors: eliminate all overhead for hidden calls
Eliminate all overhead for function calls that are to be hidden from the stack traces at the expense of reduced performance for the error case Fixes: #35386 PR-URL: #35644 Reviewed-By: Matteo Collina <[email protected]> Reviewed-By: Rich Trott <[email protected]> Reviewed-By: Vladimir de Turckheim <[email protected]> Reviewed-By: Antoine du Hamel <[email protected]>
1 parent d7e2318 commit c13eadc

File tree

8 files changed

+211
-152
lines changed

8 files changed

+211
-152
lines changed

benchmark/misc/hidestackframes.js

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
'use strict';
2+
3+
const common = require('../common.js');
4+
5+
const bench = common.createBenchmark(main, {
6+
type: ['hide-stackframes-throw', 'direct-call-throw',
7+
'hide-stackframes-noerr', 'direct-call-noerr'],
8+
n: [10e4]
9+
}, {
10+
flags: ['--expose-internals']
11+
});
12+
13+
function main({ n, type }) {
14+
const {
15+
hideStackFrames,
16+
codes: {
17+
ERR_INVALID_ARG_TYPE,
18+
},
19+
} = require('internal/errors');
20+
21+
const testfn = (value) => {
22+
if (typeof value !== 'number') {
23+
throw new ERR_INVALID_ARG_TYPE('Benchmark', 'number', value);
24+
}
25+
};
26+
27+
let fn = testfn;
28+
if (type.startsWith('hide-stackframe'))
29+
fn = hideStackFrames(testfn);
30+
let value = 42;
31+
if (type.endsWith('-throw'))
32+
value = 'err';
33+
34+
bench.start();
35+
36+
for (let i = 0; i < n; i++) {
37+
try {
38+
fn(value);
39+
} catch {
40+
// No-op
41+
}
42+
}
43+
44+
bench.end(n);
45+
}

0 commit comments

Comments
 (0)