devilhorns pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=b5425dc51a56992f3941ede35a3ff52d63021087
commit b5425dc51a56992f3941ede35a3ff52d63021087 Author: Derek Foreman <der...@osg.samsung.com> Date: Fri Mar 11 13:48:44 2016 -0600 ecore_drm: Disable custom tick if we can't wait for vblank If we fail to schedule a VBlank event, then we should disable custom ticks and fallback to timer-based animators. This patch fixes some issues with Intel Atom based setups where rendering would fail when using custom animators. @fix --- src/lib/ecore_drm/ecore_drm_device.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/lib/ecore_drm/ecore_drm_device.c b/src/lib/ecore_drm/ecore_drm_device.c index 2ea9f42..62f54ec 100644 --- a/src/lib/ecore_drm/ecore_drm_device.c +++ b/src/lib/ecore_drm/ecore_drm_device.c @@ -36,6 +36,8 @@ static Eina_List *drm_devices; static int ticking = 0; +static void _ecore_drm_tick_source_set(Ecore_Drm_Device *dev); + static void _ecore_drm_tick_schedule(Ecore_Drm_Device *dev) { @@ -46,7 +48,11 @@ _ecore_drm_tick_schedule(Ecore_Drm_Device *dev) vbl.request.type = (DRM_VBLANK_RELATIVE | DRM_VBLANK_EVENT); vbl.request.sequence = 1; vbl.request.signal = (unsigned long)dev; - drmWaitVBlank(dev->drm.fd, &vbl); + if (drmWaitVBlank(dev->drm.fd, &vbl) < 0) + { + WRN("Vblank failed, disabling custom ticks"); + _ecore_drm_tick_source_set(NULL); + } } static void @@ -65,6 +71,13 @@ _ecore_drm_tick_end(void *data EINA_UNUSED) static void _ecore_drm_tick_source_set(Ecore_Drm_Device *dev) { + if (!dev) + { + ecore_animator_custom_source_tick_begin_callback_set(NULL, NULL); + ecore_animator_custom_source_tick_end_callback_set(NULL, NULL); + ecore_animator_source_set(ECORE_ANIMATOR_SOURCE_TIMER); + return; + } ecore_animator_custom_source_tick_begin_callback_set (_ecore_drm_tick_begin, dev); ecore_animator_custom_source_tick_end_callback_set --