< prev index next >
src/java.desktop/share/native/libfontmanager/harfbuzz/hb-debug.hh
Print this page
*** 25,41 ****
*/
#ifndef HB_DEBUG_HH
#define HB_DEBUG_HH
! #include "hb-private.hh"
#ifndef HB_DEBUG
#define HB_DEBUG 0
#endif
static inline bool
_hb_debug (unsigned int level,
unsigned int max_level)
{
return level < max_level;
--- 25,88 ----
*/
#ifndef HB_DEBUG_HH
#define HB_DEBUG_HH
! #include "hb.hh"
! #include "hb-atomic.hh"
! #include "hb-dsalgs.hh"
#ifndef HB_DEBUG
#define HB_DEBUG 0
#endif
+
+ /*
+ * Global runtime options.
+ */
+
+ struct hb_options_t
+ {
+ bool unused : 1; /* In-case sign bit is here. */
+ bool initialized : 1;
+ bool uniscribe_bug_compatible : 1;
+ bool aat : 1;
+ };
+
+ union hb_options_union_t {
+ int i;
+ hb_options_t opts;
+ };
+ static_assert ((sizeof (hb_atomic_int_t) >= sizeof (hb_options_union_t)), "");
+
+ HB_INTERNAL void
+ _hb_options_init ();
+
+ extern HB_INTERNAL hb_atomic_int_t _hb_options;
+
+ static inline hb_options_t
+ hb_options ()
+ {
+ /* Make a local copy, so we can access bitfield threadsafely. */
+ hb_options_union_t u;
+ u.i = _hb_options.get_relaxed ();
+
+ if (unlikely (!u.i))
+ {
+ _hb_options_init ();
+ u.i = _hb_options.get_relaxed ();
+ }
+
+ return u.opts;
+ }
+
+
+ /*
+ * Debug output (needs enabling at compile time.)
+ */
+
static inline bool
_hb_debug (unsigned int level,
unsigned int max_level)
{
return level < max_level;
*** 124,134 ****
vfprintf (stderr, message, ap);
}
fprintf (stderr, "\n");
}
! template <> inline void
_hb_debug_msg_va<0> (const char *what HB_UNUSED,
const void *obj HB_UNUSED,
const char *func HB_UNUSED,
bool indented HB_UNUSED,
unsigned int level HB_UNUSED,
--- 171,181 ----
vfprintf (stderr, message, ap);
}
fprintf (stderr, "\n");
}
! template <> inline void HB_PRINTF_FUNC(7, 0)
_hb_debug_msg_va<0> (const char *what HB_UNUSED,
const void *obj HB_UNUSED,
const char *func HB_UNUSED,
bool indented HB_UNUSED,
unsigned int level HB_UNUSED,
*** 143,153 ****
bool indented,
unsigned int level,
int level_dir,
const char *message,
...) HB_PRINTF_FUNC(7, 8);
! template <int max_level> static inline void
_hb_debug_msg (const char *what,
const void *obj,
const char *func,
bool indented,
unsigned int level,
--- 190,200 ----
bool indented,
unsigned int level,
int level_dir,
const char *message,
...) HB_PRINTF_FUNC(7, 8);
! template <int max_level> static inline void HB_PRINTF_FUNC(7, 8)
_hb_debug_msg (const char *what,
const void *obj,
const char *func,
bool indented,
unsigned int level,
*** 167,177 ****
bool indented HB_UNUSED,
unsigned int level HB_UNUSED,
int level_dir HB_UNUSED,
const char *message HB_UNUSED,
...) HB_PRINTF_FUNC(7, 8);
! template <> inline void
_hb_debug_msg<0> (const char *what HB_UNUSED,
const void *obj HB_UNUSED,
const char *func HB_UNUSED,
bool indented HB_UNUSED,
unsigned int level HB_UNUSED,
--- 214,224 ----
bool indented HB_UNUSED,
unsigned int level HB_UNUSED,
int level_dir HB_UNUSED,
const char *message HB_UNUSED,
...) HB_PRINTF_FUNC(7, 8);
! template <> inline void HB_PRINTF_FUNC(7, 8)
_hb_debug_msg<0> (const char *what HB_UNUSED,
const void *obj HB_UNUSED,
const char *func HB_UNUSED,
bool indented HB_UNUSED,
unsigned int level HB_UNUSED,
*** 235,261 ****
va_list ap;
va_start (ap, message);
_hb_debug_msg_va<max_level> (what, obj, func, true, plevel ? *plevel : 0, +1, message, ap);
va_end (ap);
}
! inline ~hb_auto_trace_t (void)
{
_hb_warn_no_return<ret_t> (returned);
if (!returned) {
_hb_debug_msg<max_level> (what, obj, nullptr, true, plevel ? *plevel : 1, -1, " ");
}
if (plevel) --*plevel;
}
! inline ret_t ret (ret_t v, unsigned int line = 0)
{
if (unlikely (returned)) {
fprintf (stderr, "OUCH, double calls to return_trace(). This is a bug, please report.\n");
return v;
}
! _hb_debug_msg<max_level> (what, obj, nullptr, true, plevel ? *plevel : 1, -1,
"return %s (line %d)",
hb_printer_t<ret_t>().print (v), line);
if (plevel) --*plevel;
plevel = nullptr;
returned = true;
--- 282,310 ----
va_list ap;
va_start (ap, message);
_hb_debug_msg_va<max_level> (what, obj, func, true, plevel ? *plevel : 0, +1, message, ap);
va_end (ap);
}
! ~hb_auto_trace_t ()
{
_hb_warn_no_return<ret_t> (returned);
if (!returned) {
_hb_debug_msg<max_level> (what, obj, nullptr, true, plevel ? *plevel : 1, -1, " ");
}
if (plevel) --*plevel;
}
! ret_t ret (ret_t v,
! const char *func = "",
! unsigned int line = 0)
{
if (unlikely (returned)) {
fprintf (stderr, "OUCH, double calls to return_trace(). This is a bug, please report.\n");
return v;
}
! _hb_debug_msg<max_level> (what, obj, func, true, plevel ? *plevel : 1, -1,
"return %s (line %d)",
hb_printer_t<ret_t>().print (v), line);
if (plevel) --*plevel;
plevel = nullptr;
returned = true;
*** 276,296 ****
const void *obj_,
const char *func,
const char *message,
...) HB_PRINTF_FUNC(6, 7) {}
! inline ret_t ret (ret_t v, unsigned int line HB_UNUSED = 0) { return v; }
};
/* For disabled tracing; optimize out everything.
* https://github.com/harfbuzz/harfbuzz/pull/605 */
template <typename ret_t>
struct hb_no_trace_t {
! inline ret_t ret (ret_t v, unsigned int line HB_UNUSED = 0) { return v; }
};
! #define return_trace(RET) return trace.ret (RET, __LINE__)
/*
* Instances.
*/
--- 325,349 ----
const void *obj_,
const char *func,
const char *message,
...) HB_PRINTF_FUNC(6, 7) {}
! ret_t ret (ret_t v,
! const char *func HB_UNUSED = nullptr,
! unsigned int line HB_UNUSED = 0) { return v; }
};
/* For disabled tracing; optimize out everything.
* https://github.com/harfbuzz/harfbuzz/pull/605 */
template <typename ret_t>
struct hb_no_trace_t {
! ret_t ret (ret_t v,
! const char *func HB_UNUSED = "",
! unsigned int line HB_UNUSED = 0) { return v; }
};
! #define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
/*
* Instances.
*/
*** 346,379 ****
c->buffer->idx, c->buffer->cur().codepoint, (int) c->lookup_index)
#else
#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
#endif
- #ifndef HB_DEBUG_CLOSURE
- #define HB_DEBUG_CLOSURE (HB_DEBUG+0)
- #endif
- #if HB_DEBUG_CLOSURE
- #define TRACE_CLOSURE(this) \
- hb_auto_trace_t<HB_DEBUG_CLOSURE, hb_void_t> trace \
- (&c->debug_depth, c->get_name (), this, HB_FUNC, \
- " ")
- #else
- #define TRACE_CLOSURE(this) hb_no_trace_t<hb_void_t> trace HB_UNUSED
- #endif
-
- #ifndef HB_DEBUG_COLLECT_GLYPHS
- #define HB_DEBUG_COLLECT_GLYPHS (HB_DEBUG+0)
- #endif
- #if HB_DEBUG_COLLECT_GLYPHS
- #define TRACE_COLLECT_GLYPHS(this) \
- hb_auto_trace_t<HB_DEBUG_COLLECT_GLYPHS, hb_void_t> trace \
- (&c->debug_depth, c->get_name (), this, HB_FUNC, \
- " ")
- #else
- #define TRACE_COLLECT_GLYPHS(this) hb_no_trace_t<hb_void_t> trace HB_UNUSED
- #endif
-
#ifndef HB_DEBUG_SANITIZE
#define HB_DEBUG_SANITIZE (HB_DEBUG+0)
#endif
#if HB_DEBUG_SANITIZE
#define TRACE_SANITIZE(this) \
--- 399,408 ----
*** 421,432 ****
#endif
#ifndef HB_DEBUG_DISPATCH
#define HB_DEBUG_DISPATCH ( \
HB_DEBUG_APPLY + \
- HB_DEBUG_CLOSURE + \
- HB_DEBUG_COLLECT_GLYPHS + \
HB_DEBUG_SANITIZE + \
HB_DEBUG_SERIALIZE + \
HB_DEBUG_SUBSET + \
HB_DEBUG_WOULD_APPLY + \
0)
--- 450,459 ----
< prev index next >