e_plane: set sync_count to queue when planes need synchronizing 60/161360/2
authorChangyeon Lee <cyeon.lee@samsung.com>
Tue, 21 Nov 2017 02:52:23 +0000 (11:52 +0900)
committerSooChan Lim <sc1.lim@samsung.com>
Sun, 26 Nov 2017 01:06:44 +0000 (01:06 +0000)
if uset_counter and set_counter is set, surface of fb target
should be complete rendering when it is synchronized with
surface of other planes.

Change-Id: I5b9867b4354d25aa51d22823aefef015315ed39b

src/bin/e_plane.c
src/bin/e_plane_renderer.c
src/bin/e_plane_renderer.h

index 2357574..3b9e04e 100644 (file)
@@ -705,7 +705,13 @@ _e_plane_unset_candidate_set(E_Plane *plane, Eina_Bool sync)
 
              plane->unset_counter = e_plane_renderer_render_count_get(fb_target->renderer);
 
-             if (visible || (!visible && !renderer->rendered)) plane->unset_counter += 1;
+             if (visible || (!visible && !renderer->rendered))
+               {
+                  plane->unset_counter += 1;
+                  e_plane_renderer_surface_queue_sync_count_set(fb_target->renderer, 1);
+               }
+             else
+               e_plane_renderer_surface_queue_sync_count_set(fb_target->renderer, 0);
           }
      }
 
@@ -738,6 +744,7 @@ _e_plane_set_counter_set(E_Plane *plane, E_Client *ec)
        EINA_SAFETY_ON_NULL_RETURN(renderer);
 
        plane->set_counter = e_plane_renderer_render_count_get(fb_target->renderer) + 1;
+       e_plane_renderer_surface_queue_sync_count_set(fb_target->renderer, 1);
     }
 
     if (plane_trace_debug)
index 10a1b67..ea7c87e 100644 (file)
@@ -2525,6 +2525,23 @@ e_plane_renderer_render_count_get(E_Plane_Renderer *renderer)
 }
 
 EINTERN void
+e_plane_renderer_surface_queue_sync_count_set(E_Plane_Renderer *renderer, unsigned int sync_count)
+{
+   tbm_surface_queue_error_e tsq_err = TBM_SURFACE_QUEUE_ERROR_NONE;
+
+   EINA_SAFETY_ON_NULL_RETURN(renderer);
+   EINA_SAFETY_ON_NULL_RETURN(renderer->tqueue);
+
+   tsq_err = tbm_surface_queue_set_sync_count(renderer->tqueue, sync_count);
+   if (tsq_err != TBM_SURFACE_QUEUE_ERROR_NONE)
+     ERR("fail to tbm_surface_queue_set_sync_count");
+
+   if (renderer_trace_debug)
+     ELOGF("E_PLANE_RENDERER", "Set      Renderer(%p) sync_count(%d)",
+           NULL, NULL, renderer, sync_count);
+}
+
+EINTERN void
 e_plane_renderer_ecore_evas_force_render(E_Plane_Renderer *renderer)
 {
    int w, h;
index ce5c1f2..4b76be2 100644 (file)
@@ -89,6 +89,7 @@ EINTERN Eina_Bool                  e_plane_renderer_surface_queue_enqueue(E_Plan
 EINTERN Eina_Bool                  e_plane_renderer_surface_queue_can_dequeue(E_Plane_Renderer *renderer);
 EINTERN tbm_surface_h              e_plane_renderer_surface_queue_dequeue(E_Plane_Renderer *renderer);
 EINTERN Eina_Bool                  e_plane_renderer_surface_queue_clear(E_Plane_Renderer *renderer);
+EINTERN void                       e_plane_renderer_surface_queue_sync_count_set(E_Plane_Renderer *renderer, unsigned int sync_count);
 EINTERN void                       e_plane_renderer_surface_send(E_Plane_Renderer *renderer, E_Client *ec, tbm_surface_h tsurface);
 EINTERN Eina_Bool                  e_plane_renderer_ec_set(E_Plane_Renderer *renderer, E_Client *ec);
 EINTERN Eina_Bool                  e_plane_renderer_cursor_ec_set(E_Plane_Renderer *renderer, E_Client *ec);