First batch: scales with file size. On a 1 GB IFC the single-threaded
pre-pass alone runs WASM for 30-60 s before the first geometry batch is
emitted, and that scan time genuinely grows with bytes — so the deadline
must too, or users on multi-GB files time out before anything renders.
Subsequent batches: a FIXED grace, deliberately NOT scaled by file size.
Once geometry is flowing, the only silent window is the wall-time of a
single synchronous processGeometryBatch call. That tracks geometric
complexity per job (CSG density), which is uncorrelated with megabytes —
dense steel packs far more CSG per MB than an extruded slab. The previous
per-MB ramp measured the wrong thing and killed healthy loads on
CSG-dense models (issue #1097: a ~275 MB steel model tripped its own
15 s + MB*30 = 23 s deadline mid-stream). The worker now bounds a single
call to ~TARGET_BATCH_MS via adaptive batch sizing (see
geometry.worker.ts), so this grace gives >10x headroom on realistic
density while still flagging a genuinely wedged pool.
Floors are at or above the previous fixed values so we never decrease a
timeout relative to what shipped before (no regression on small/medium
files).
Watchdog for the geometry streaming pipeline.
Two phases, two different right metrics:
First batch: scales with file size. On a 1 GB IFC the single-threaded pre-pass alone runs WASM for 30-60 s before the first geometry batch is emitted, and that scan time genuinely grows with bytes — so the deadline must too, or users on multi-GB files time out before anything renders.
Subsequent batches: a FIXED grace, deliberately NOT scaled by file size. Once geometry is flowing, the only silent window is the wall-time of a single synchronous
processGeometryBatchcall. That tracks geometric complexity per job (CSG density), which is uncorrelated with megabytes — dense steel packs far more CSG per MB than an extruded slab. The previous per-MB ramp measured the wrong thing and killed healthy loads on CSG-dense models (issue #1097: a ~275 MB steel model tripped its own 15 s + MB*30 = 23 s deadline mid-stream). The worker now bounds a single call to ~TARGET_BATCH_MSvia adaptive batch sizing (see geometry.worker.ts), so this grace gives >10x headroom on realistic density while still flagging a genuinely wedged pool.Floors are at or above the previous fixed values so we never decrease a timeout relative to what shipped before (no regression on small/medium files).