Enlightenment CVS committal Author : raster Project : e17 Module : libs/edje
Dir : e17/libs/edje/src/lib Modified Files: edje_cache.c edje_calc.c edje_load.c edje_private.h edje_text.c edje_textblock_styles.c Log Message: cedrics font hash lookup speedup :) =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_cache.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -3 -r1.6 -r1.7 --- edje_cache.c 19 Mar 2006 04:22:35 -0000 1.6 +++ edje_cache.c 2 Jul 2006 06:18:18 -0000 1.7 @@ -63,6 +63,32 @@ return edc; } +static int +_edje_font_hash (Edje_File *edf) +{ + int count = 0; + + if (edf->font_dir) + { + Evas_List *l; + for (l = edf->font_dir->entries; l; l = evas_list_next (l)) + { + Edje_Font_Directory_Entry *fnt = l->data; + int length = strlen (fnt->entry) + 7; + char *tmp = alloca (length); + + snprintf (tmp, length, "fonts/%s", fnt->entry); + fnt->path = evas_stringshare_add (tmp); + evas_stringshare_del (fnt->entry); + fnt->entry = fnt->path + 6; + edf->font_hash = evas_hash_direct_add (edf->font_hash, fnt->entry, fnt); + + count++; + } + } + return count; +} + static Edje_File * _edje_file_open(const char *file, const char *coll, int *error_ret, Edje_Part_Collection **edc_ret) { @@ -103,18 +129,19 @@ _edje_textblock_style_parse_and_fix(edf); - if (!coll) + if (coll) { - eet_close(ef); - return edf; + edc = _edje_file_coll_open(edf, ef, coll); + if (!edc) + { + *error_ret = EDJE_LOAD_ERROR_UNKNOWN_COLLECTION; + } + if (edc_ret) *edc_ret = edc; } + + edf->font_hash = NULL; - edc = _edje_file_coll_open(edf, ef, coll); - if (!edc) - { - *error_ret = EDJE_LOAD_ERROR_UNKNOWN_COLLECTION; - } - if (edc_ret) *edc_ret = edc; + _edje_font_hash (edf); eet_close(ef); return edf; =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_calc.c,v retrieving revision 1.78 retrieving revision 1.79 diff -u -3 -r1.78 -r1.79 --- edje_calc.c 28 Mar 2006 07:45:54 -0000 1.78 +++ edje_calc.c 2 Jul 2006 06:18:18 -0000 1.79 @@ -592,24 +592,14 @@ if (!text) text = ""; /* check if the font is embedded in the .eet */ - /* FIXME: we should cache this result */ - if (ed->file->font_dir) + if (ed->file->font_hash) { - Evas_List *l; - - for (l = ed->file->font_dir->entries; l; l = l->next) - { - Edje_Font_Directory_Entry *fnt = l->data; + Edje_Font_Directory_Entry *fnt = evas_hash_find (ed->file->font_hash, font); - if ((fnt->entry) && (!strcmp(fnt->entry, font))) - { - strcpy(buf, "fonts/"); - strncpy(buf + 6, font, sizeof(buf) - 7); - buf[sizeof(buf) - 1] = 0; - font = buf; - inlined_font = 1; - break; - } + if (fnt) + { + font = fnt->path; + inlined_font = 1; } } if (inlined_font) evas_object_text_font_source_set(ep->object, ed->path); =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_load.c,v retrieving revision 1.84 retrieving revision 1.85 diff -u -3 -r1.84 -r1.85 --- edje_load.c 28 Mar 2006 07:45:54 -0000 1.84 +++ edje_load.c 2 Jul 2006 06:18:18 -0000 1.85 @@ -612,7 +612,8 @@ fe = edf->font_dir->entries->data; edf->font_dir->entries = evas_list_remove(edf->font_dir->entries, fe); - if (fe->entry) evas_stringshare_del(fe->entry); + edf->font_hash = evas_hash_del (edf->font_hash, fe->entry, NULL); + if (fe->path) evas_stringshare_del(fe->path); free(fe); } free(edf->font_dir); =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_private.h,v retrieving revision 1.108 retrieving revision 1.109 diff -u -3 -r1.108 -r1.109 --- edje_private.h 28 Jun 2006 18:31:56 -0000 1.108 +++ edje_private.h 2 Jul 2006 06:18:18 -0000 1.109 @@ -222,6 +222,7 @@ int feature_ver; Evas_Hash *collection_hash; + Evas_Hash *font_hash; Evas_List *collection_cache; }; @@ -259,6 +260,7 @@ struct _Edje_Font_Directory_Entry { char *entry; /* the name of the font */ + char *path; }; =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_text.c,v retrieving revision 1.54 retrieving revision 1.55 diff -u -3 -r1.54 -r1.55 --- edje_text.c 28 Jun 2006 18:31:56 -0000 1.54 +++ edje_text.c 2 Jul 2006 06:18:18 -0000 1.55 @@ -284,24 +284,14 @@ if (!font) font = ""; /* check if the font is embedded in the .eet */ - /* FIXME: we should cache this result */ - if (ed->file->font_dir) + if (ed->file->font_hash) { - Evas_List *l; - - for (l = ed->file->font_dir->entries; l; l = l->next) + Edje_Font_Directory_Entry *fnt = evas_hash_find (ed->file->font_hash, font); + + if (fnt) { - Edje_Font_Directory_Entry *fnt = l->data; - - if ((fnt->entry) && (!strcmp(fnt->entry, font))) - { - strcpy(font_buf, "fonts/"); - strncpy(font_buf + 6, font, sizeof(font_buf) - 7); - font_buf[sizeof(font_buf) - 1] = 0; - font = font_buf; - inlined_font = 1; - break; - } + font = fnt->path; + inlined_font = 1; } } =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_textblock_styles.c,v retrieving revision 1.7 retrieving revision 1.8 diff -u -3 -r1.7 -r1.8 --- edje_textblock_styles.c 28 Mar 2006 16:36:04 -0000 1.7 +++ edje_textblock_styles.c 2 Jul 2006 06:18:18 -0000 1.8 @@ -8,17 +8,14 @@ static int _edje_font_is_embedded(Edje_File *edf, char *font) { - Evas_List *l; + if (!edf->font_hash) return 0; + + Edje_Font_Directory_Entry *fnt = evas_hash_find (edf->font_hash, font); - if (!edf->font_dir) return 0; - for (l = edf->font_dir->entries; l; l = l->next) - { - Edje_Font_Directory_Entry *fnt = l->data; - - if ((fnt->entry) && (!strcmp(fnt->entry, font))) - return 1; - } - return 1; + if (fnt) + return 1; + + return 0; } #if 0 Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs