Support per surface frame events

This fixes tearing with multi head.
diff --git a/compositor/compositor-drm.c b/compositor/compositor-drm.c
index aa58a31..c769874 100644
--- a/compositor/compositor-drm.c
+++ b/compositor/compositor-drm.c
@@ -79,23 +79,24 @@
 	return 0;
 }
 
-static void
-drm_compositor_present(struct wlsc_compositor *ec)
+static int
+drm_output_present(struct wlsc_output *output_base)
 {
-	struct drm_compositor *c = (struct drm_compositor *) ec;
-	struct drm_output *output;
+	struct drm_output *output = (struct drm_output *) output_base;
+	struct drm_compositor *c =
+		(struct drm_compositor *) output->base.compositor;
 
-	wl_list_for_each(output, &ec->output_list, base.link) {
-		if (drm_output_prepare_render(&output->base))
-			continue;
-		glFlush();
+	if (drm_output_prepare_render(&output->base))
+		return -1;
+	glFlush();
 
-		output->current ^= 1;
+	output->current ^= 1;
 
-		drmModePageFlip(c->drm.fd, output->crtc_id,
-				output->fb_id[output->current ^ 1],
-				DRM_MODE_PAGE_FLIP_EVENT, output);
-	}	
+	drmModePageFlip(c->drm.fd, output->crtc_id,
+			output->fb_id[output->current ^ 1],
+			DRM_MODE_PAGE_FLIP_EVENT, output);
+
+	return 0;
 }
 
 static void
@@ -103,16 +104,10 @@
 		  unsigned int sec, unsigned int usec, void *data)
 {
 	struct wlsc_output *output = data;
-	struct wlsc_compositor *compositor = output->compositor;
 	uint32_t msecs;
 
-	/* run synchronized to first output, ignore other pflip events.
-	 * FIXME: support per output/surface frame callbacks */
-	if (output == container_of(compositor->output_list.prev,
-				   struct wlsc_output, link)) {
-		msecs = sec * 1000 + usec / 1000;
-		wlsc_compositor_finish_frame(compositor, msecs);
-	}
+	msecs = sec * 1000 + usec / 1000;
+	wlsc_output_finish_frame(output, msecs);
 }
 
 static void
@@ -287,6 +282,7 @@
 	}
 
 	output->base.prepare_render = drm_output_prepare_render;
+	output->base.present = drm_output_present;
 
 	wl_list_insert(ec->base.output_list.prev, &output->base.link);
 
@@ -523,7 +519,6 @@
 	}
 
 	ec->base.destroy = drm_destroy;
-	ec->base.present = drm_compositor_present;
 	ec->base.create_buffer = wlsc_shm_buffer_create;
 	ec->base.focus = 1;