summaryrefslogtreecommitdiff
path: root/src/lib/ecore_drm/Ecore_Drm.h
diff options
context:
space:
mode:
authorDerek Foreman <derekf@osg.samsung.com>2016-02-18 13:22:19 -0600
committerMike Blumenkrantz <zmike@osg.samsung.com>2016-02-18 15:50:15 -0500
commit5d7271683be0e790c1b845e7413a36992ebfb703 (patch)
treea1fddfd6a59a7ac9922c45676208fa687776c10c /src/lib/ecore_drm/Ecore_Drm.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: https://phab.enlightenment.org/D3594
Diffstat (limited to 'src/lib/ecore_drm/Ecore_Drm.h')
-rw-r--r--src/lib/ecore_drm/Ecore_Drm.h4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/lib/ecore_drm/Ecore_Drm.h b/src/lib/ecore_drm/Ecore_Drm.h
index 0366899..8d2787b 100644
--- a/src/lib/ecore_drm/Ecore_Drm.h
+++ b/src/lib/ecore_drm/Ecore_Drm.h
@@ -671,10 +671,12 @@ EAPI void ecore_drm_fb_dirty(Ecore_Drm_Fb *fb, Eina_Rectangle *rects, unsigned i
671 * @param dev The Ecore_Drm_Device to use 671 * @param dev The Ecore_Drm_Device to use
672 * @param fb The Ecore_Drm_Fb to make the current framebuffer 672 * @param fb The Ecore_Drm_Fb to make the current framebuffer
673 * 673 *
674 * @deprecated just call ecore_drm_fb_send() instead.
675 *
674 * @ingroup Ecore_Drm_Fb_Group 676 * @ingroup Ecore_Drm_Fb_Group
675 * @since 1.14 677 * @since 1.14
676 */ 678 */
677EAPI void ecore_drm_fb_set(Ecore_Drm_Device *dev, Ecore_Drm_Fb *fb); 679EINA_DEPRECATED EAPI void ecore_drm_fb_set(Ecore_Drm_Device *dev, Ecore_Drm_Fb *fb);
678 680
679/** 681/**
680 * Send an Ecore_Drm_Fb to the Ecore_Drm_Device 682 * Send an Ecore_Drm_Fb to the Ecore_Drm_Device