e_comp_object: reference front buffer while render update is locked 67/282767/2
authorChangyeon Lee <cyeon.lee@samsung.com>
Thu, 6 Oct 2022 11:06:46 +0000 (20:06 +0900)
committerSooChan Lim <sc1.lim@samsung.com>
Tue, 11 Oct 2022 08:18:50 +0000 (08:18 +0000)
front buffer should be reference for preventing tearing buffer

Change-Id: I449802b815120a85dcf8d05f2d54a07f80099893

src/bin/e_comp_object.c

index d849e6d6e209b98cb1690eaf338b99a1e8d91313..9ea53b6127cf0c7bf67974abd22305afe8a76109 100644 (file)
@@ -169,6 +169,7 @@ typedef struct _E_Comp_Object
    Eina_Bool            set_mouse_callbacks;
 
    int                  render_update_lock;
+   E_Comp_Wl_Buffer_Ref render_update_lock_buffer_ref;
 } E_Comp_Object;
 
 typedef struct _E_Input_Rect_Data
@@ -6536,8 +6537,10 @@ e_comp_object_render_update_lock(Evas_Object *obj)
 
    if (cw->render_update_lock == 1)
      {
-        _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));
         e_comp_object_render_update_del(obj);
+        _e_comp_object_hook_call(E_COMP_OBJECT_HOOK_RENDER_UPDATE_LOCK_SET, cw->ec);
         ELOGF("COMP", "Render update lock enabled", cw->ec);
      }
 
@@ -6556,6 +6559,7 @@ e_comp_object_render_update_unlock(Evas_Object *obj)
 
    if (cw->render_update_lock == 0)
      {
+        e_comp_wl_buffer_reference(&cw->render_update_lock_buffer_ref, NULL);
         e_comp_object_render_update_add(obj);
         ELOGF("COMP", "Render update lock disabled", cw->ec);
      }