summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Michael <cp.michael@samsung.com>2015-11-06 10:33:37 -0500
committerChris Michael <cp.michael@samsung.com>2015-11-06 10:48:28 -0500
commit15f8280f27d7f2fc288f51083d410da3fdd81e5b (patch)
treea66a71bc86aa004461403e3dc3b0411951919bb6
parent2a930581b2cc31437bafd936bc447704f24f9722 (diff)
downloadefl-15f8280f27d7f2fc288f51083d410da3fdd81e5b.tar.gz
ecore-drm: Don't always send drmModePageFlip
If the framebuffer already has a pending pageflip, don't reschedule another one. This also fixes the issue of not setting the proper framebuffer during drmModeSetCrtc call @fix Signed-off-by: Chris Michael <cp.michael@samsung.com>
-rw-r--r--src/lib/ecore_drm/ecore_drm_fb.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/src/lib/ecore_drm/ecore_drm_fb.c b/src/lib/ecore_drm/ecore_drm_fb.c
index 385d3eadcd..56295de03e 100644
--- a/src/lib/ecore_drm/ecore_drm_fb.c
+++ b/src/lib/ecore_drm/ecore_drm_fb.c
@@ -175,6 +175,8 @@ ecore_drm_fb_set(Ecore_Drm_Device *dev, Ecore_Drm_Fb *fb)
EINA_SAFETY_ON_NULL_RETURN(dev);
EINA_SAFETY_ON_NULL_RETURN(fb);
+ if (fb->pending_flip) return;
+
if (dev->dumb[0])
{
if ((fb->w != dev->dumb[0]->w) || (fb->h != dev->dumb[0]->h))
@@ -203,7 +205,7 @@ ecore_drm_fb_set(Ecore_Drm_Device *dev, Ecore_Drm_Fb *fb)
if ((!dev->current) ||
(dev->current->stride != dev->next->stride))
{
- if (drmModeSetCrtc(dev->drm.fd, output->crtc_id, dev->next->id,
+ if (drmModeSetCrtc(dev->drm.fd, output->crtc_id, fb->id,
x, y, &output->conn_id, 1,
&output->current_mode->info))
{
@@ -257,7 +259,7 @@ ecore_drm_fb_send(Ecore_Drm_Device *dev, Ecore_Drm_Fb *fb, Ecore_Drm_Pageflip_Cb
fb->pending_flip = EINA_TRUE;
}
- while (fb->pending_flip)
+ /* while (fb->pending_flip) */
{
int ret = 0;
@@ -265,8 +267,8 @@ ecore_drm_fb_send(Ecore_Drm_Device *dev, Ecore_Drm_Fb *fb, Ecore_Drm_Pageflip_Cb
if (ret < 0)
{
ERR("drmHandleEvent Failed: %m");
- free(cb);
- break;
+ /* free(cb); */
+ /* break; */
}
}
}