rittenhop-dev/versions/5.94.2/node_modules/@sentry/utils/esm/anr.js

74 lines
1.7 KiB
JavaScript
Raw Normal View History

2024-09-23 19:40:12 -04:00
import { dropUndefinedKeys } from './object.js';
import { filenameIsInApp } from './node-stack-trace.js';
/**
* A node.js watchdog timer
* @param pollInterval The interval that we expect to get polled at
* @param anrThreshold The threshold for when we consider ANR
* @param callback The callback to call for ANR
* @returns An object with `poll` and `enabled` functions {@link WatchdogReturn}
*/
function watchdogTimer(
createTimer,
pollInterval,
anrThreshold,
callback,
) {
const timer = createTimer();
let triggered = false;
let enabled = true;
setInterval(() => {
const diffMs = timer.getTimeMs();
if (triggered === false && diffMs > pollInterval + anrThreshold) {
triggered = true;
if (enabled) {
callback();
}
}
if (diffMs < pollInterval + anrThreshold) {
triggered = false;
}
}, 20);
return {
poll: () => {
timer.reset();
},
enabled: (state) => {
enabled = state;
},
};
}
// types copied from inspector.d.ts
/**
* Converts Debugger.CallFrame to Sentry StackFrame
*/
function callFrameToStackFrame(
frame,
url,
getModuleFromFilename,
) {
const filename = url ? url.replace(/^file:\/\//, '') : undefined;
// CallFrame row/col are 0 based, whereas StackFrame are 1 based
const colno = frame.location.columnNumber ? frame.location.columnNumber + 1 : undefined;
const lineno = frame.location.lineNumber ? frame.location.lineNumber + 1 : undefined;
return dropUndefinedKeys({
filename,
module: getModuleFromFilename(filename),
function: frame.functionName || '?',
colno,
lineno,
in_app: filename ? filenameIsInApp(filename) : undefined,
});
}
export { callFrameToStackFrame, watchdogTimer };
//# sourceMappingURL=anr.js.map