Window: Fix live-lock when animationFrame
is slow
#104
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
If the window is sufficiently complex, it's possible for the average
animationFrame
to take so long we'll start falling behind with no way to ever catch up. And the amount of frames we're behind will quickly grow to the point where we'll be spending five seconds inanimationFrame
before we can get a real frame on the screen.Or even worse with the old while-loop, we'll be stuck indefinitely because the five seconds check only happens outside the loop and we never get to exit the loop if we never catch up, effectively locking up the game.
To prevent that, we limit the
animationFrame
calls we make per real frame such that we'll still be able to render approximately 30 real frames per second at the cost of animations slowing down.