e_plane: fix bug of releasing tsurface to plane surace queue
authorChangyeon Lee <cyeon.lee@samsung.com>
Thu, 21 Jul 2016 12:21:27 +0000 (21:21 +0900)
committerSooChan Lim <sc1.lim@samsung.com>
Mon, 25 Jul 2016 09:56:36 +0000 (18:56 +0900)
Don't release surface to plane surface queue in comp mode if owner of surface is client
and release to plane surface queue in nocomp mode if owner of surface is compositor

Change-Id: I89d59248f1383c21d62cf0e02c8edf1f924f47ab

src/bin/e_plane.c

index e39d43c1f0b2abad58dcc7b38180f8fd0b6f7f25..d85b5a916edf119f3824c287831c16bbe1f4556c 100644 (file)
@@ -1680,20 +1680,11 @@ e_plane_commit_data_release(E_Plane_Commit_Data *data)
           ELOGF("E_PLANE", "Done    Plane(%p)  tsurface(%p) tqueue(%p) data(%p)::Canvas",
                NULL, NULL, plane, tsurface, renderer->tqueue, data);
 
-        /* initial setting of tsurface to the layer */
-        if (plane->tsurface == NULL)
-          {
-             plane->tsurface = tsurface;
-          }
-        else
-          {
-             _e_plane_surface_queue_release(plane, plane->tsurface);
-             e_comp_wl_buffer_reference(&plane->displaying_buffer_ref, NULL);
-             plane->tsurface = tsurface;
-          }
-
         if (plane->reserved_memory)
           {
+             if (plane->tsurface)
+                _e_plane_surface_queue_release(plane, plane->tsurface);
+
              if (renderer->state != E_PLANE_RENDERER_STATE_ACTIVATE)
                 _e_plane_wait_for_showup_set(EINA_FALSE);
 
@@ -1704,8 +1695,15 @@ e_plane_commit_data_release(E_Plane_Commit_Data *data)
           }
         else
           {
-             _e_plane_wait_for_showup_set(EINA_FALSE);
+             if (plane->tsurface && !plane->displaying_buffer_ref.buffer)
+                _e_plane_surface_queue_release(plane, plane->tsurface);
+
+             if (!plane->ec)
+                _e_plane_wait_for_showup_set(EINA_FALSE);
           }
+
+        e_comp_wl_buffer_reference(&plane->displaying_buffer_ref, NULL);
+        plane->tsurface = tsurface;
      }
    else
      {
@@ -1733,16 +1731,17 @@ e_plane_commit_data_release(E_Plane_Commit_Data *data)
           {
              /* release */
              if (plane->tsurface)
-                _e_plane_surface_on_client_release(plane, plane->tsurface);
-          }
+               {
+                  _e_plane_surface_on_client_release(plane, plane->tsurface);
 
-        /* release */
-        if (plane->tsurface)
-          {
-            e_comp_wl_buffer_reference(&plane->displaying_buffer_ref, data->buffer_ref.buffer);
-            plane->tsurface = tsurface;
+                  if (!plane->displaying_buffer_ref.buffer)
+                     _e_plane_surface_queue_release(plane, plane->tsurface);
+               }
           }
 
+        e_comp_wl_buffer_reference(&plane->displaying_buffer_ref, data->buffer_ref.buffer);
+        plane->tsurface = tsurface;
+
         e_comp_wl_buffer_reference(&data->buffer_ref, NULL);
      }