diff options
author | Chris Michael <cp.michael@samsung.com> | 2015-11-06 10:33:37 -0500 |
---|---|---|
committer | Chris Michael <cp.michael@samsung.com> | 2015-11-06 10:48:28 -0500 |
commit | 15f8280f27d7f2fc288f51083d410da3fdd81e5b (patch) | |
tree | a66a71bc86aa004461403e3dc3b0411951919bb6 | |
parent | 2a930581b2cc31437bafd936bc447704f24f9722 (diff) | |
download | efl-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.c | 10 |
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; */ } } } |