From 865e705f6fc86119cd37da0d72823b0f1629ae7a Mon Sep 17 00:00:00 2001 From: Changyeon Lee Date: Fri, 24 Apr 2020 15:36:33 +0900 Subject: [PATCH] e_pixmap: send free_flush event in case of client only use wayland_tbm_queue efl sw engine doesn't bind shm_flusher protocol after 5.5, so e_pixmap send free_flush event of wayland_tbm_queue Change-Id: Ie611f385861a8de504422671abab188572b2303c --- src/bin/e_pixmap.c | 53 ++++++++++++++++++++++++---------------------- 1 file changed, 28 insertions(+), 25 deletions(-) diff --git a/src/bin/e_pixmap.c b/src/bin/e_pixmap.c index df0616d2f5..eac699d5f3 100644 --- a/src/bin/e_pixmap.c +++ b/src/bin/e_pixmap.c @@ -1044,38 +1044,42 @@ _e_pixmap_buffer_clear(E_Pixmap *cp, Eina_Bool only_free) DBG("PIXMAP: Buffer Flush(%s) '%s'(%p) only_free:%d", cp->shm_flusher ? "SHM" : "NATIVE", cp->client->icccm.name?:"", cp->client, only_free); - if (only_free) + if (cp->shm_flusher) { - if (!cp->shm_flusher) return; - - /*free_flush was supported from version 2*/ - if (wl_resource_get_version(cp->shm_flusher) < TIZEN_SURFACE_SHM_FLUSHER_FREE_FLUSH_SINCE_VERSION) - return; + if (only_free) + { + /*free_flush was supported from version 2*/ + if (wl_resource_get_version(cp->shm_flusher) < TIZEN_SURFACE_SHM_FLUSHER_FREE_FLUSH_SINCE_VERSION) + return; - tizen_surface_shm_flusher_send_free_flush(cp->shm_flusher); + tizen_surface_shm_flusher_send_free_flush(cp->shm_flusher); + } + else + tizen_surface_shm_flusher_send_flush(cp->shm_flusher); } else { - if (cp->shm_flusher) - tizen_surface_shm_flusher_send_flush(cp->shm_flusher); - else + if ((cp->buffer) && (cp->client->comp_data)) { - if ((cp->buffer) && (cp->client->comp_data)) - { - if ((cp->buffer->type == E_COMP_WL_BUFFER_TYPE_TBM) || - (cp->buffer->type == E_COMP_WL_BUFFER_TYPE_NATIVE)) - { - struct wayland_tbm_client_queue *cqueue; - - cqueue = wayland_tbm_server_client_queue_get(e_comp_wl->tbm.server, - cp->client->comp_data->wl_surface); - if (!cqueue) return; - - wayland_tbm_server_client_queue_flush(cqueue); - } - } + if ((cp->buffer->type == E_COMP_WL_BUFFER_TYPE_TBM) || + (cp->buffer->type == E_COMP_WL_BUFFER_TYPE_NATIVE)) + { + struct wayland_tbm_client_queue * cqueue; + + cqueue = wayland_tbm_server_client_queue_get(e_comp_wl->tbm.server, + cp->client->comp_data->wl_surface); + if (cqueue) return; + + if (only_free) + wayland_tbm_server_client_queue_free_flush(cqueue); + else + wayland_tbm_server_client_queue_flush(cqueue); + } } + } + if (!only_free) + { /* release the helded buffer by e_client */ if (cp->client->comp_data) { @@ -1084,7 +1088,6 @@ _e_pixmap_buffer_clear(E_Pixmap *cp, Eina_Bool only_free) e_presentation_time_container_feedback_discard(&cp->client->comp_data->presentation_container); } - /* composite object clear */ e_comp_object_clear(cp->client->frame); -- 2.34.1