Enlightenment CVS committal Author : ningerso Project : e17 Module : libs/edje
Dir : e17/libs/edje/src/lib Modified Files: edje_cache.c edje_load.c edje_private.h Log Message: Use a hash for faster file global data lookup. If we hit a case where per-object data lookup is slow, then this should be extended to include that. =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_cache.c,v retrieving revision 1.9 retrieving revision 1.10 diff -u -3 -r1.9 -r1.10 --- edje_cache.c 22 Jan 2007 12:44:57 -0000 1.9 +++ edje_cache.c 6 Mar 2007 12:03:34 -0000 1.10 @@ -69,6 +69,7 @@ Edje_File *edf; Edje_Part_Collection *edc; Eet_File *ef; + Evas_List *l; ef = eet_open(file, EET_FILE_MODE_READ); if (!ef) @@ -102,6 +103,14 @@ edf->references = 1; _edje_textblock_style_parse_and_fix(edf); + + for (l = edf->data; l; l = evas_list_remove(l, l->data)) + { + Edje_Data *di = l->data; + edf->data_cache = evas_hash_add(edf->data_cache, evas_stringshare_add(di->key), di->value); + free(di); + } + edf->data = NULL; if (!coll) { @@ -117,6 +126,7 @@ if (edc_ret) *edc_ret = edc; eet_close(ef); + return edf; } =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_load.c,v retrieving revision 1.95 retrieving revision 1.96 diff -u -3 -r1.95 -r1.96 --- edje_load.c 22 Jan 2007 12:44:57 -0000 1.95 +++ edje_load.c 6 Mar 2007 12:03:34 -0000 1.96 @@ -426,23 +426,15 @@ char *str = NULL; int error_ret = 0; - edf = _edje_cache_file_coll_open(file, NULL, &error_ret, NULL); - if (edf != NULL) + if (key) { - for (l = edf->data; l; l = l->next) + edf = _edje_cache_file_coll_open(file, NULL, &error_ret, NULL); + if ((edf != NULL) && (edf->data_cache != NULL)) { - Edje_Data *di; - - di = l->data; - if ((di->key) && (key) && (!strcmp(di->key, key))) - { - if (!di->value) return NULL; - str = strdup(di->value); - break; - } - + str = evas_hash_find(edf->data_cache, key); + if (str) str = strdup(str); + _edje_cache_file_unref(edf); } - _edje_cache_file_unref(edf); } return str; } @@ -581,6 +573,19 @@ ed->table_programs = NULL; ed->table_programs_size = 0; } +/** + * Used to free the cached data values that are stored in the data_cache + * hash table. + */ +static Evas_Bool data_cache_free(Evas_Hash *hash, const char *key, + void *data, void *fdata) +{ + evas_stringshare_del(data); + + return 1; +} + + void _edje_file_free(Edje_File *edf) @@ -657,7 +662,13 @@ if (edt->value) evas_stringshare_del(edt->value); free(edt); } - + if (edf->data_cache) + { + evas_hash_foreach(edf->data_cache, data_cache_free, NULL); + evas_hash_free(edf->data_cache); + edf->data_cache = NULL; + } + while (edf->color_classes) { Edje_Color_Class *ecc; =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_private.h,v retrieving revision 1.116 retrieving revision 1.117 diff -u -3 -r1.116 -r1.117 --- edje_private.h 9 Oct 2006 15:19:18 -0000 1.116 +++ edje_private.h 6 Mar 2007 12:03:34 -0000 1.117 @@ -229,6 +229,7 @@ Evas_Hash *collection_hash; Evas_List *collection_cache; + Evas_Hash *data_cache; }; struct _Edje_Style ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys-and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs