path: root/src/lib/ecore_drm/ecore_drm_private.h
diff options
authorDerek Foreman <>2016-02-18 13:22:19 -0600
committerMike Blumenkrantz <>2016-02-18 15:50:15 -0500
commit5d7271683be0e790c1b845e7413a36992ebfb703 (patch)
treea1fddfd6a59a7ac9922c45676208fa687776c10c /src/lib/ecore_drm/ecore_drm_private.h
parent1f576da49e662a563d16ea4915e485516aa2b4ee (diff)
ecore_drm: Change page flipping logic so we can't tear
Summary: Previously if we ever tried to queue up two page flips in less than a retrace interval (which can easily happen since the evas clock isn't based on vblank) we'd give up on ever using page flips again, and tear on every screen update. This fixes that by using a vblank callback for custom ticks and using page flips whenever possible. If a page flip fails it means a page flip raced with the vblank ticker, so we need to queue up that frame when the current page flip completes. This ensures that while we might drop interim frames, we will never lose the most recent. Now it should only be possible to tear if two ticks fire during the wait for a page flip to complete. This would result in rendering taking place in the front buffer. I don't think this can happen, but an error is logged if it does. Reviewers: zmike, devilhorns Subscribers: cedric, jpeg Differential Revision:
Diffstat (limited to '')
1 files changed, 1 insertions, 0 deletions
diff --git a/src/lib/ecore_drm/ecore_drm_private.h b/src/lib/ecore_drm/ecore_drm_private.h
index de78d6d307..4271a7e481 100644
--- a/src/lib/ecore_drm/ecore_drm_private.h
+++ b/src/lib/ecore_drm/ecore_drm_private.h
@@ -150,6 +150,7 @@ struct _Ecore_Drm_Output
150 } edid; 150 } edid;
151 151
152 Ecore_Drm_Backlight *backlight; 152 Ecore_Drm_Backlight *backlight;
153 Ecore_Drm_Fb *current, *next;
153 154
154 Eina_Bool primary : 1; 155 Eina_Bool primary : 1;
155 Eina_Bool connected : 1; 156 Eina_Bool connected : 1;