From a1733db1c6ff40aae71fa142a12b1fea7b53dd37 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Fri, 23 Nov 2012 16:40:04 -0500 Subject: [PATCH] [OTLayout] Start adding process() tracing --- src/hb-ot-layout-gsubgpos-private.hh | 44 +++++++++++++++++++++------- src/hb-private.hh | 6 ++-- 2 files changed, 37 insertions(+), 13 deletions(-) diff --git a/src/hb-ot-layout-gsubgpos-private.hh b/src/hb-ot-layout-gsubgpos-private.hh index 47f8f6b88..30c43bc3e 100644 --- a/src/hb-ot-layout-gsubgpos-private.hh +++ b/src/hb-ot-layout-gsubgpos-private.hh @@ -38,6 +38,12 @@ namespace OT { +#define TRACE_PROCESS(this) \ + hb_auto_trace_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 @@ namespace OT { 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 - 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_closure_context_t 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 inline return_t process (const T &obj) { return obj.would_apply (this); } @@ -117,7 +127,7 @@ struct hb_would_apply_context_t glyphs (glyphs_), len (len_), zero_context (zero_context_), - debug_depth (0) {}; + debug_depth (0) {} }; @@ -133,10 +143,12 @@ struct hb_would_apply_context_t 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 - 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 @@ struct hb_collect_glyphs_context_t 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 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_get_coverage_context_t 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 @@ -205,6 +224,7 @@ struct hb_apply_context_t 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 @@ struct hb_apply_context_t 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 @@ struct hb_apply_context_t 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 @@ struct ChainContext template 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 34f2e1521..b5d417ce8 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 @@ struct hb_auto_trace_t { 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");