Skip to content

Commit

Permalink
errors: eliminate all overhead for hidden calls
Browse files Browse the repository at this point in the history
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 <matteo.collina@gmail.com>
Reviewed-By: Rich Trott <rtrott@gmail.com>
Reviewed-By: Vladimir de Turckheim <vlad2t@hotmail.com>
Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
  • Loading branch information
Momtchil Momtchev authored and targos committed Sep 1, 2021
1 parent d7e2318 commit c13eadc
Show file tree
Hide file tree
Showing 8 changed files with 211 additions and 152 deletions.
45 changes: 45 additions & 0 deletions benchmark/misc/hidestackframes.js
@@ -0,0 +1,45 @@
'use strict';

const common = require('../common.js');

const bench = common.createBenchmark(main, {
type: ['hide-stackframes-throw', 'direct-call-throw',
'hide-stackframes-noerr', 'direct-call-noerr'],
n: [10e4]
}, {
flags: ['--expose-internals']
});

function main({ n, type }) {
const {
hideStackFrames,
codes: {
ERR_INVALID_ARG_TYPE,
},
} = require('internal/errors');

const testfn = (value) => {
if (typeof value !== 'number') {
throw new ERR_INVALID_ARG_TYPE('Benchmark', 'number', value);
}
};

let fn = testfn;
if (type.startsWith('hide-stackframe'))
fn = hideStackFrames(testfn);
let value = 42;
if (type.endsWith('-throw'))
value = 'err';

bench.start();

for (let i = 0; i < n; i++) {
try {
fn(value);
} catch {
// No-op
}
}

bench.end(n);
}

0 comments on commit c13eadc

Please sign in to comment.