fix(web-probe): isolate performance capture cdp timeouts
This commit is contained in:
@@ -160,6 +160,7 @@ async function collectBrowserProcessSample(reason) {
|
||||
|
||||
async function enforceBrowserFreezePolicy(sample) {
|
||||
if (browserFreezePolicy.enabled !== true || browserFreezeBlocker) return;
|
||||
const suppressRuntimeProbeFreeze = activeCommandType === "performanceCapture";
|
||||
const processSummary = sample && typeof sample.process === "object" ? sample.process : {};
|
||||
const growth = sample && typeof sample.growth === "object" ? sample.growth : {};
|
||||
const totalRssMb = Number(processSummary.totalRssMb);
|
||||
@@ -228,7 +229,7 @@ async function enforceBrowserFreezePolicy(sample) {
|
||||
const responsiveness = pageMetric?.responsiveness && typeof pageMetric.responsiveness === "object" ? pageMetric.responsiveness : {};
|
||||
const responsivenessLatencyMs = Number(responsiveness.latencyMs);
|
||||
if (responsiveness.timeout === true || (Number.isFinite(responsivenessLatencyMs) && responsivenessLatencyMs >= browserFreezePolicy.responsiveness.latencyBlockerMs)) {
|
||||
const signal = recordBrowserFreezeSignal("playwright-responsiveness", sample, pageMetric, {
|
||||
const detail = {
|
||||
rootCause: "frontend_browser_page_unresponsive_to_playwright",
|
||||
observed: {
|
||||
responsivenessLatencyMs: Number.isFinite(responsivenessLatencyMs) ? responsivenessLatencyMs : null,
|
||||
@@ -241,10 +242,15 @@ async function enforceBrowserFreezePolicy(sample) {
|
||||
windowMs: browserFreezePolicy.blockerWindowMs,
|
||||
valuesRedacted: true,
|
||||
},
|
||||
});
|
||||
if (signal.burst.length >= browserFreezePolicy.responsiveness.eventBlockerCount) {
|
||||
await triggerBrowserFreezeBlocker(signal);
|
||||
return;
|
||||
};
|
||||
if (suppressRuntimeProbeFreeze) {
|
||||
await appendBrowserFreezeSuppressedSignal("playwright-responsiveness", sample, pageMetric, detail, "performance-capture-active");
|
||||
} else {
|
||||
const signal = recordBrowserFreezeSignal("playwright-responsiveness", sample, pageMetric, detail);
|
||||
if (signal.burst.length >= browserFreezePolicy.responsiveness.eventBlockerCount) {
|
||||
await triggerBrowserFreezeBlocker(signal);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
const cdp = pageMetric?.cdp && typeof pageMetric.cdp === "object" ? pageMetric.cdp : {};
|
||||
@@ -253,7 +259,7 @@ async function enforceBrowserFreezePolicy(sample) {
|
||||
const sessionTimeoutCount = calls.length === 0 ? Number(cdp.timeoutCount || 0) : 0;
|
||||
const metricTimeoutCount = metricTimeoutCalls.length + (Number.isFinite(sessionTimeoutCount) ? sessionTimeoutCount : 0);
|
||||
if (metricTimeoutCount > 0) {
|
||||
const signal = recordBrowserFreezeSignal("cdp-metrics-timeout", sample, pageMetric, {
|
||||
const detail = {
|
||||
rootCause: "frontend_browser_cdp_metrics_unresponsive",
|
||||
observed: {
|
||||
cdpMetricsTimeoutCount: metricTimeoutCount,
|
||||
@@ -265,15 +271,35 @@ async function enforceBrowserFreezePolicy(sample) {
|
||||
windowMs: browserFreezePolicy.blockerWindowMs,
|
||||
valuesRedacted: true,
|
||||
},
|
||||
});
|
||||
if (signal.burst.length >= browserFreezePolicy.cdp.metricsTimeoutBlockerCount) {
|
||||
await triggerBrowserFreezeBlocker(signal);
|
||||
return;
|
||||
};
|
||||
if (suppressRuntimeProbeFreeze) {
|
||||
await appendBrowserFreezeSuppressedSignal("cdp-metrics-timeout", sample, pageMetric, detail, "performance-capture-active");
|
||||
} else {
|
||||
const signal = recordBrowserFreezeSignal("cdp-metrics-timeout", sample, pageMetric, detail);
|
||||
if (signal.burst.length >= browserFreezePolicy.cdp.metricsTimeoutBlockerCount) {
|
||||
await triggerBrowserFreezeBlocker(signal);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async function appendBrowserFreezeSuppressedSignal(kind, sample, pageMetric, detail, reason) {
|
||||
await appendJsonl(files.browserProcess, eventRecord("browser-freeze-signal-suppressed", {
|
||||
kind,
|
||||
reason,
|
||||
activeCommandId,
|
||||
activeCommandType,
|
||||
rootCause: detail?.rootCause ?? null,
|
||||
observed: detail?.observed ?? null,
|
||||
threshold: detail?.threshold ?? null,
|
||||
sample: browserProcessSampleRef(sample),
|
||||
page: browserPageMetricRef(pageMetric),
|
||||
valuesRedacted: true,
|
||||
})).catch(() => {});
|
||||
}
|
||||
|
||||
function recordBrowserFreezeSignal(kind, sample, pageMetric, detail) {
|
||||
const tsMs = Date.parse(String(sample?.ts || ""));
|
||||
const signal = {
|
||||
|
||||
Reference in New Issue
Block a user