From 66089ef91d0b9800075cd208ac13c4f68ed278b3 Mon Sep 17 00:00:00 2001 From: Derek Foreman Date: Tue, 30 Jan 2018 16:29:32 -0600 Subject: [PATCH] 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. --- src/lib/ecore_wl2/ecore_wl2_surface_module_dmabuf.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) 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 a2ddb91..2be8ded 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 p = priv_data; EINA_LIST_FREE(p->buffers, b) - ecore_wl2_buffer_destroy(b); + { + if (!ecore_wl2_buffer_busy_get(b)) + { + if (p->current == b) + p->current = NULL; + ecore_wl2_buffer_destroy(b); + } + } } static Ecore_Wl2_Surface_Interface dmabuf_smanager = -- 2.7.4