Commit 75133bff1d216f7f45303a375a4f80e296d11902

David Turner 2001-10-27T17:36:04

fixed a small performance bug in the new cache sub-system implementation

diff --git a/ChangeLog b/ChangeLog
index dfcf778..1a3d575 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2001-10-27  David Turner       <david@freetype.org>
+
+	* src/cache/ftchunk.c (ftc_chunk_cache_lookup): fixed a bug that
+	considerably lowered the performance of the abstract chunk cache.
+
 2001-10-26  David Turner       <david@freetype.org>
 
         * include/freetype/ftcache.h, include/freetype/cache/*.h,
diff --git a/src/cache/ftcchunk.c b/src/cache/ftcchunk.c
index 9fc08af..e6288bc 100644
--- a/src/cache/ftcchunk.c
+++ b/src/cache/ftcchunk.c
@@ -34,8 +34,15 @@
   /*************************************************************************/
   /*************************************************************************/
 
-#define  FTC_CSET_HASH(cset,start)  \
-             ((FT_UFast)(((cset)->hash << 16) | ((start) & 0xFFFF)))
+#define  FTC_CSET_CHUNK_INDEX(cset,gindex)   \
+                  ( (gindex) / (cset)->item_count )
+                  
+#define  FTC_CSET_START(cset,gindex)    \
+                  ( FTC_CSET_CHUNK_INDEX(cset,gindex) * (cset)->item_count )
+
+#define  FTC_CSET_HASH(cset,gindex)  \
+             ((FT_UFast)( ((cset)->hash << 16) | \
+                          (FTC_CSET_CHUNK_INDEX(cset,gindex) & 0xFFFF) ))
 
   /* create a new chunk node, setting its cache index and ref count */
   FT_EXPORT_DEF( FT_Error )
@@ -47,10 +54,10 @@
     FTC_ChunkCache  ccache = cset->ccache;
     FT_Error        error  = 0;
     FT_UInt         len;
-    FT_UInt         start  = (gindex / cset->item_count) * cset->item_count;
+    FT_UInt         start  = FTC_CSET_START(cset,gindex);
 
     cnode->cset       = cset;
-    cnode->node.hash  = FTC_CSET_HASH(cset,start);
+    cnode->node.hash  = FTC_CSET_HASH(cset,gindex);
     cnode->item_start = start;
 
     len = cset->item_total - start;
@@ -149,6 +156,7 @@
   }
 
 
+
   FT_EXPORT_DEF( FT_Error )
   ftc_chunk_cache_init( FTC_ChunkCache    ccache,
                         FT_LruList_Class  cset_class )
@@ -166,6 +174,7 @@
   }
 
 
+
   FT_EXPORT_DEF( FT_Error )
   ftc_chunk_cache_lookup( FTC_ChunkCache   ccache,
                           FTC_ChunkQuery   query,
@@ -177,8 +186,8 @@
     error = FT_LruList_Lookup( ccache->cset_lru, query, &node );
     if ( !error )
     {
-      FTC_ChunkSet  cset = FTC_CHUNK_SET(node);
-      FT_UFast      hash = FTC_CSET_HASH( cset, query->gindex );
+      FTC_ChunkSet  cset  = FTC_CHUNK_SET(node);
+      FT_UFast      hash  = FTC_CSET_HASH( cset, query->gindex );
 
       error = ftc_cache_lookup_node( FTC_CACHE(ccache), hash, query,
                                      FTC_NODE_P(anode) );
diff --git a/src/cache/ftcsbits.c b/src/cache/ftcsbits.c
index 871c20c..95b5a13 100644
--- a/src/cache/ftcsbits.c
+++ b/src/cache/ftcsbits.c
@@ -225,7 +225,7 @@
 
           /* now, compute size */
           if ( asize )
-            *asize = sizeof( FTC_SBitRec ) + ABS(sbit->pitch) * sbit->height;
+            *asize = ABS(sbit->pitch) * sbit->height;
           
         }  /* glyph dimensions ok */