[OTLayout] Start adding process() tracing
diff --git a/src/hb-ot-layout-gsubgpos-private.hh b/src/hb-ot-layout-gsubgpos-private.hh
index 47f8f6b..30c43bc 100644
--- a/src/hb-ot-layout-gsubgpos-private.hh
+++ b/src/hb-ot-layout-gsubgpos-private.hh
@@ -38,6 +38,12 @@
+#define TRACE_PROCESS(this) \
+ hb_auto_trace_t<context_t::max_debug_depth, typename context_t::return_t> trace \
+ (&c->debug_depth, c->get_name (), this, HB_FUNC, \
+ "");
+
+
#ifndef HB_DEBUG_CLOSURE
#define HB_DEBUG_CLOSURE (HB_DEBUG+0)
#endif
@@ -49,11 +55,13 @@
struct hb_closure_context_t
{
+ inline const char *get_name (void) { return "CLOSURE"; }
+ static const unsigned int max_debug_depth = HB_DEBUG_CLOSURE;
typedef void_t return_t;
typedef return_t (*recurse_func_t) (hb_closure_context_t *c, unsigned int lookup_index);
template <typename T>
- inline return_t process (const T &obj) { obj.closure (this); return void_t (); }
- static return_t default_return_value (void) { return return_t (); }
+ inline return_t process (const T &obj) { obj.closure (this); return VOID; }
+ static return_t default_return_value (void) { return VOID; }
bool stop_sublookup_iteration (const return_t r) const { return false; }
return_t recurse (unsigned int lookup_index)
{
@@ -96,6 +104,8 @@
struct hb_would_apply_context_t
{
+ inline const char *get_name (void) { return "WOULD_APPLY"; }
+ static const unsigned int max_debug_depth = HB_DEBUG_WOULD_APPLY;
typedef bool return_t;
template <typename T>
inline return_t process (const T &obj) { return obj.would_apply (this); }
@@ -117,7 +127,7 @@
glyphs (glyphs_),
len (len_),
zero_context (zero_context_),
- debug_depth (0) {};
+ debug_depth (0) {}
};
@@ -133,10 +143,12 @@
struct hb_collect_glyphs_context_t
{
+ inline const char *get_name (void) { return "COLLECT_GLYPHS"; }
+ static const unsigned int max_debug_depth = HB_DEBUG_COLLECT_GLYPHS;
typedef void_t return_t;
template <typename T>
- inline return_t process (const T &obj) { obj.collect_glyphs (this); return void_t (); }
- static return_t default_return_value (void) { return return_t (); }
+ inline return_t process (const T &obj) { obj.collect_glyphs (this); return VOID; }
+ static return_t default_return_value (void) { return VOID; }
bool stop_iteration (const return_t r) const { return false; }
return_t recurse (unsigned int lookup_index)
{
@@ -163,22 +175,27 @@
input (glyphs_input ? *glyphs_input : *hb_set_get_empty ()),
after (glyphs_after ? *glyphs_after : *hb_set_get_empty ()),
output (glyphs_output ? *glyphs_output : *hb_set_get_empty ()),
- debug_depth (0) {};
+ debug_depth (0) {}
};
struct hb_get_coverage_context_t
{
+ inline const char *get_name (void) { return "GET_COVERAGE"; }
+ static const unsigned int max_debug_depth = 0;
typedef const Coverage &return_t;
template <typename T>
inline return_t process (const T &obj) { return obj.get_coverage (); }
- static const return_t default_return_value (void) { return Null(Coverage); }
+ static return_t default_return_value (void) { return Null(Coverage); }
bool stop_sublookup_iteration (const return_t r) const { return true; /* Unused */ }
return_t recurse (unsigned int lookup_index)
{ return default_return_value (); }
- hb_get_coverage_context_t (void) {}
+ hb_get_coverage_context_t (void) :
+ debug_depth (0) {}
+
+ unsigned int debug_depth;
};
@@ -194,6 +211,8 @@
struct hb_apply_context_t
{
+ inline const char *get_name (void) { return "APPLY"; }
+ static const unsigned int max_debug_depth = HB_DEBUG_APPLY;
typedef bool return_t;
typedef return_t (*recurse_func_t) (hb_apply_context_t *c, unsigned int lookup_index);
template <typename T>
@@ -205,6 +224,7 @@
if (unlikely (nesting_level_left == 0 || !recurse_func))
return default_return_value ();
+ /* TODO Reuse context. */
hb_apply_context_t new_c (*this);
new_c.nesting_level_left--;
return recurse_func (&new_c, lookup_index);
@@ -219,9 +239,9 @@
unsigned int nesting_level_left;
unsigned int lookup_props;
unsigned int property; /* propety of first glyph */
- unsigned int debug_depth;
const GDEF &gdef;
bool has_glyph_classes;
+ unsigned int debug_depth;
hb_apply_context_t (hb_font_t *font_,
@@ -232,9 +252,10 @@
lookup_mask (lookup_mask_),
recurse_func (NULL),
nesting_level_left (MAX_NESTING_LEVEL),
- lookup_props (0), property (0), debug_depth (0),
+ lookup_props (0), property (0),
gdef (*hb_ot_layout_from_face (face)->gdef),
- has_glyph_classes (gdef.has_glyph_classes ()) {}
+ has_glyph_classes (gdef.has_glyph_classes ()),
+ debug_depth (0) {}
void set_recurse_func (recurse_func_t func) { recurse_func = func; }
void set_lookup_props (unsigned int lookup_props_) { lookup_props = lookup_props_; }
@@ -1693,6 +1714,7 @@
template <typename context_t>
inline typename context_t::return_t process (context_t *c) const
{
+ TRACE_PROCESS (this);
switch (u.format) {
case 1: return c->process (u.format1);
case 2: return c->process (u.format2);
diff --git a/src/hb-private.hh b/src/hb-private.hh
index 34f2e15..b5d417c 100644
--- a/src/hb-private.hh
+++ b/src/hb-private.hh
@@ -63,7 +63,9 @@
/* Void! */
-typedef struct {} void_t;
+struct _void_t;
+typedef const _void_t &void_t;
+#define VOID (* (const _void_t *) NULL)
/* Basics */
@@ -718,7 +720,7 @@
if (plevel) --*plevel;
}
- inline ret_t ret (ret_t v, unsigned int line = 0)
+ inline ret_t &ret (ret_t &v, unsigned int line = 0)
{
if (unlikely (returned)) {
fprintf (stderr, "OUCH, double calls to TRACE_RETURN. This is a bug, please report.\n");