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: nodejs#35386

PR-URL: nodejs#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
mmomtchev authored and aduh95 committed Dec 22, 2020
1 parent 67b9ba9 commit 656ce92
Show file tree
Hide file tree
Showing 3 changed files with 205 additions and 150 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 656ce92

Please sign in to comment.