freetype-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[freetype2] master 0f122fe: [bdf] Speed up charmap access.


From: Alexei Podtelezhnikov
Subject: [freetype2] master 0f122fe: [bdf] Speed up charmap access.
Date: Sun, 23 Sep 2018 21:47:02 -0400 (EDT)

branch: master
commit 0f122fef346af27ce469fa3e521bbde747fb741c
Author: Alexei Podtelezhnikov <address@hidden>
Commit: Alexei Podtelezhnikov <address@hidden>

    [bdf] Speed up charmap access.
    
    This makes FT_Get_Char_Index and FT_Get_Next_Char 4-5 times faster.
    
    * src/bdf/bdfdrivr.c (bdf_cmap_char_{index,next}): Help binary search
    with continuous prediction.
---
 ChangeLog          | 19 ++++++++++++++-----
 src/bdf/bdfdrivr.c | 16 ++++++++++++++--
 2 files changed, 28 insertions(+), 7 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 044c3c2..d53f4df 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,13 +1,22 @@
-2018-09-20  Alexei Podtelezhnikov  <address@hidden>
+2018-09-23  Alexei Podtelezhnikov  <address@hidden>
+
+       [bdf] Speed up charmap access.
+
+       This makes FT_Get_Char_Index and FT_Get_Next_Char 4-5 times faster.
 
-       * src/base/ftobjs.c (ft_glyphslot_reset_bimap): Another tweak.
+       * src/bdf/bdfdrivr.c (bdf_cmap_char_{index,next}): Help binary search
+       with continuous prediction.
+
+2018-09-22  Alexei Podtelezhnikov  <address@hidden>
+
+       * src/base/ftobjs.c (ft_glyphslot_preset_bimap): Another tweak.
 
        This one should be clearer. When the rounded monochrome bbox collapses
        we add a pixel that covers most if not all original cbox. 
 
-2018-09-20  Alexei Podtelezhnikov  <address@hidden>
+2018-09-21  Alexei Podtelezhnikov  <address@hidden>
 
-       * src/base/ftobjs.c (ft_glyphslot_reset_bimap): Further tweak.
+       * src/base/ftobjs.c (ft_glyphslot_preset_bimap): Further tweak.
 
 2018-09-21  Ben Wagner  <address@hidden>
 
@@ -36,7 +45,7 @@
 
 2018-09-20  Alexei Podtelezhnikov  <address@hidden>
 
-       * src/base/ftobjs.c (ft_glyphslot_reset_bimap): Tiny rounding tweak.
+       * src/base/ftobjs.c (ft_glyphslot_preset_bimap): Tiny rounding tweak.
 
        This adds pixels in case a contour goes through the center
        and they need to be turned on in the b/w rasterizer.
diff --git a/src/bdf/bdfdrivr.c b/src/bdf/bdfdrivr.c
index fee6110..4a11843 100644
--- a/src/bdf/bdfdrivr.c
+++ b/src/bdf/bdfdrivr.c
@@ -99,13 +99,16 @@ THE SOFTWARE.
 
     min = 0;
     max = cmap->num_encodings;
+    mid = ( min + max ) >> 1;
 
     while ( min < max )
     {
       FT_ULong  code;
 
 
-      mid  = ( min + max ) >> 1;
+      if ( mid > max || mid < min )
+        mid = ( min + max ) >> 1;
+
       code = encodings[mid].enc;
 
       if ( charcode == code )
@@ -120,6 +123,9 @@ THE SOFTWARE.
         max = mid;
       else
         min = mid + 1;
+
+      /* prediction in a continuous block */
+      mid += charcode - code;
     }
 
     return result;
@@ -139,13 +145,16 @@ THE SOFTWARE.
 
     min = 0;
     max = cmap->num_encodings;
+    mid = ( min + max ) >> 1;
 
     while ( min < max )
     {
       FT_ULong  code; /* same as BDF_encoding_el.enc */
 
 
-      mid  = ( min + max ) >> 1;
+      if ( mid > max || mid < min )
+        mid = ( min + max ) >> 1;
+
       code = encodings[mid].enc;
 
       if ( charcode == code )
@@ -160,6 +169,9 @@ THE SOFTWARE.
         max = mid;
       else
         min = mid + 1;
+
+      /* prediction in a continuous block */
+      mid += charcode - code;
     }
 
     charcode = 0;



reply via email to

[Prev in Thread] Current Thread [Next in Thread]