From: Changyeon Lee Date: Tue, 21 Nov 2017 02:52:23 +0000 (+0900) Subject: e_plane: set sync_count to queue when planes need synchronizing X-Git-Tag: accepted/tizen/unified/20171208.062104~44 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=112d3591a942183e6696a6cf41aa413389274475;p=platform%2Fupstream%2Fenlightenment.git e_plane: set sync_count to queue when planes need synchronizing 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 --- diff --git a/src/bin/e_plane.c b/src/bin/e_plane.c index 2357574..3b9e04e 100644 --- a/src/bin/e_plane.c +++ b/src/bin/e_plane.c @@ -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) diff --git a/src/bin/e_plane_renderer.c b/src/bin/e_plane_renderer.c index 10a1b67..ea7c87e 100644 --- a/src/bin/e_plane_renderer.c +++ b/src/bin/e_plane_renderer.c @@ -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; diff --git a/src/bin/e_plane_renderer.h b/src/bin/e_plane_renderer.h index ce5c1f2..4b76be2 100644 --- a/src/bin/e_plane_renderer.h +++ b/src/bin/e_plane_renderer.h @@ -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);