swc

Unnamed repository; edit this file 'description' to name the repository.
git clone git://git.nihaljere.xyz/swc
Log | Files | Refs | README | LICENSE

commit 943d5ba069efe28332cce14a36574361e50691fd
parent d305f919485298557389679c8cbebf481fda36c5
Author: Michael Forney <mforney@mforney.org>
Date:   Wed, 11 Sep 2013 17:25:00 -0700

drm: Calculate frame time from page flip event

Diffstat:
Mlibswc/compositor.c | 11+++--------
Mlibswc/drm.c | 8+++++---
Mlibswc/drm.h | 6++++++
3 files changed, 14 insertions(+), 11 deletions(-)

diff --git a/libswc/compositor.c b/libswc/compositor.c @@ -274,20 +274,15 @@ static void handle_drm_event(struct wl_listener * listener, void * data) { case SWC_DRM_PAGE_FLIP: { - struct swc_output * output = event->data; + struct swc_drm_event_data * event_data = event->data; struct swc_surface * surface; - struct timeval timeval; - uint32_t time; - gettimeofday(&timeval, NULL); - time = timeval.tv_sec * 1000 + timeval.tv_usec / 1000; - - compositor->pending_flips &= ~SWC_OUTPUT_MASK(output); + compositor->pending_flips &= ~SWC_OUTPUT_MASK(event_data->output); if (compositor->pending_flips == 0) { wl_list_for_each(surface, &compositor->surfaces, link) - swc_surface_send_frame_callbacks(surface, time); + swc_surface_send_frame_callbacks(surface, event_data->time); } /* If we had scheduled updates that couldn't run because we were diff --git a/libswc/drm.c b/libswc/drm.c @@ -255,12 +255,14 @@ static void handle_page_flip(int fd, unsigned int sequence, unsigned int sec, unsigned int usec, void * data) { struct swc_output * output = data; - - printf("page flip\n"); + struct swc_drm_event_data event_data = { + .time = sec * 1000 + usec / 1000, + .output = output + }; /* XXX: It doesn't make sense for multiple things to be listening for page * flips (or does it?). Maybe this should be a callback instead? */ - swc_send_event(&output->drm->event_signal, SWC_DRM_PAGE_FLIP, output); + swc_send_event(&output->drm->event_signal, SWC_DRM_PAGE_FLIP, &event_data); } static drmEventContext event_context = { diff --git a/libswc/drm.h b/libswc/drm.h @@ -13,6 +13,12 @@ enum swc_drm_event SWC_DRM_PAGE_FLIP }; +struct swc_drm_event_data +{ + uint32_t time; + struct swc_output * output; +}; + struct swc_drm { int fd;