From 28456d690af3f2525195ac9fae3cfb44aadcc89a Mon Sep 17 00:00:00 2001 From: Changyeon Lee Date: Thu, 15 Jun 2023 20:57:44 +0900 Subject: [PATCH] e_comp_object: flush tbm_queue of client when client buffer is locked if tbm_queue of client use double buffer, client can render with only next buffer because previous buffer is locked for render update lock and client deos not have idle buffer. for prevening client can not render frame, send flush event to tbm_queue of client. Change-Id: I78a24e208b9e60d2e357d9789b5fed6f5ead3776 --- src/bin/e_comp_object.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/bin/e_comp_object.c b/src/bin/e_comp_object.c index 50d1b4cc1d..9924ca7015 100644 --- a/src/bin/e_comp_object.c +++ b/src/bin/e_comp_object.c @@ -6493,14 +6493,26 @@ e_comp_object_map_enable_set(Evas_Object *obj, Eina_Bool enable) E_API Eina_Bool e_comp_object_render_update_lock(Evas_Object *obj) { + E_Comp_Wl_Buffer *buffer; + struct wayland_tbm_client_queue *cqueue; + API_ENTRY EINA_FALSE; if (cw->render_update_lock.lock == 0) { _e_comp_object_hook_call(E_COMP_OBJECT_HOOK_RENDER_UPDATE_LOCK_SET, cw->ec); - e_comp_wl_buffer_reference(&cw->render_update_lock.buffer_ref, - e_pixmap_resource_get(cw->ec->pixmap)); + + buffer = e_pixmap_resource_get(cw->ec->pixmap); + if ((buffer) && (buffer->resource)) + { + cqueue = e_comp_wl_tbm_client_queue_get(cw->ec); + if (cqueue) + wayland_tbm_server_client_queue_flush(cqueue); + } + + e_comp_wl_buffer_reference(&cw->render_update_lock.buffer_ref, buffer); e_comp_object_render_update_del(obj); + ELOGF("COMP", "Render update lock enabled", cw->ec); } -- 2.34.1