summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDerek Foreman <derekf@osg.samsung.com>2018-01-30 16:29:32 -0600
committerDerek Foreman <derekf@osg.samsung.com>2018-01-30 17:09:51 -0600
commit9632c7b56cc41cef3c1811b745e207599d427607 (patch)
treee0f732956f275f2828dd531a89895d8a721a8d33
parent1bd41aa3b6d36744c3cd3dd41ed46f5b801a5888 (diff)
wl2_surface_dmabuf: improve surface flush
We used to abandon all buffers even if they were locked. This can't actually free them until they're all released by the compositor. Instead just free any buffer the compositor doesn't have locked, so we can still re-use them when they're released without needing a full redraw. There's probably room for additional cleverness here. If we get a new frame event before the buffer release we may want to keep it, and if we get the release first we may want to abandon it.
-rw-r--r--src/lib/ecore_wl2/ecore_wl2_surface_module_dmabuf.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/lib/ecore_wl2/ecore_wl2_surface_module_dmabuf.c b/src/lib/ecore_wl2/ecore_wl2_surface_module_dmabuf.c
index a2ddb9119a..2be8ded399 100644
--- a/src/lib/ecore_wl2/ecore_wl2_surface_module_dmabuf.c
+++ b/src/lib/ecore_wl2/ecore_wl2_surface_module_dmabuf.c
@@ -193,7 +193,14 @@ _evas_dmabuf_surface_flush(Ecore_Wl2_Surface *surface EINA_UNUSED, void *priv_da
193 p = priv_data; 193 p = priv_data;
194 194
195 EINA_LIST_FREE(p->buffers, b) 195 EINA_LIST_FREE(p->buffers, b)
196 ecore_wl2_buffer_destroy(b); 196 {
197 if (!ecore_wl2_buffer_busy_get(b))
198 {
199 if (p->current == b)
200 p->current = NULL;
201 ecore_wl2_buffer_destroy(b);
202 }
203 }
197} 204}
198 205
199static Ecore_Wl2_Surface_Interface dmabuf_smanager = 206static Ecore_Wl2_Surface_Interface dmabuf_smanager =