From 98eaadfa870d14bdde9a9d2e236d1d3f4ef14058 Mon Sep 17 00:00:00 2001 From: Hermes Agent Date: Sat, 2 May 2026 23:29:32 +0000 Subject: [PATCH] Add debug logging to decode worker: track frame count, report QR null/error messages to UI. Error display now visible in GIF file mode. --- src/workers/decode.worker.ts | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/workers/decode.worker.ts b/src/workers/decode.worker.ts index 371161f..1ea335b 100644 --- a/src/workers/decode.worker.ts +++ b/src/workers/decode.worker.ts @@ -42,6 +42,9 @@ interface SessionState { // Worker-global state (keyed by sessionId.toString()) const sessions = new Map(); +// Debug counter for tracking frame processing +let totalFramesReceived = 0; + // ─── Worker handler ────────────────────────────────────────────────────────── self.onmessage = (e: MessageEvent) => { @@ -53,6 +56,10 @@ self.onmessage = (e: MessageEvent) => { } if (msg.type === 'frame') { + totalFramesReceived++; + if (totalFramesReceived % 5 === 0) { + self.postMessage({ type: 'error', message: `Worker received ${totalFramesReceived} frames total` }); + } let imageData: ImageData | null = msg.imageData ?? msg.frameData ?? null; if (!imageData && msg.pixels && msg.width && msg.height) { imageData = new ImageData( @@ -66,7 +73,7 @@ self.onmessage = (e: MessageEvent) => { handleFrame(imageData!); } catch (err: any) { // Don't crash worker on decode errors - self.postMessage({ type: 'error', message: err.message ?? String(err) }); + self.postMessage({ type: 'error', message: `Frame error: ${err.message ?? String(err)}` }); } return; } @@ -77,7 +84,10 @@ self.onmessage = (e: MessageEvent) => { function handleFrame(imageData: ImageData): void { // 1. Decode QR code from image const decoded = decodeQRFromCanvas(imageData); - if (!decoded) return; // No QR code found in this frame + if (!decoded) { + self.postMessage({ type: 'error', message: 'QR decode returned null for frame' }); + return; // No QR code found in this frame + } // 2. Decoded is already Uint8Array (raw bytes from jsQR chunks) const bytes = decoded;