commit 943d5ba

Michael Forney  ·  2013-09-12 00:25:00 +0000 UTC
parent d305f91
drm: Calculate frame time from page flip event
3 files changed,  +14, -11
+3, -8
 1@@ -274,20 +274,15 @@ static void handle_drm_event(struct wl_listener * listener, void * data)
 2     {
 3         case SWC_DRM_PAGE_FLIP:
 4         {
 5-            struct swc_output * output = event->data;
 6+            struct swc_drm_event_data * event_data = event->data;
 7             struct swc_surface * surface;
 8-            struct timeval timeval;
 9-            uint32_t time;
10 
11-            gettimeofday(&timeval, NULL);
12-            time = timeval.tv_sec * 1000 + timeval.tv_usec / 1000;
13-
14-            compositor->pending_flips &= ~SWC_OUTPUT_MASK(output);
15+            compositor->pending_flips &= ~SWC_OUTPUT_MASK(event_data->output);
16 
17             if (compositor->pending_flips == 0)
18             {
19                 wl_list_for_each(surface, &compositor->surfaces, link)
20-                    swc_surface_send_frame_callbacks(surface, time);
21+                    swc_surface_send_frame_callbacks(surface, event_data->time);
22             }
23 
24             /* If we had scheduled updates that couldn't run because we were
+5, -3
 1@@ -255,12 +255,14 @@ static void handle_page_flip(int fd, unsigned int sequence, unsigned int sec,
 2                              unsigned int usec, void * data)
 3 {
 4     struct swc_output * output = data;
 5-
 6-    printf("page flip\n");
 7+    struct swc_drm_event_data event_data = {
 8+        .time = sec * 1000 + usec / 1000,
 9+        .output = output
10+    };
11 
12     /* XXX: It doesn't make sense for multiple things to be listening for page
13      *      flips (or does it?). Maybe this should be a callback instead? */
14-    swc_send_event(&output->drm->event_signal, SWC_DRM_PAGE_FLIP, output);
15+    swc_send_event(&output->drm->event_signal, SWC_DRM_PAGE_FLIP, &event_data);
16 }
17 
18 static drmEventContext event_context = {
+6, -0
 1@@ -13,6 +13,12 @@ enum swc_drm_event
 2     SWC_DRM_PAGE_FLIP
 3 };
 4 
 5+struct swc_drm_event_data
 6+{
 7+    uint32_t time;
 8+    struct swc_output * output;
 9+};
10+
11 struct swc_drm
12 {
13     int fd;