efl/src/modules/evas/engines/drm
Derek Foreman 5d7271683b 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
2016-02-18 15:50:15 -05:00
..
Evas_Engine_Drm.h evas-drm: Cleanup Engine Info structure 2015-04-10 11:09:51 +02:00
evas_engine.c evas-drm: Cleanup drm engine code 2015-04-10 11:09:51 +02:00
evas_engine.h evas-drm: Remove useless fields from Outbuf structure 2015-06-02 09:24:22 -04:00
evas_outbuf.c ecore_drm: Change page flipping logic so we can't tear 2016-02-18 15:50:15 -05:00