edje: trying to add back my small improvements.

SVN revision: 59999
This commit is contained in:
Cedric BAIL 2011-06-06 17:47:32 +00:00
parent fc5d48d169
commit 3a69fed6f5
4 changed files with 28 additions and 17 deletions

View File

@ -110,3 +110,7 @@
evas freeze and thaw calls. May help in certain pathological
situations.
2011-05-27 Cedric Bail
* Improve performance by avoiding walking eina_list for nothing
when deleting member_class.

View File

@ -200,6 +200,8 @@ _edje_del(Edje *ed)
eina_stringshare_del(cb->part);
free(cb);
}
if (ed->members) eina_hash_free(ed->members);
free(ed);
}

View File

@ -1007,6 +1007,8 @@ struct _Edje
int table_programs_size;
unsigned int table_parts_size;
Eina_Hash *members;
Edje_Perspective *persp;
struct {

View File

@ -3575,13 +3575,11 @@ _edje_color_class_member_add(Edje *ed, const char *color_class)
Eina_List *members;
if ((!ed) || (!color_class)) return;
if (!_edje_color_class_member_hash) _edje_color_class_member_hash = eina_hash_string_superfast_new(NULL);
members = eina_hash_find(_edje_color_class_member_hash, color_class);
if (members)
eina_hash_del(_edje_color_class_member_hash, color_class, members);
members = eina_list_prepend(members, ed);
if (!_edje_color_class_member_hash) _edje_color_class_member_hash = eina_hash_string_superfast_new(NULL);
eina_hash_add(_edje_color_class_member_hash, color_class, members);
eina_hash_set(_edje_color_class_member_hash, color_class, members);
}
void
@ -3590,13 +3588,13 @@ _edje_color_class_member_del(Edje *ed, const char *color_class)
Eina_List *members;
if ((!ed) || (!color_class)) return;
if (!_edje_color_class_member_hash) return;
members = eina_hash_find(_edje_color_class_member_hash, color_class);
if (!members) return;
eina_hash_del(_edje_color_class_member_hash, color_class, members);
members = eina_list_remove(members, ed);
if (members)
eina_hash_add(_edje_color_class_member_hash, color_class, members);
eina_hash_set(_edje_color_class_member_hash, color_class, members);
}
/**
@ -3674,33 +3672,38 @@ _edje_text_class_member_add(Edje *ed, const char *text_class)
/* Get members list */
members = eina_hash_find(_edje_text_class_member_hash, text_class);
/* Remove members list */
if (members)
eina_hash_del(_edje_text_class_member_hash, text_class, members);
/* Update the member list */
members = eina_list_prepend(members, ed);
/* Add the member list back */
/* Don't loose track of members list */
if (!ed->members)
ed->members = eina_hash_string_small_new(NULL);
eina_hash_set(ed->members, text_class, members);
/* Reset the member list to the right pointer */
if (!_edje_text_class_member_hash)
_edje_text_class_member_hash = eina_hash_string_superfast_new(NULL);
eina_hash_add(_edje_text_class_member_hash, text_class, members);
eina_hash_set(_edje_text_class_member_hash, text_class, members);
}
void
_edje_text_class_member_del(Edje *ed, const char *text_class)
{
Eina_List *members;
Eina_List *lookup;
if ((!ed) || (!text_class)) return;
members = eina_hash_find(_edje_text_class_member_hash, text_class);
if (!members) return;
eina_hash_del(_edje_text_class_member_hash, text_class, members);
lookup = eina_hash_find(ed->members, text_class);
members = eina_list_remove(members, ed);
if (members)
eina_hash_add(_edje_text_class_member_hash, text_class, members);
if (!lookup) return ;
eina_hash_del(ed->members, text_class, lookup);
members = eina_list_remove_list(members, lookup);
eina_hash_set(_edje_text_class_member_hash, text_class, members);
}
void