e_comp_wl: Refactor e_comp_wl_buffer_reference() 79/295979/1
authorSeunghun Lee <shiin.lee@samsung.com>
Mon, 20 Mar 2023 00:24:51 +0000 (09:24 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Tue, 18 Jul 2023 04:40:27 +0000 (13:40 +0900)
This breaks code out into _e_comp_wl_buffer_{ref/unref}() and adjusts if
statements.

Change-Id: I5bc13dbf95510289cfc4578c1c11364b30b19b4e

src/bin/e_comp_wl.c

index 26ae16d..9d17003 100644 (file)
@@ -4879,36 +4879,51 @@ e_comp_wl_surface_commit(E_Client *ec)
    return EINA_TRUE;
 }
 
-E_API void
-e_comp_wl_buffer_reference(E_Comp_Wl_Buffer_Ref *ref, E_Comp_Wl_Buffer *buffer)
+static void
+_e_comp_wl_buffer_ref(E_Comp_Wl_Buffer *buffer)
 {
-   if ((ref->buffer) && (buffer != ref->buffer))
+   buffer->busy++;
+}
+
+static void
+_e_comp_wl_buffer_unref(E_Comp_Wl_Buffer *buffer)
+{
+   buffer->busy--;
+   if (buffer->busy != 0)
+     return;
+
+   if (buffer->buffer_release)
      {
-        ref->buffer->busy--;
-        if (ref->buffer->busy == 0)
-          {
-             if (ref->buffer->buffer_release)
-               {
-                  e_explicit_sync_buffer_release_destroy(ref->buffer->buffer_release);
-                  ref->buffer->buffer_release = NULL;
-               }
+        e_explicit_sync_buffer_release_destroy(buffer->buffer_release);
+        buffer->buffer_release = NULL;
+     }
 
-             if (ref->buffer->resource)
-               {
-                  if (!wl_resource_get_client(ref->buffer->resource)) return;
+   if (buffer->resource)
+     {
+        if (!wl_resource_get_client(buffer->resource)) return;
 
-                  wl_buffer_send_release(ref->buffer->resource);
+        wl_buffer_send_release(buffer->resource);
 #ifdef HAVE_WAYLAND_TBM
-                  wayland_tbm_server_increase_buffer_sync_timeline(e_comp_wl->tbm.server,
-                                                                   ref->buffer->resource, 1);
+        wayland_tbm_server_increase_buffer_sync_timeline(e_comp_wl->tbm.server,
+                                                         buffer->resource, 1);
 #endif
-               }
-             else
-               {
-                  if (ref->buffer->type == E_COMP_WL_BUFFER_TYPE_TBM)
-                     e_comp_wl_tbm_buffer_destroy(ref->buffer);
-               }
-          }
+     }
+   else
+     {
+        if (buffer->type == E_COMP_WL_BUFFER_TYPE_TBM)
+          e_comp_wl_tbm_buffer_destroy(buffer);
+     }
+}
+
+E_API void
+e_comp_wl_buffer_reference(E_Comp_Wl_Buffer_Ref *ref, E_Comp_Wl_Buffer *buffer)
+{
+   if (ref->buffer == buffer)
+     return;
+
+   if (ref->buffer)
+     {
+        _e_comp_wl_buffer_unref(ref->buffer);
 
         if (ref->destroy_listener_usable)
           {
@@ -4917,15 +4932,17 @@ e_comp_wl_buffer_reference(E_Comp_Wl_Buffer_Ref *ref, E_Comp_Wl_Buffer *buffer)
           }
      }
 
-   if ((buffer) && (buffer != ref->buffer))
+   if (buffer)
      {
-        buffer->busy++;
+        _e_comp_wl_buffer_ref(buffer);
+
+        ref->destroy_listener.notify = _e_comp_wl_buffer_reference_cb_destroy;
         wl_signal_add(&buffer->destroy_signal, &ref->destroy_listener);
+
         ref->destroy_listener_usable = EINA_TRUE;
      }
 
    ref->buffer = buffer;
-   ref->destroy_listener.notify = _e_comp_wl_buffer_reference_cb_destroy;
 }
 
 static Eina_Bool