Frame ceiling on the same wait (≈2 s at 60 fps), inclusive of the mandatory
selector-catch-up tick. NOT redundant with the millisecond deadline: under a
stubbed clock — unit tests, fake timers — performance.now() never advances,
so the ms deadline alone would spin forever. Whichever bound trips first ends
the drain.
Frame ceiling on the same wait (≈2 s at 60 fps), inclusive of the mandatory selector-catch-up tick. NOT redundant with the millisecond deadline: under a stubbed clock — unit tests, fake timers —
performance.now()never advances, so the ms deadline alone would spin forever. Whichever bound trips first ends the drain.