* evas: Now all Evas_Rectangle are part of a pool. Next step would be to
authorcedric <cedric@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Tue, 14 Apr 2009 12:15:07 +0000 (12:15 +0000)
committercedric <cedric@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Tue, 14 Apr 2009 12:15:07 +0000 (12:15 +0000)
remove free at the end of evas_object_render_pre_effect_updates and only
do it on idle.

git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/evas@40040 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

12 files changed:
src/lib/canvas/evas_object_gradient.c
src/lib/canvas/evas_object_gradient2_linear.c
src/lib/canvas/evas_object_gradient2_radial.c
src/lib/canvas/evas_object_image.c
src/lib/canvas/evas_object_line.c
src/lib/canvas/evas_object_main.c
src/lib/canvas/evas_object_polygon.c
src/lib/canvas/evas_object_rectangle.c
src/lib/canvas/evas_object_text.c
src/lib/canvas/evas_object_textblock.c
src/lib/canvas/evas_render.c
src/lib/include/evas_private.h

index f20daf9..0971457 100644 (file)
@@ -1040,14 +1040,7 @@ evas_object_gradient_render_post(Evas_Object *obj)
    /* data anymore we can free it if the object deems this is a good idea */
    o = (Evas_Object_Gradient *)(obj->object_data);
    /* remove those pesky changes */
-   while (obj->clip.changes)
-     {
-       Evas_Rectangle *r;
-
-       r = (Evas_Rectangle *)obj->clip.changes->data;
-       obj->clip.changes = eina_list_remove(obj->clip.changes, r);
-       free(r);
-     }
+   evas_object_clip_changes_clean(obj);
    /* move cur to prev safely for object data */
    obj->prev = obj->cur;
    if (o->prev.type.name && (o->prev.type.name != o->cur.type.name))
index 72404c7..3100556 100644 (file)
@@ -398,14 +398,7 @@ evas_object_gradient2_linear_render_post(Evas_Object *obj)
    o = (Evas_Object_Gradient2_Linear *)(obj->object_data);
    og = (Evas_Object_Gradient2 *)(o);
    /* remove those pesky changes */
-   while (obj->clip.changes)
-     {
-       Evas_Rectangle *r;
-
-       r = (Evas_Rectangle *)obj->clip.changes->data;
-       obj->clip.changes = eina_list_remove(obj->clip.changes, r);
-       free(r);
-     }
+   evas_object_clip_changes_clean(obj);
    /* move cur to prev safely for object data */
    obj->prev = obj->cur;
    obj->changed = 0;
index 6cc236b..9ca682d 100644 (file)
@@ -396,14 +396,7 @@ evas_object_gradient2_radial_render_post(Evas_Object *obj)
    o = (Evas_Object_Gradient2_Radial *)(obj->object_data);
    og = (Evas_Object_Gradient2 *)(o);
    /* remove those pesky changes */
-   while (obj->clip.changes)
-     {
-       Evas_Rectangle *r;
-
-       r = (Evas_Rectangle *)obj->clip.changes->data;
-       obj->clip.changes = eina_list_remove(obj->clip.changes, r);
-       free(r);
-     }
+   evas_object_clip_changes_clean(obj);
    /* move cur to prev safely for object data */
    obj->prev = obj->cur;
    obj->changed = 0;
index 9ce1ce2..3c588b1 100644 (file)
@@ -2537,8 +2537,7 @@ evas_object_image_render_post(Evas_Object *obj)
    /* data anymore we can free it if the object deems this is a good idea */
    o = (Evas_Object_Image *)(obj->object_data);
    /* remove those pesky changes */
-   EINA_LIST_FREE(obj->clip.changes, r)
-     eina_mempool_free(_evas_rectangle_mp, r);
+   evas_object_clip_changes_clean(obj);
    EINA_LIST_FREE(o->pixel_updates, r)
      eina_mempool_free(_evas_rectangle_mp, r);
    /* move cur to prev safely for object data */
index 0432c1d..d8e810a 100644 (file)
@@ -405,14 +405,7 @@ evas_object_line_render_post(Evas_Object *obj)
    /* data anymore we can free it if the object deems this is a good idea */
    o = (Evas_Object_Line *)(obj->object_data);
    /* remove those pesky changes */
-   while (obj->clip.changes)
-     {
-       Evas_Rectangle *r;
-
-       r = (Evas_Rectangle *)obj->clip.changes->data;
-       obj->clip.changes = eina_list_remove(obj->clip.changes, r);
-       free(r);
-     }
+   evas_object_clip_changes_clean(obj);
    /* move cur to prev safely for object data */
    obj->prev = obj->cur;
    o->prev = o->cur;
index 4a29994..3e2aa07 100644 (file)
@@ -199,6 +199,16 @@ evas_object_render_pre_prev_cur_add(Evas_Rectangles *rects, Evas_Object *obj)
 }
 
 void
+evas_object_clip_changes_clean(Evas_Object *obj)
+{
+   Evas_Rectangle *r;
+
+   EINA_LIST_FREE(obj->clip.changes, r)
+     eina_mempool_free(_evas_rectangle_mp, r);
+}
+
+
+void
 evas_object_render_pre_effect_updates(Evas_Rectangles *rects, Evas_Object *obj, int is_v, int was_v)
 {
    Evas_Rectangle *r;
@@ -276,14 +286,10 @@ evas_object_render_pre_effect_updates(Evas_Rectangles *rects, Evas_Object *obj,
      }
    else
      {
-       while (obj->clip.changes)
-         {
-            free(obj->clip.changes->data);
-            obj->clip.changes = eina_list_remove(obj->clip.changes, obj->clip.changes->data);
-         }
+       evas_object_clip_changes_clean(obj);
        for (i = 0; i < rects->count; ++i)
          {
-            r = malloc(sizeof(Evas_Rectangle));
+            r = eina_mempool_alloc(_evas_rectangle_mp, sizeof (Evas_Rectangle));
             if (!r) goto end;
 
             *r = rects->array[i];
index 7f651d6..a323054 100644 (file)
@@ -409,14 +409,7 @@ evas_object_polygon_render_post(Evas_Object *obj)
    /* data anymore we can free it if the object deems this is a good idea */
    o = (Evas_Object_Polygon *)(obj->object_data);
    /* remove those pesky changes */
-   while (obj->clip.changes)
-     {
-       Evas_Rectangle *r;
-
-       r = (Evas_Rectangle *)obj->clip.changes->data;
-       obj->clip.changes = eina_list_remove(obj->clip.changes, r);
-       free(r);
-     }
+   evas_object_clip_changes_clean(obj);
    /* move cur to prev safely for object data */
    obj->prev = obj->cur;
    o->changed = 0;
index fb352a2..7594d80 100644 (file)
@@ -291,14 +291,7 @@ evas_object_rectangle_render_post(Evas_Object *obj)
    /* data anymore we can free it if the object deems this is a good idea */
    o = (Evas_Object_Rectangle *)(obj->object_data);
    /* remove those pesky changes */
-   while (obj->clip.changes)
-     {
-       Evas_Rectangle *r;
-
-       r = (Evas_Rectangle *)obj->clip.changes->data;
-       obj->clip.changes = eina_list_remove(obj->clip.changes, r);
-       free(r);
-     }
+   evas_object_clip_changes_clean(obj);
    /* move cur to prev safely for object data */
    obj->prev = obj->cur;
 }
index ec7c3c6..d303e8c 100644 (file)
@@ -1685,14 +1685,7 @@ evas_object_text_render_post(Evas_Object *obj)
    /* data anymore we can free it if the object deems this is a good idea */
    o = (Evas_Object_Text *)(obj->object_data);
    /* remove those pesky changes */
-   while (obj->clip.changes)
-     {
-       Evas_Rectangle *r;
-
-       r = (Evas_Rectangle *)obj->clip.changes->data;
-       obj->clip.changes = eina_list_remove(obj->clip.changes, r);
-       free(r);
-     }
+   evas_object_clip_changes_clean(obj);
    /* move cur to prev safely for object data */
    obj->prev = obj->cur;
    o->prev = o->cur;
index dd60dea..7184465 100644 (file)
@@ -5529,8 +5529,7 @@ evas_object_textblock_render_post(Evas_Object *obj)
    /* data anymore we can free it if the object deems this is a good idea */
    o = (Evas_Object_Textblock *)(obj->object_data);
    /* remove those pesky changes */
-   EINA_LIST_FREE(obj->clip.changes, r)
-     eina_mempool_free(_evas_rectangle_mp, r);
+   evas_object_clip_changes_clean(obj);
    /* move cur to prev safely for object data */
    obj->prev = obj->cur;
 //   o->prev = o->cur;
index 05f1bc1..645ad7c 100644 (file)
@@ -423,12 +423,9 @@ evas_render_updates_internal(Evas *e, unsigned char make_updates, unsigned char
               {
                  Evas_Rectangle *rect;
 
-                 rect = malloc(sizeof(Evas_Rectangle));
+                 NEW_RECT(rect, ux, uy, uw, uh);
                  if (rect)
-                   {
-                      rect->x = ux; rect->y = uy; rect->w = uw; rect->h = uh;
-                      updates = eina_list_append(updates, rect);
-                   }
+                   updates = eina_list_append(updates, rect);
               }
             off_x = cx - ux;
             off_y = cy - uy;
@@ -600,11 +597,10 @@ evas_render_updates_internal(Evas *e, unsigned char make_updates, unsigned char
 EAPI void
 evas_render_updates_free(Eina_List *updates)
 {
-   while (updates)
-     {
-       free(updates->data);
-       updates = eina_list_remove(updates, updates->data);
-     }
+   Evas_Rectangle *r;
+
+   EINA_LIST_FREE(updates, r)
+     eina_mempool_free(_evas_rectangle_mp, r);
 }
 
 /**
index 13ea78f..126b551 100644 (file)
@@ -703,6 +703,7 @@ void evas_object_free(Evas_Object *obj, int clean_layer);
 void evas_object_inject(Evas_Object *obj, Evas *e);
 void evas_object_release(Evas_Object *obj, int clean_layer);
 void evas_object_change(Evas_Object *obj);
+void evas_object_clip_changes_clean(Evas_Object *obj);
 void evas_object_render_pre_visible_change(Evas_Rectangles *rects, Evas_Object *obj, int is_v, int was_v);
 void evas_object_render_pre_clipper_change(Evas_Rectangles *rects, Evas_Object *obj);
 void evas_object_render_pre_prev_cur_add(Evas_Rectangles *rects, Evas_Object *obj);