* evas: Now all Evas_Rectangle are part of a pool. Next step would be to

remove free at the end of evas_object_render_pre_effect_updates and only
	do it on idle.


SVN revision: 40040
This commit is contained in:
Cedric BAIL 2009-04-14 12:15:07 +00:00
parent fa4c0f3ea3
commit 55e281b4ff
12 changed files with 28 additions and 76 deletions

View 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))

View 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;

View 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;

View 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 */

View 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;

View File

@ -198,6 +198,16 @@ evas_object_render_pre_prev_cur_add(Evas_Rectangles *rects, Evas_Object *obj)
//// obj->prev.cache.geometry.h);
}
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)
{
@ -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];

View 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;

View 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;
}

View 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;

View 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;

View 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);
}
/**

View 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);