e_plane_renderer: release displaying surface when candidated ec is deactivated 43/93443/5 accepted/tizen/3.0/ivi/20161028.151256 accepted/tizen/3.0/mobile/20161028.143151 accepted/tizen/3.0/tv/20161028.143458 accepted/tizen/3.0/wearable/20161028.150827 accepted/tizen/common/20161024.135015 accepted/tizen/ivi/20161026.053527 accepted/tizen/mobile/20161026.053421 accepted/tizen/tv/20161026.053453 accepted/tizen/wearable/20161026.053513 submit/tizen/20161024.043840 submit/tizen_3.0/20161028.062323 submit/tizen_3.0/20161028.092423 submit/tizen_3.0_common/20161104.104000
authorChangyeon Lee <cyeon.lee@samsung.com>
Mon, 24 Oct 2016 09:28:30 +0000 (18:28 +0900)
committerChangyeon Lee <cyeon.lee@samsung.com>
Mon, 24 Oct 2016 09:56:02 +0000 (18:56 +0900)
for avoiding e20 and candidated client use scanout buffer at the same time

Change-Id: Ib29d47fcab4fe6db90db1fe880517e3738ec196f

src/bin/e_plane_renderer.c

index 630e7824e280bfcb52c2028d2474fc9ba497dc37..7b90e5e352c0c410004e3265847eef834c24fa3a 100644 (file)
@@ -347,29 +347,36 @@ _e_plane_renderer_client_exported_surfaces_release(E_Plane_Renderer_Client *rend
 
    EINA_SAFETY_ON_NULL_RETURN(renderer_client);
 
-   EINA_LIST_FOREACH_SAFE(renderer_client->exported_surfaces, l_s, ll_s, tsurface)
-     {
-        if (!tsurface) continue;
 
-        if (tsurface == renderer->previous_tsurface)
-          {
-             _e_plane_renderer_exported_surface_release(renderer, tsurface);
-             renderer_client->exported_surfaces = eina_list_remove_list(renderer_client->exported_surfaces, l_s);
-             break;
-          }
+   if (renderer_client->state == E_PLANE_RENDERER_CLIENT_STATE_CANDIDATED)
+     {
+        e_plane_renderer_surface_queue_release(renderer, renderer->displaying_tsurface);
      }
-
-   EINA_LIST_FOREACH_SAFE(renderer_client->exported_surfaces, l_s, ll_s, tsurface)
+   else
      {
-        if (!tsurface) continue;
-
-        if (tsurface == renderer->displaying_tsurface)
+        EINA_LIST_FOREACH_SAFE(renderer_client->exported_surfaces, l_s, ll_s, tsurface)
           {
-             _e_plane_renderer_exported_surface_release(renderer, tsurface);
-             renderer_client->exported_surfaces = eina_list_remove_list(renderer_client->exported_surfaces, l_s);
-             break;
+             if (!tsurface) continue;
+
+             if (tsurface == renderer->previous_tsurface)
+               {
+                  _e_plane_renderer_exported_surface_release(renderer, tsurface);
+                  renderer_client->exported_surfaces = eina_list_remove_list(renderer_client->exported_surfaces, l_s);
+                  break;
+               }
           }
 
+        EINA_LIST_FOREACH_SAFE(renderer_client->exported_surfaces, l_s, ll_s, tsurface)
+          {
+             if (!tsurface) continue;
+
+             if (tsurface == renderer->displaying_tsurface)
+               {
+                  _e_plane_renderer_exported_surface_release(renderer, tsurface);
+                  renderer_client->exported_surfaces = eina_list_remove_list(renderer_client->exported_surfaces, l_s);
+                  break;
+               }
+          }
      }
 
    EINA_LIST_FOREACH_SAFE(renderer_client->exported_surfaces, l_s, ll_s, tsurface)
@@ -866,14 +873,14 @@ e_plane_renderer_deactivate(E_Plane_Renderer *renderer)
      }
 
 done:
+   _e_plane_renderer_client_exported_surfaces_release(renderer_client, renderer);
+
    renderer->state = E_PLANE_RENDERER_STATE_NONE;
    renderer->ec = NULL;
 
    renderer_client->state = E_PLANE_RENDERER_CLIENT_STATE_NONE;
    renderer_client->renderer = NULL;
 
-   _e_plane_renderer_client_exported_surfaces_release(renderer_client, renderer);
-
    return EINA_TRUE;
 }