canvas vg: fix the memory leak issue. 45/258845/7
authorHermet Park <chuneon.park@samsung.com>
Wed, 26 May 2021 12:39:03 +0000 (21:39 +0900)
committerHermet Park <chuneon.park@samsung.com>
Fri, 28 May 2021 07:13:30 +0000 (16:13 +0900)
some dangled tvg nodes occured memory leak when interpolating vg tree.

this fixes the issue.

Change-Id: Ifef6f3cad011ef0fd4197bc6c06d00ebc75adbb8

src/lib/evas/canvas/efl_canvas_vg_container.c
src/lib/evas/canvas/efl_canvas_vg_object.c

index 341a953..e097438 100644 (file)
@@ -37,7 +37,7 @@ _efl_canvas_vg_container_render_pre_tvg(Evas_Object_Protected_Data *obj,
    if (!nd || !nd->data) return;
    cd = nd->data;
 
-   tvg_scene_clear(cd->scene);
+   tvg_scene_clear(cd->scene, EINA_FALSE);
 
    if (!nd->visibility) return;
 
@@ -158,9 +158,10 @@ static void
 _efl_canvas_vg_container_efl_object_destructor(Eo *obj,
                                                Efl_Canvas_Vg_Container_Data *pd)
 {
-   
-   if (!pd->comp.src && pd->scene)
-     tvg_paint_del(pd->scene);
+   if (!pd->comp.src && pd->scene) {
+        tvg_scene_clear(pd->scene, EINA_FALSE);
+        tvg_paint_del(pd->scene);
+   }
 
    efl_unref(pd->comp_target);
    eina_list_free(pd->comp.src);
index a5fa894..f75d6e2 100644 (file)
@@ -340,7 +340,6 @@ _cleanup_reference(void *data, const Efl_Event *event EINA_UNUSED)
 EOLIAN static void
 _efl_canvas_vg_object_efl_object_invalidate(Eo *eo_obj, Efl_Canvas_Vg_Object_Data *pd)
 {
-   Evas_Object_Protected_Data *obj = efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS);
    Evas *e = evas_object_evas_get(eo_obj);
 
    efl_event_callback_del(e, EFL_CANVAS_SCENE_EVENT_RENDER_POST, _cleanup_reference, pd);
@@ -421,8 +420,6 @@ static void
 _render_to_tvg_buffer(Evas_Object_Protected_Data *obj, Efl_Canvas_Vg_Object_Data *pd,
                       Efl_VG *root, int w EINA_UNUSED, int h EINA_UNUSED)
 {
-   tvg_canvas_clear(pd->tvg_canvas, false);
-
    if (!efl_isa(root, EFL_CANVAS_VG_GRADIENT_CLASS))
      {
         Efl_Canvas_Vg_Node_Data *nd = efl_data_scope_get(root, EFL_CANVAS_VG_NODE_CLASS);
@@ -529,6 +526,7 @@ _efl_canvas_vg_object_render(Evas_Object *eo_obj EINA_UNUSED,
                                 pd->tvg_buffer, obj->cur->geometry.x + x,
                                 obj->cur->geometry.y + y, size.w, size.h, do_async);
 
+   tvg_canvas_clear(pd->tvg_canvas, EINA_FALSE);
    pd->changed = EINA_FALSE;
 }