Project nD lines to a 3D instance-buffer set on a worker thread. Only when
the pool has no worker for the call (WorkerUnavailableError: none at all,
or none left after its worker was evicted before replying) does it fall
back to the in-process dispatcher (the same kernel run on the main thread)
with a warning log.
Every other failure propagates. A rejection that came back FROM the worker
would only reproduce the fault on the UI thread (the fallback shares the
kernel), and a timeout means work the main thread cannot afford either —
see the twin note in data-processor-gsplats.ts.
updateVersion gates the first-update info logs to avoid noisy long
sessions.
signal is the per-update abort signal: a superseded pass rejects promptly
with a WorkerAbortError instead of holding the update lock through a whole
projection (50-150 ms at 1-3M elements). The worker still finishes the
abandoned task; the pool keeps that worker's slot busy until it does.
Project nD lines to a 3D instance-buffer set on a worker thread. Only when the pool has no worker for the call (
WorkerUnavailableError: none at all, or none left after its worker was evicted before replying) does it fall back to the in-process dispatcher (the same kernel run on the main thread) with a warning log.Every other failure propagates. A rejection that came back FROM the worker would only reproduce the fault on the UI thread (the fallback shares the kernel), and a timeout means work the main thread cannot afford either — see the twin note in
data-processor-gsplats.ts.updateVersiongates the first-update info logs to avoid noisy long sessions.signalis the per-update abort signal: a superseded pass rejects promptly with a WorkerAbortError instead of holding the update lock through a whole projection (50-150 ms at 1-3M elements). The worker still finishes the abandoned task; the pool keeps that worker's slot busy until it does.