aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/ecore_drm2
diff options
context:
space:
mode:
authorDerek Foreman <derekf@osg.samsung.com>2016-11-18 09:41:52 -0600
committerDerek Foreman <derekf@osg.samsung.com>2016-11-18 09:41:52 -0600
commitaa3479570d0ee48865a1beeeff95fd280178d2d7 (patch)
tree58e50c13ee45729ea9d0a1ec865094bc52ec244c /src/lib/ecore_drm2
parentecore_con: fix time to live value name and type (diff)
downloadefl-aa3479570d0ee48865a1beeeff95fd280178d2d7.tar.gz
ecore_drm2: Add a panic mode to drm2_fb_release
Previously we'd call this only when we absolutely needed to, so it made sense to always attempt to free a buffer, including ones on scanout or pending flip. However, it's useful to have a way to release the "next" only, so we can do that before starting a render to free up the buffer that's never going to be scanned out.
Diffstat (limited to 'src/lib/ecore_drm2')
-rw-r--r--src/lib/ecore_drm2/Ecore_Drm2.h13
-rw-r--r--src/lib/ecore_drm2/ecore_drm2_fb.c3
2 files changed, 10 insertions, 6 deletions
diff --git a/src/lib/ecore_drm2/Ecore_Drm2.h b/src/lib/ecore_drm2/Ecore_Drm2.h
index 7712643114..50408be989 100644
--- a/src/lib/ecore_drm2/Ecore_Drm2.h
+++ b/src/lib/ecore_drm2/Ecore_Drm2.h
@@ -829,16 +829,19 @@ EAPI void ecore_drm2_fb_busy_set(Ecore_Drm2_Fb *fb, Eina_Bool busy);
/**
* Try to force a framebuffer release for an output
*
- * This tries to release the next, pending, or current buffer from
- * the output. If successful there will be a release callback to
- * the registered handler, and the fb will no longer be flagged busy.
+ * This tries to release the next or optionally pending, or current
+ * buffer from the output. If successful there will be a release callback
+ * to the registered handler, and the fb will no longer be flagged busy.
*
- * @param output The output to force release
+ * Releasing buffers committed to scanout will potentially cause flicker,
+ * so this is only done when the panic flag is set.
*
+ * @param output The output to force release
+ * @param panic Try to release even buffers committed to scanout
* @ingroup Ecore_Drm2_Fb_Group
* @since 1.19
*/
-EAPI void ecore_drm2_fb_release(Ecore_Drm2_Output *o);
+EAPI void ecore_drm2_fb_release(Ecore_Drm2_Output *o, Eina_Bool panic);
/**
* Set the user data for the output's page flip handler
diff --git a/src/lib/ecore_drm2/ecore_drm2_fb.c b/src/lib/ecore_drm2/ecore_drm2_fb.c
index 3f7b9ef8e4..3737bdfcc0 100644
--- a/src/lib/ecore_drm2/ecore_drm2_fb.c
+++ b/src/lib/ecore_drm2/ecore_drm2_fb.c
@@ -456,7 +456,7 @@ ecore_drm2_fb_busy_set(Ecore_Drm2_Fb *fb, Eina_Bool busy)
}
EAPI void
-ecore_drm2_fb_release(Ecore_Drm2_Output *o)
+ecore_drm2_fb_release(Ecore_Drm2_Output *o, Eina_Bool panic)
{
EINA_SAFETY_ON_NULL_RETURN(o);
@@ -466,6 +466,7 @@ ecore_drm2_fb_release(Ecore_Drm2_Output *o)
o->next = NULL;
return;
}
+ if (!panic) return;
WRN("Buffer release request when no next buffer");
/* If we have to release these we're going to see tearing.