X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fpbd%2Fpbd%2Fdebug.h;h=8db198e82ec4d450d26033e7eff5decd43e671ec;hb=ae4e84fd51daa868f6f5f457935c2c186a2bb659;hp=704c9d0dadd2c680f26a30faa7f13110b0b5e0c9;hpb=fb313fb1741a04f270fff3703967df572ac4fc45;p=ardour.git diff --git a/libs/pbd/pbd/debug.h b/libs/pbd/pbd/debug.h index 704c9d0dad..8db198e82e 100644 --- a/libs/pbd/pbd/debug.h +++ b/libs/pbd/pbd/debug.h @@ -20,45 +20,80 @@ #ifndef __libpbd_debug_h__ #define __libpbd_debug_h__ +#include #include #include +#include "pbd/libpbd_visibility.h" +#include "pbd/timing.h" + +#if defined(COMPILER_MSVC) && !defined(PTW32_VERSION) +#include // Gets us 'PTW32_VERSION' +#endif + namespace PBD { - extern uint64_t debug_bits; - uint64_t new_debug_bit (const char* name); - void debug_print (const char* prefix, std::string str); - void set_debug_bits (uint64_t bits); - int parse_debug_options (const char* str); - void list_debug_options (); + typedef std::bitset<128> DebugBits; + + LIBPBD_API extern DebugBits debug_bits; + LIBPBD_API DebugBits new_debug_bit (const char* name); + LIBPBD_API void debug_print (const char* prefix, std::string str); + LIBPBD_API void set_debug_bits (DebugBits bits); + LIBPBD_API int parse_debug_options (const char* str); + LIBPBD_API void list_debug_options (); namespace DEBUG { /* this namespace is so that we can write DEBUG::bit_name */ - - extern uint64_t Stateful; - extern uint64_t Properties; - extern uint64_t FileManager; - extern uint64_t Pool; - extern uint64_t EventLoop; - extern uint64_t AbstractUI; - extern uint64_t FileUtils; + + LIBPBD_API extern DebugBits Stateful; + LIBPBD_API extern DebugBits Properties; + LIBPBD_API extern DebugBits FileManager; + LIBPBD_API extern DebugBits Pool; + LIBPBD_API extern DebugBits EventLoop; + LIBPBD_API extern DebugBits AbstractUI; + LIBPBD_API extern DebugBits Configuration; + LIBPBD_API extern DebugBits FileUtils; + LIBPBD_API extern DebugBits UndoHistory; + LIBPBD_API extern DebugBits Timing; + LIBPBD_API extern DebugBits Threads; + LIBPBD_API extern DebugBits Locale; + + /* See notes in ../debug.cc on why these are defined here */ + + LIBPBD_API extern DebugBits WavesMIDI; + LIBPBD_API extern DebugBits WavesAudio; } } #ifndef NDEBUG -#define DEBUG_TRACE(bits,str) if ((bits) & PBD::debug_bits) { PBD::debug_print (# bits, str); } +#define DEBUG_TRACE(bits,str) if (((bits) & PBD::debug_bits).any()) { PBD::debug_print (# bits, str); } #define DEBUG_STR_DECL(id) std::stringstream __debug_str ## id; #define DEBUG_STR(id) __debug_str ## id #define DEBUG_STR_APPEND(id,s) __debug_str ## id << s; -#define DEBUG_ENABLED(bits) ((bits) & PBD::debug_bits) +#define DEBUG_ENABLED(bits) (((bits) & PBD::debug_bits).any()) +#ifdef PTW32_VERSION +#define DEBUG_THREAD_SELF pthread_self().p +#else +#define DEBUG_THREAD_SELF pthread_self() +#endif + +#define DEBUG_TIMING_START(bits,td) if (DEBUG_ENABLED (bits)) { td.start_timing (); } +#define DEBUG_TIMING_ADD_ELAPSED(bits,td) if (DEBUG_ENABLED (bits)) { td.add_elapsed (); } +#define DEBUG_TIMING_RESET(bits,td) if (DEBUG_ENABLED (bits)) { td.reset (); } + #else #define DEBUG_TRACE(bits,fmt,...) /*empty*/ #define DEBUG_STR(a) /* empty */ #define DEBUG_STR_APPEND(a,b) /* empty */ #define DEBUG_ENABLED(b) (0) -#endif +#define DEBUG_THREAD_SELF 0 + +#define DEBUG_TIMING_START(bits,td) /*empty*/ +#define DEBUG_TIMING_ADD_ELAPSED(bits,td) /*empty*/ +#define DEBUG_TIMING_RESET(bits,td) /*empty*/ +#endif #endif /* __libpbd_debug_h__ */