One-shot wakes, with exponential backoff, for the LOD retries a parked
camera must still reach: a failed level's cooldown before its automatic
retry, and an unanswered partition-part activation request before it is
asked again.
Neither needs the loop ticking while it waits — nothing on screen changes
until the retry fires — so instead of a per-frame tick demand
(tick-demand.ts) each schedules ONE timer for its expiry, which asks for
a single frame. Every consecutive retry of the same key doubles the wait
(capped at MAX_RETRY_DELAY_MS), so a hard failure settles into a slow
poll instead of a retry storm; a success resets it.
Keys are the waiting objects themselves (a LODGroupChild, a partition
part's lazy state), so the attempt counts are weakly held.
One-shot wakes, with exponential backoff, for the LOD retries a parked camera must still reach: a failed level's cooldown before its automatic retry, and an unanswered partition-part activation request before it is asked again.
Neither needs the loop ticking while it waits — nothing on screen changes until the retry fires — so instead of a per-frame tick demand (
tick-demand.ts) each schedules ONE timer for its expiry, which asks for a single frame. Every consecutive retry of the same key doubles the wait (capped at MAX_RETRY_DELAY_MS), so a hard failure settles into a slow poll instead of a retry storm; a success resets it.Keys are the waiting objects themselves (a
LODGroupChild, a partition part's lazy state), so the attempt counts are weakly held.