From 8810db6d1e07f1e87b110bfef75a34290778aef1 Mon Sep 17 00:00:00 2001 From: Junkyeong Kim Date: Fri, 22 Sep 2017 17:53:34 +0900 Subject: [PATCH] e_plane: use pp_data_list for memory management Change-Id: Ifd19605dd7079df19fd45a2df7c5aa9002a685e5 Signed-off-by: Junkyeong Kim --- src/bin/e_plane.c | 32 +++++++++++++++++++++++++++----- src/bin/e_plane.h | 1 + 2 files changed, 28 insertions(+), 5 deletions(-) mode change 100755 => 100644 src/bin/e_plane.c mode change 100755 => 100644 src/bin/e_plane.h diff --git a/src/bin/e_plane.c b/src/bin/e_plane.c old mode 100755 new mode 100644 index 0394824..b177e6b --- a/src/bin/e_plane.c +++ b/src/bin/e_plane.c @@ -936,16 +936,35 @@ fail: return EINA_FALSE; } +static E_Plane_Commit_Data * +_e_plane_pp_data_get(E_Plane *plane, tbm_surface_h tsurface) +{ + Eina_List *l; + E_Plane_Commit_Data *data = NULL; + + EINA_LIST_FOREACH(plane->pp_data_list, l, data) + { + if (!data) continue; + + if (data->tsurface == tsurface) + return data; + } + + return NULL; +} + static void _e_plane_pp_commit_handler(tdm_pp *pp, tbm_surface_h tsurface_src, tbm_surface_h tsurface_dst, void *user_data) { - E_Plane_Commit_Data *data = NULL; E_Plane *plane = NULL; + E_Plane_Commit_Data *data = NULL; - data = (E_Plane_Commit_Data *)user_data; - EINA_SAFETY_ON_NULL_RETURN(data); - plane = data->plane; + plane = (E_Plane *)user_data; EINA_SAFETY_ON_NULL_RETURN(plane); + data = _e_plane_pp_data_get(plane, tsurface_src); + EINA_SAFETY_ON_NULL_RETURN(data); + + plane->pp_data_list = eina_list_remove(plane->pp_data_list, data); /* release the commit data */ if (data->ec) e_pixmap_image_clear(data->ec->pixmap, 1); @@ -1002,7 +1021,7 @@ _e_plane_pp_commit(E_Plane *plane, E_Plane_Commit_Data *data) goto pp_fail; } - tdm_err = tdm_pp_set_done_handler(plane->tpp, _e_plane_pp_commit_handler, data); + tdm_err = tdm_pp_set_done_handler(plane->tpp, _e_plane_pp_commit_handler, plane); EINA_SAFETY_ON_FALSE_GOTO(tdm_err == TDM_ERROR_NONE, pp_fail); tbm_surface_internal_ref(pp_tsurface); @@ -1010,6 +1029,8 @@ _e_plane_pp_commit(E_Plane *plane, E_Plane_Commit_Data *data) tdm_err = tdm_pp_attach(plane->tpp, tsurface, pp_tsurface); EINA_SAFETY_ON_FALSE_GOTO(tdm_err == TDM_ERROR_NONE, attach_fail); + plane->pp_data_list = eina_list_append(plane->pp_data_list, data); + tdm_err = tdm_pp_commit(plane->tpp); EINA_SAFETY_ON_FALSE_GOTO(tdm_err == TDM_ERROR_NONE, commit_fail); @@ -1019,6 +1040,7 @@ _e_plane_pp_commit(E_Plane *plane, E_Plane_Commit_Data *data) return EINA_TRUE; commit_fail: + plane->pp_data_list = eina_list_remove(plane->pp_data_list, data); attach_fail: tbm_surface_internal_unref(pp_tsurface); tbm_surface_internal_unref(tsurface); diff --git a/src/bin/e_plane.h b/src/bin/e_plane.h old mode 100755 new mode 100644 index d5bca90..026bb5f --- a/src/bin/e_plane.h +++ b/src/bin/e_plane.h @@ -94,6 +94,7 @@ struct _E_Plane /* for pp */ tdm_pp *tpp; + Eina_List *pp_data_list; Eina_List *pending_pp_data_list; Eina_List *pending_pp_commit_data_list; tbm_surface_queue_h pp_tqueue; -- 2.7.4