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;