#include <movit/util.h>
#include <movit/resource_pool.h> // Must be above the Xlib includes.
#include <pthread.h>
+#include <unistd.h>
#include <mutex>
++metric_decklink_output_inflight_frames;
}
- glClientWaitSync(frame->fence.get(), /*flags=*/0, GL_TIMEOUT_IGNORED);
+ for ( ;; ) {
+ int err = glClientWaitSync(frame->fence.get(), /*flags=*/0, 0);
+ if (err == GL_TIMEOUT_EXPIRED) {
+ // NVIDIA likes to busy-wait; yield instead.
+ this_thread::sleep_for(milliseconds(1));
+ } else {
+ break;
+ }
+ }
check_error();
frame->fence.reset();
// Wait for the GPU to be done with the frame.
GLenum sync_status;
do {
- sync_status = glClientWaitSync(frame.fence.get(), 0, 1000000000);
+ sync_status = glClientWaitSync(frame.fence.get(), 0, 0);
check_error();
+ if (sync_status == GL_TIMEOUT_EXPIRED) {
+ // NVIDIA likes to busy-wait; yield instead.
+ this_thread::sleep_for(milliseconds(1));
+ }
} while (sync_status == GL_TIMEOUT_EXPIRED);
assert(sync_status != GL_WAIT_FAILED);