diff options
author | Kristian Høgsberg <krh@redhat.com> | 2008-11-28 18:35:25 -0500 |
---|---|---|
committer | Kristian Høgsberg <krh@redhat.com> | 2008-11-28 18:35:25 -0500 |
commit | 4a29890da774c5724921ee1018fa5ae7852abb81 (patch) | |
tree | af2a6a4177acbfa4ce88a5564b5521368b81b0ea /egl-compositor.c | |
parent | fbdbbdc153bf7f6ed22f1b9cb0be73b66e87a3e7 (diff) |
Generalize event loop a bit and pull in the timerfd stuff.
Diffstat (limited to 'egl-compositor.c')
-rw-r--r-- | egl-compositor.c | 36 |
1 files changed, 4 insertions, 32 deletions
diff --git a/egl-compositor.c b/egl-compositor.c index 7d6cd0e..c4c7754 100644 --- a/egl-compositor.c +++ b/egl-compositor.c @@ -17,7 +17,6 @@ #include <math.h> #include <linux/input.h> #include <xf86drmMode.h> -#include <sys/timerfd.h> #include <time.h> #include "wayland.h" @@ -46,7 +45,6 @@ struct egl_compositor { struct wl_event_source *timer_source; int repaint_needed; int repaint_on_timeout; - int timer_fd; struct timespec previous_swap; uint32_t current_frame; }; @@ -527,20 +525,15 @@ animate_overlay(struct egl_compositor *ec) } static void -repaint(int fd, uint32_t mask, void *data) +repaint(void *data) { struct egl_compositor *ec = data; - struct itimerspec its; struct wl_surface_iterator *iterator; struct wl_surface *surface; struct egl_surface *es; struct timespec ts; - uint64_t expires; uint32_t msecs; - if (ec->repaint_on_timeout) - read(fd, &expires, sizeof expires); - if (!ec->repaint_needed) { ec->repaint_on_timeout = 0; return; @@ -570,26 +563,13 @@ repaint(int fd, uint32_t mask, void *data) wl_display_post_frame(ec->wl_display, ec->current_frame, msecs); ec->current_frame++; - its.it_interval.tv_sec = 0; - its.it_interval.tv_nsec = 0; - its.it_value.tv_sec = 0; - its.it_value.tv_nsec = 10 * 1000 * 1000; - if (timerfd_settime(ec->timer_fd, 0, &its, NULL) < 0) { - fprintf(stderr, "could not set timerfd\n: %m"); - return; - } + wl_event_source_timer_update(ec->timer_source, 10); ec->repaint_on_timeout = 1; animate_overlay(ec); } static void -idle_repaint(void *data) -{ - repaint(0, 0, data); -} - -static void schedule_repaint(struct egl_compositor *ec) { struct wl_event_loop *loop; @@ -597,7 +577,7 @@ schedule_repaint(struct egl_compositor *ec) ec->repaint_needed = 1; if (!ec->repaint_on_timeout) { loop = wl_display_get_event_loop(ec->wl_display); - wl_event_loop_add_idle(loop, idle_repaint, ec); + wl_event_loop_add_idle(loop, repaint, ec); } } @@ -1010,16 +990,8 @@ wl_compositor_create(struct wl_display *display) wl_display_add_object(display, &shooter->base); wl_display_add_global(display, &shooter->base); - ec->timer_fd = timerfd_create(CLOCK_MONOTONIC, 0); - if (ec->timer_fd < 0) { - fprintf(stderr, "could not create timerfd\n: %m"); - return NULL; - } - loop = wl_display_get_event_loop(ec->wl_display); - ec->timer_source = wl_event_loop_add_fd(loop, ec->timer_fd, - WL_EVENT_READABLE, - repaint, ec); + ec->timer_source = wl_event_loop_add_timer(loop, repaint, ec); ec->repaint_needed = 0; ec->repaint_on_timeout = 0; |