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

Reply via email to