UNPKG

@tamagui/react-native-web-lite

Version:
66 lines (65 loc) 1.8 kB
import { infoLog } from "../infoLog/index.mjs"; const JSEventLoopWatchdog = { getStats: function () { return { stallCount, totalStallTime, longestStall, acceptableBusyTime }; }, reset: function () { infoLog("JSEventLoopWatchdog: reset"); totalStallTime = 0; stallCount = 0; longestStall = 0; lastInterval = window.performance.now(); }, addHandler: function (handler) { handlers.push(handler); }, install: function ({ thresholdMS }) { acceptableBusyTime = thresholdMS; if (installed) { return; } installed = true; lastInterval = window.performance.now(); function iteration() { const now = window.performance.now(); const busyTime = now - lastInterval; if (busyTime >= thresholdMS) { const stallTime = busyTime - thresholdMS; stallCount++; totalStallTime += stallTime; longestStall = Math.max(longestStall, stallTime); let msg = `JSEventLoopWatchdog: JS thread busy for ${busyTime}ms. ${totalStallTime}ms in ${stallCount} stalls so far. `; handlers.forEach(handler => { msg += handler.onStall({ lastInterval, busyTime }) || ""; }); infoLog(msg); } handlers.forEach(handler => { handler.onIterate && handler.onIterate(); }); lastInterval = now; setTimeout(iteration, thresholdMS / 5); } iteration(); } }; let acceptableBusyTime = 0; let installed = false; let totalStallTime = 0; let stallCount = 0; let longestStall = 0; let lastInterval = 0; const handlers = []; var JSEventLoopWatchdog_default = JSEventLoopWatchdog; export { JSEventLoopWatchdog, JSEventLoopWatchdog_default as default }; //# sourceMappingURL=index.mjs.map