summaryrefslogtreecommitdiff
path: root/lib/igt_kms.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/igt_kms.c')
-rw-r--r--lib/igt_kms.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/lib/igt_kms.c b/lib/igt_kms.c
index 0cee0c06..0438f641 100644
--- a/lib/igt_kms.c
+++ b/lib/igt_kms.c
@@ -1458,6 +1458,30 @@ unsigned int kmstest_get_vblank(int fd, int pipe, unsigned int flags)
return vbl.reply.sequence;
}
+/**
+ * kmstest_wait_for_pageflip:
+ * @fd: Opened drm file descriptor
+ *
+ * Blocks until pageflip is completed
+ *
+ */
+void kmstest_wait_for_pageflip(int fd)
+{
+ drmEventContext evctx = { .version = 2 };
+ struct timeval timeout = { .tv_sec = 0, .tv_usec = 50000 };
+ fd_set fds;
+ int ret;
+
+ /* Wait for pageflip completion, then consume event on fd */
+ FD_ZERO(&fds);
+ FD_SET(fd, &fds);
+ do {
+ ret = select(fd + 1, &fds, NULL, NULL, &timeout);
+ } while (ret < 0 && errno == EINTR);
+ igt_assert_eq(ret, 1);
+ igt_assert(drmHandleEvent(fd, &evctx) == 0);
+}
+
static void get_plane(char *str, int type, struct kmstest_plane *plane)
{
int ret;