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.c22 Jan 2007 12:44:57 - 1.9
+++ edje_cache.c6 Mar 2007 12:03:34 - 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 - 1.95
+++ edje_load.c 6 Mar 2007 12:03:34 - 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 - 1.116
+++ edje_private.h 6 Mar 2007 12:03:34 - 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.phpp=sourceforgeCID=DEVDEV
___
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs