summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNeil Roberts <neil@linux.intel.com>2013-06-28 12:15:26 +0100
committerNeil Roberts <neil@linux.intel.com>2013-07-01 13:34:54 +0100
commit8bc0df53ee508687b87e547c1cbac5e8d7d5fc80 (patch)
tree13c0525b872d499e7fb8dca453b53e1d5e20a275
parent02f7fa538c9d2b383fa0f601177140b571ecf315 (diff)
downloadcogl-8bc0df53ee508687b87e547c1cbac5e8d7d5fc80.tar.gz
poll: Add _cogl_poll_renderer_modify_fd
_cogl_poll_rendererer_modify_fd can be used internally to modify the event mask on an FD to be polled. This will be used in the Wayland backend to start blocking on write whenever flushing the display fills the socket's buffer. Modifying the FD's events causes the poll age to increase. Reviewed-by: Robert Bragg <robert@linux.intel.com>
-rw-r--r--cogl/cogl-poll-private.h5
-rw-r--r--cogl/cogl-poll.c19
2 files changed, 24 insertions, 0 deletions
diff --git a/cogl/cogl-poll-private.h b/cogl/cogl-poll-private.h
index 3dfaa2b7..2a24128b 100644
--- a/cogl/cogl-poll-private.h
+++ b/cogl/cogl-poll-private.h
@@ -43,6 +43,11 @@ _cogl_poll_renderer_add_fd (CoglRenderer *renderer,
CoglPollDispatchCallback dispatch,
void *user_data);
+void
+_cogl_poll_renderer_modify_fd (CoglRenderer *renderer,
+ int fd,
+ CoglPollFDEvent events);
+
typedef struct _CoglPollSource CoglPollSource;
CoglPollSource *
diff --git a/cogl/cogl-poll.c b/cogl/cogl-poll.c
index 10d15606..cb62327a 100644
--- a/cogl/cogl-poll.c
+++ b/cogl/cogl-poll.c
@@ -152,6 +152,25 @@ _cogl_poll_renderer_remove_fd (CoglRenderer *renderer, int fd)
}
void
+_cogl_poll_renderer_modify_fd (CoglRenderer *renderer,
+ int fd,
+ CoglPollFDEvent events)
+{
+ int fd_index = find_pollfd (renderer, fd);
+
+ if (fd_index == -1)
+ g_warn_if_reached ();
+ else
+ {
+ CoglPollFD *pollfd =
+ &g_array_index (renderer->poll_sources, CoglPollFD, fd_index);
+
+ pollfd->events = events;
+ renderer->poll_fds_age++;
+ }
+}
+
+void
_cogl_poll_renderer_add_fd (CoglRenderer *renderer,
int fd,
CoglPollFDEvent events,