e_comp_object: flush tbm_queue of client when client buffer is locked 75/294475/1
authorChangyeon Lee <cyeon.lee@samsung.com>
Thu, 15 Jun 2023 11:57:44 +0000 (20:57 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Tue, 20 Jun 2023 03:19:01 +0000 (12:19 +0900)
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

index 50d1b4c..9924ca7 100644 (file)
@@ -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);
      }