[client] ds: waitFrame now returns a bool to force rendering if needed

X11 needs to calibrate to get the best possible latency, as such it
needs the scene to render so that the render time of the scene can be
accounted for in the delay calculation.
This commit is contained in:
Geoffrey McRae
2021-08-04 06:49:35 +10:00
parent 0f7fa32d12
commit c15d0dc672
4 changed files with 21 additions and 6 deletions

View File

@@ -138,13 +138,15 @@ static const struct wl_callback_listener frame_listener = {
.done = frameHandler,
};
void waylandWaitFrame(void)
bool waylandWaitFrame(void)
{
lgWaitEvent(wlWm.frameEvent, TIMEOUT_INFINITE);
struct wl_callback * callback = wl_surface_frame(wlWm.surface);
if (callback)
wl_callback_add_listener(callback, &frame_listener, NULL);
return false;
}
void waylandSkipFrame(void)

View File

@@ -1128,7 +1128,7 @@ static void x11GLSwapBuffers(void)
}
#endif
static void x11WaitFrame(void)
static bool x11WaitFrame(void)
{
/* wait until we are woken up by the present event */
lgWaitEvent(x11.frameEvent, TIMEOUT_INFINITE);
@@ -1196,6 +1196,13 @@ static void x11WaitFrame(void)
struct timespec ts = { .tv_nsec = delay * 1000 };
while(nanosleep(&ts, &ts)) {};
/* force rendering until we have finished calibration so we can take into
* account how long it takes for the scene to render */
if (calibrate < CALIBRATION_COUNT)
return true;
return false;
}
static void x11StopWaitFrame(void)