/* (c) 2010 Perttu Ahola */ /* Debug stuff */ #ifndef DEBUG_HEADER #define DEBUG_HEADER #include #include #include #include #include "common_irrlicht.h" /* Compatibility stuff */ #if (defined(WIN32) || defined(_WIN32_WCE)) typedef DWORD threadid_t; #define __NORETURN __declspec(noreturn) #define __FUNCTION_NAME __FUNCTION__ #else typedef pthread_t threadid_t; #define __NORETURN __attribute__ ((__noreturn__)) #define __FUNCTION_NAME __PRETTY_FUNCTION__ #endif inline threadid_t get_current_thread_id() { #if (defined(WIN32) || defined(_WIN32_WCE)) return GetCurrentThreadId(); #else return pthread_self(); #endif } /* Debug output */ #define DEBUGSTREAM_COUNT 2 extern FILE *g_debugstreams[DEBUGSTREAM_COUNT]; extern void debugstreams_init(bool disable_stderr, const char *filename); extern void debugstreams_deinit(); #define DEBUGPRINT(...)\ {\ for(int i=0; i g_debug_stacks; extern JMutex g_debug_stacks_mutex; extern void debug_stacks_init(); extern void debug_stacks_print(); class DebugStacker { public: DebugStacker(const char *text); ~DebugStacker(); private: DebugStack *m_stack; bool m_overflowed; }; #define DSTACK(...)\ char __buf[DEBUG_STACK_TEXT_SIZE];\ snprintf(__buf,\ DEBUG_STACK_TEXT_SIZE, __VA_ARGS__);\ DebugStacker __debug_stacker(__buf); /* Packet counter */ class PacketCounter { public: PacketCounter() { } void add(u16 command) { core::map::Node *n = m_packets.find(command); if(n == NULL) { m_packets[command] = 1; } else { n->setValue(n->getValue()+1); } } void clear() { for(core::map::Iterator i = m_packets.getIterator(); i.atEnd() == false; i++) { i.getNode()->setValue(0); } } void print(std::ostream &o) { for(core::map::Iterator i = m_packets.getIterator(); i.atEnd() == false; i++) { o<<"cmd "<getKey() <<" count "<getValue() < m_packets; }; #endif // DEBUG_HEADER