src/hb-private.hh    |    9 ++++++++
 src/hb-shape-plan.cc |   53 +++++++++++++++++++++++++++++++++++++++------------
 2 files changed, 50 insertions(+), 12 deletions(-)

New commits:
commit 30eed75de24ac0b6648a72d98d10bb24a563d7ef
Author: Behdad Esfahbod <[email protected]>
Date:   Tue Aug 12 17:15:09 2014 -0400

    [shape-plan] Fix typo!
    
    The only effect is, if shaper_list was not NULL and no shaper was found,
    we now don't insert anything into cache and return earlier.

diff --git a/src/hb-shape-plan.cc b/src/hb-shape-plan.cc
index e5ccc16..2166173 100644
--- a/src/hb-shape-plan.cc
+++ b/src/hb-shape-plan.cc
@@ -435,7 +435,7 @@ hb_shape_plan_create_cached (hb_face_t                     
*face,
 #include "hb-shaper-list.hh"
 #undef HB_SHAPER_IMPLEMENT
 
-    if (unlikely (!proposal.shaper_list))
+    if (unlikely (!proposal.shaper_func))
       return hb_shape_plan_get_empty ();
   }
 
commit dc9aba6fc53898acd7281b118cec0355d61b1df2
Author: Behdad Esfahbod <[email protected]>
Date:   Tue Aug 12 17:14:36 2014 -0400

    [shape-plan] Better debug messages

diff --git a/src/hb-shape-plan.cc b/src/hb-shape-plan.cc
index 32658f3..e5ccc16 100644
--- a/src/hb-shape-plan.cc
+++ b/src/hb-shape-plan.cc
@@ -115,8 +115,9 @@ hb_shape_plan_create (hb_face_t                     *face,
                      unsigned int                   num_user_features,
                      const char * const            *shaper_list)
 {
-  DEBUG_MSG_FUNC (SHAPE_PLAN, face,
-                 "num_features=%d shaper_list=%p",
+  DEBUG_MSG_FUNC (SHAPE_PLAN, NULL,
+                 "face=%p num_features=%d shaper_list=%p",
+                 face,
                  num_user_features,
                  shaper_list);
 
@@ -404,8 +405,9 @@ hb_shape_plan_create_cached (hb_face_t                     
*face,
                             unsigned int                   num_user_features,
                             const char * const            *shaper_list)
 {
-  DEBUG_MSG_FUNC (SHAPE_PLAN, face,
-                 "num_user_features=%d shaper_list=%p",
+  DEBUG_MSG_FUNC (SHAPE_PLAN, NULL,
+                 "face=%p num_features=%d shaper_list=%p",
+                 face,
                  num_user_features,
                  shaper_list);
 
@@ -442,7 +444,10 @@ retry:
   hb_face_t::plan_node_t *cached_plan_nodes = (hb_face_t::plan_node_t *) 
hb_atomic_ptr_get (&face->shape_plans);
   for (hb_face_t::plan_node_t *node = cached_plan_nodes; node; node = 
node->next)
     if (hb_shape_plan_matches (node->shape_plan, &proposal))
+    {
+      DEBUG_MSG_FUNC (SHAPE_PLAN, node->shape_plan, "fulfilled from cache");
       return hb_shape_plan_reference (node->shape_plan);
+    }
 
   /* Not found. */
 
@@ -465,6 +470,7 @@ retry:
     free (node);
     goto retry;
   }
+  DEBUG_MSG_FUNC (SHAPE_PLAN, shape_plan, "inserted into cache");
 
   return hb_shape_plan_reference (shape_plan);
 }
commit e956c65bf724a8403471362288d2361361b6ac58
Author: Behdad Esfahbod <[email protected]>
Date:   Tue Aug 12 17:03:27 2014 -0400

    [shape-plan] Simplify macro

diff --git a/src/hb-shape-plan.cc b/src/hb-shape-plan.cc
index 23beda1..32658f3 100644
--- a/src/hb-shape-plan.cc
+++ b/src/hb-shape-plan.cc
@@ -418,27 +418,21 @@ hb_shape_plan_create_cached (hb_face_t                    
 *face,
   };
 
   if (shaper_list) {
-    /* Choose shaper.  Adapted from hb_shape_plan_plan(). */
-#define HB_SHAPER_PLAN(shaper) \
-         { \
-           if (hb_##shaper##_shaper_face_data_ensure (face)) \
-           { \
-             proposal.shaper_func = _hb_##shaper##_shape; \
-             break; \
-           } \
-         }
-
+    /* Choose shaper.  Adapted from hb_shape_plan_plan().
+     * Must choose shaper exactly the same way as that function. */
     for (const char * const *shaper_item = shaper_list; *shaper_item; 
shaper_item++)
       if (0)
        ;
 #define HB_SHAPER_IMPLEMENT(shaper) \
-      else if (0 == strcmp (*shaper_item, #shaper)) \
-       HB_SHAPER_PLAN (shaper)
+      else if (0 == strcmp (*shaper_item, #shaper) && \
+              hb_##shaper##_shaper_face_data_ensure (face)) \
+      { \
+       proposal.shaper_func = _hb_##shaper##_shape; \
+       break; \
+      }
 #include "hb-shaper-list.hh"
 #undef HB_SHAPER_IMPLEMENT
 
-#undef HB_SHAPER_PLAN
-
     if (unlikely (!proposal.shaper_list))
       return hb_shape_plan_get_empty ();
   }
commit 29e25550ce8fee3fecc42d20a45ce9c212dc59df
Author: Behdad Esfahbod <[email protected]>
Date:   Tue Aug 12 17:02:59 2014 -0400

    Fix gcc warning

diff --git a/src/hb-private.hh b/src/hb-private.hh
index ab18274..80fd6c4 100644
--- a/src/hb-private.hh
+++ b/src/hb-private.hh
@@ -628,6 +628,15 @@ _hb_debug_msg_va (const char *what,
                  unsigned int level,
                  int level_dir,
                  const char *message,
+                 va_list ap) HB_PRINTF_FUNC(7, 0);
+template <int max_level> static inline void
+_hb_debug_msg_va (const char *what,
+                 const void *obj,
+                 const char *func,
+                 bool indented,
+                 unsigned int level,
+                 int level_dir,
+                 const char *message,
                  va_list ap)
 {
   if (!_hb_debug (level, max_level))
commit 8d5eebc0c6ada01128c6ee384340efdbef7ba29d
Author: Behdad Esfahbod <[email protected]>
Date:   Tue Aug 12 16:50:22 2014 -0400

    [shape-plan] Fix shape-plan caching with more than one requested shaper
    
    Wasn't breaking out of loop, ouch!
    
    
http://www.mail-archive.com/[email protected]/msg1246370.html

diff --git a/src/hb-shape-plan.cc b/src/hb-shape-plan.cc
index fa0db6a..23beda1 100644
--- a/src/hb-shape-plan.cc
+++ b/src/hb-shape-plan.cc
@@ -420,17 +420,20 @@ hb_shape_plan_create_cached (hb_face_t                    
 *face,
   if (shaper_list) {
     /* Choose shaper.  Adapted from hb_shape_plan_plan(). */
 #define HB_SHAPER_PLAN(shaper) \
-         HB_STMT_START { \
+         { \
            if (hb_##shaper##_shaper_face_data_ensure (face)) \
+           { \
              proposal.shaper_func = _hb_##shaper##_shape; \
-         } HB_STMT_END
+             break; \
+           } \
+         }
 
     for (const char * const *shaper_item = shaper_list; *shaper_item; 
shaper_item++)
       if (0)
        ;
 #define HB_SHAPER_IMPLEMENT(shaper) \
       else if (0 == strcmp (*shaper_item, #shaper)) \
-       HB_SHAPER_PLAN (shaper);
+       HB_SHAPER_PLAN (shaper)
 #include "hb-shaper-list.hh"
 #undef HB_SHAPER_IMPLEMENT
 
commit bc3d0dc60104f1cda465a5e8ba5b40ed5bec70b9
Author: Behdad Esfahbod <[email protected]>
Date:   Tue Aug 12 16:49:18 2014 -0400

    [shape-plan] Add debug tracing

diff --git a/src/hb-shape-plan.cc b/src/hb-shape-plan.cc
index 5ffc6b1..fa0db6a 100644
--- a/src/hb-shape-plan.cc
+++ b/src/hb-shape-plan.cc
@@ -29,6 +29,12 @@
 #include "hb-font-private.hh"
 #include "hb-buffer-private.hh"
 
+
+#ifndef HB_DEBUG_SHAPE_PLAN
+#define HB_DEBUG_SHAPE_PLAN (HB_DEBUG+0)
+#endif
+
+
 #define HB_SHAPER_IMPLEMENT(shaper) \
        HB_SHAPER_DATA_ENSURE_DECLARE(shaper, face) \
        HB_SHAPER_DATA_ENSURE_DECLARE(shaper, font)
@@ -42,6 +48,11 @@ hb_shape_plan_plan (hb_shape_plan_t    *shape_plan,
                    unsigned int        num_user_features,
                    const char * const *shaper_list)
 {
+  DEBUG_MSG_FUNC (SHAPE_PLAN, shape_plan,
+                 "num_features=%d shaper_list=%p",
+                 num_user_features,
+                 shaper_list);
+
   const hb_shaper_pair_t *shapers = _hb_shapers_get ();
 
 #define HB_SHAPER_PLAN(shaper) \
@@ -104,6 +115,11 @@ hb_shape_plan_create (hb_face_t                     *face,
                      unsigned int                   num_user_features,
                      const char * const            *shaper_list)
 {
+  DEBUG_MSG_FUNC (SHAPE_PLAN, face,
+                 "num_features=%d shaper_list=%p",
+                 num_user_features,
+                 shaper_list);
+
   hb_shape_plan_t *shape_plan;
   hb_feature_t *features = NULL;
 
@@ -271,6 +287,11 @@ hb_shape_plan_execute (hb_shape_plan_t    *shape_plan,
                       const hb_feature_t *features,
                       unsigned int        num_features)
 {
+  DEBUG_MSG_FUNC (SHAPE_PLAN, shape_plan,
+                 "num_features=%d shaper_func=%p",
+                 num_features,
+                 shape_plan->shaper_func);
+
   if (unlikely (hb_object_is_inert (shape_plan) ||
                hb_object_is_inert (font) ||
                hb_object_is_inert (buffer)))
@@ -383,6 +404,11 @@ hb_shape_plan_create_cached (hb_face_t                     
*face,
                             unsigned int                   num_user_features,
                             const char * const            *shaper_list)
 {
+  DEBUG_MSG_FUNC (SHAPE_PLAN, face,
+                 "num_user_features=%d shaper_list=%p",
+                 num_user_features,
+                 shaper_list);
+
   hb_shape_plan_proposal_t proposal = {
     *props,
     shaper_list,
_______________________________________________
HarfBuzz mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/harfbuzz

Reply via email to