[HTML5] Fix target_fps when window loses focus.

We don't get updates when the window is unfocused/minimized, so we must
detect the situation where the counted ticks start drifting away
resulting in more frames drawn than needed.
This commit adds a check to ensure that the target ticks do not drift
away more than one second.

(cherry picked from commit a1fe6d6899)
This commit is contained in:
Fabio Alessandrelli 2021-05-07 14:06:46 +02:00 committed by Rémi Verschelde
parent 30ec3870c9
commit 6c1c2ed414
No known key found for this signature in database
GPG key ID: C3336907360768E1

View file

@ -65,6 +65,11 @@ void main_loop_callback() {
int target_fps = Engine::get_singleton()->get_target_fps(); int target_fps = Engine::get_singleton()->get_target_fps();
if (target_fps > 0) { if (target_fps > 0) {
if (current_ticks - target_ticks > 1000000) {
// When the window loses focus, we stop getting updates and accumulate delay.
// For this reason, if the difference is too big, we reset target ticks to the current ticks.
target_ticks = current_ticks;
}
target_ticks += (uint64_t)(1000000 / target_fps); target_ticks += (uint64_t)(1000000 / target_fps);
} }
if (os->main_loop_iterate()) { if (os->main_loop_iterate()) {