stablyai/orca · warning · Error

Timed out polling renderer diagnostics after ${pollTimeoutMs

Error message

Timed out polling renderer diagnostics after ${pollTimeoutMs}ms.

What it means

pollRendererDiagnostics races a page.evaluate that collects renderer diagnostics against a 2500ms deadline. It throws when the read does not settle in time, which is the expected signature of the Wayland GPU stall freezing renderer protocol calls. Note collectRendererDiagnostics wraps this call in try/catch and returns { error: message } rather than propagating, so the throw surfaces as a diagnostic field, not a crash.

Source

Thrown at config/scripts/linux-wayland-renderer-diagnostics.mjs:17

const pollTimeoutMs = 2_500

function delay(ms) {
  return new Promise((resolve) => setTimeout(resolve, ms))
}

async function pollRendererDiagnostics(read) {
  const readPromise = Promise.resolve().then(read)
  readPromise.catch(() => undefined)
  // Why: the Wayland GPU stall can freeze renderer protocol calls, so
  // diagnostics need a short deadline too.
  const result = await Promise.race([
    readPromise.then((value) => ({ timedOut: false, value })),
    delay(pollTimeoutMs).then(() => ({ timedOut: true, value: null }))
  ])
  if (result.timedOut) {
    throw new Error(`Timed out polling renderer diagnostics after ${pollTimeoutMs}ms.`)
  }
  return result.value
}

export async function collectRendererDiagnostics(page) {
  if (!page) {
    return null
  }
  try {
    return await pollRendererDiagnostics(() =>
      page.evaluate(async () => {
        const timed = (label, promise) =>
          Promise.race([
            Promise.resolve(promise).then(
              (value) => ({ value }),
              (error) => ({
                error: error instanceof Error ? error.message : String(error)
              })

View on GitHub (pinned to 1136503c6a)

Solutions

  1. Treat this as a symptom of the GPU wedge — collectRendererDiagnostics already degrades gracefully and returns the error field.
  2. Investigate the GPU/renderer stall root cause (this error is the detector, not the bug).
  3. If diagnostics legitimately need more time, raise pollTimeoutMs, but prefer fixing the stall.
Defensive patterns

Strategy: try-catch

Try / catch

try {
  return await pollRendererDiagnostics(read)
} catch (error) {
  return { error: error instanceof Error ? error.message : String(error) }
}

Prevention

When it happens

Trigger: page.evaluate hangs past 2500ms because the renderer/GPU process is wedged; the diagnostics collection itself blocked.

Common situations: Wayland GPU process stall in CI; renderer frozen on a heavy synchronous operation; the diagnostics page.evaluate hit its own internal 1s sub-timeouts and still overshot.

Understand the failure class

Related errors


AI-assisted analysis of stablyai/orca@1136503c6a (2026-08-12). Data as JSON: /api/errors/72c2a6d1234db261. Report an issue: GitHub.