e_pixmap: send free_flush event in case of client only use wayland_tbm_queue 21/233821/4
authorChangyeon Lee <cyeon.lee@samsung.com>
Fri, 24 Apr 2020 06:36:33 +0000 (15:36 +0900)
committerchangyeon lee <cyeon.lee@samsung.com>
Thu, 21 May 2020 09:14:04 +0000 (09:14 +0000)
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

index df0616d2f5c0d3859e90655f58e289590377f62e..eac699d5f37ed8af79cb6812cee338ef67545db6 100644 (file)
@@ -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);