Commit 3d47ddc422de1a4209525a759b3bc46a4ac69116

Ethan Lee 2021-05-01T08:57:37

wayland: Use refresh_rate to calculate max_wait in SwapWindow

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
diff --git a/src/video/wayland/SDL_waylandopengles.c b/src/video/wayland/SDL_waylandopengles.c
index 50f3368..e4739a8 100644
--- a/src/video/wayland/SDL_waylandopengles.c
+++ b/src/video/wayland/SDL_waylandopengles.c
@@ -116,8 +116,9 @@ Wayland_GLES_SwapWindow(_THIS, SDL_Window *window)
 
     /* Control swap interval ourselves. See comments on Wayland_GLES_SetSwapInterval */
     if (swap_interval != 0) {
-        const Uint32 max_wait = SDL_GetTicks() + 100;  /* ~10 fps, so we'll progress even if throttled to zero. */
         struct wl_display *display = ((SDL_VideoData *)_this->driverdata)->display;
+        SDL_VideoDisplay *sdldisplay = SDL_GetDisplayForWindow(window);
+        const Uint32 max_wait = SDL_GetTicks() + (10000 / sdldisplay->current_mode.refresh_rate);  /* ~10 frames, so we'll progress even if throttled to zero. */
         while ((SDL_AtomicGet(&data->swap_interval_ready) == 0) && (!SDL_TICKS_PASSED(SDL_GetTicks(), max_wait))) {
             /* !!! FIXME: this is just the crucial piece of Wayland_PumpEvents */
             WAYLAND_wl_display_flush(display);