summaryrefslogtreecommitdiff
path: root/src/debug.h
diff options
context:
space:
mode:
authorrubidium <rubidium@openttd.org>2007-01-02 19:19:48 +0000
committerrubidium <rubidium@openttd.org>2007-01-02 19:19:48 +0000
commit66bbf336c6af7353ef0aeed58002c46543b30635 (patch)
treead4a63860df2626b22f77e7dac712e958bea54cb /src/debug.h
parentccc0a3f4dbf58c005b22341ac8874252924690cd (diff)
downloadopenttd-66bbf336c6af7353ef0aeed58002c46543b30635.tar.xz
(svn r7759) -Merge: makefile rewrite. This merge features:
- A proper ./configure, so everything needs to be configured only once, not for every make. - Usage of makedepend when available. This greatly reduces the time needed for generating the dependencies. - A generator for all project files. There is a single file with sources, which is used to generate Makefiles and the project files for MSVC. - Proper support for OSX universal binaries. - Object files for non-MSVC compiles are also placed in separate directories, making is faster to switch between debug and release compiles and it does not touch the directory with the source files. - Functionality to make a bundle of all needed files for for example a nightly or distribution of a binary with all needed GRFs and language files. Note: as this merge moves almost all files, it is recommended to make a backup of your working copy before updating your working copy.
Diffstat (limited to 'src/debug.h')
-rw-r--r--src/debug.h108
1 files changed, 108 insertions, 0 deletions
diff --git a/src/debug.h b/src/debug.h
new file mode 100644
index 000000000..c99795ddd
--- /dev/null
+++ b/src/debug.h
@@ -0,0 +1,108 @@
+/* $Id$ */
+
+#ifndef DEBUG_H
+#define DEBUG_H
+
+/* Debugging messages policy:
+ * These should be the severities used for direct DEBUG() calls
+ * maximum debugging level should be 10 if really deep, deep
+ * debugging is needed.
+ * (there is room for exceptions, but you have to have a good cause):
+ * 0 - errors or severe warnings
+ * 1 - other non-fatal, non-severe warnings
+ * 2 - crude progress indicator of functionality
+ * 3 - important debugging messages (function entry)
+ * 4 - debugging messages (crude loop status, etc.)
+ * 5 - detailed debugging information
+ * 6.. - extremely detailed spamming
+ */
+
+/* Of course MSVC 2003 and lower has no support for variadic macros
+ * so we need to work around this... *sigh* */
+#if defined(_MSC_VER) && (_MSC_VER < 1400)
+ #define NO_VARARG_MACRO
+#endif
+
+#if defined(NO_VARARG_MACRO)
+ enum DebugLevelType {
+ ai,
+ driver,
+ grf,
+ map,
+ misc,
+ ms,
+ net,
+ sprite,
+ oldloader,
+ ntp,
+ npf,
+ yapf,
+ freetype,
+ sl,
+ };
+#endif /* NO_VARARG_MACRO */
+
+#ifdef NO_DEBUG_MESSAGES
+ #if defined(NO_VARARG_MACRO)
+ static inline void DEBUG(int name, int level, ...) {}
+ #elif defined(__GNUC__) && (__GNUC__ < 3)
+ #define DEBUG(name, level, args...)
+ #else
+ #define DEBUG(name, level, ...)
+ #endif
+#else /* NO_DEBUG_MESSAGES */
+ #if defined(NO_VARARG_MACRO)
+ void CDECL DEBUG(int name, int level, ...);
+ #elif defined(__GNUC__) && (__GNUC__ < 3)
+ #define DEBUG(name, level, args...) if ((level == 0) || ( _debug_ ## name ## _level >= level)) debug(#name, args)
+ #else
+ #define DEBUG(name, level, ...) if (level == 0 || _debug_ ## name ## _level >= level) debug(#name, __VA_ARGS__)
+ #endif
+
+ extern int _debug_ai_level;
+ extern int _debug_driver_level;
+ extern int _debug_grf_level;
+ extern int _debug_map_level;
+ extern int _debug_misc_level;
+ extern int _debug_ms_level;
+ extern int _debug_net_level;
+ extern int _debug_sprite_level;
+ extern int _debug_oldloader_level;
+ extern int _debug_ntp_level;
+ extern int _debug_npf_level;
+ extern int _debug_yapf_level;
+ extern int _debug_freetype_level;
+ extern int _debug_sl_level;
+
+ #if !defined(NO_VARARG_MACRO)
+ void CDECL debug(const char *dbg, ...);
+ #endif /* NO_VARARG_MACRO */
+#endif /* NO_DEBUG_MESSAGES */
+
+void SetDebugString(const char *s);
+const char *GetDebugString(void);
+
+/* MSVCRT of course has to have a different syntax for long long *sigh* */
+#if defined(_MSC_VER) || defined(__MINGW32__)
+ #define OTTD_PRINTF64 "I64"
+#else
+ #define OTTD_PRINTF64 "ll"
+#endif
+
+// Used for profiling
+#define TIC() {\
+ extern uint64 _rdtsc(void);\
+ uint64 _xxx_ = _rdtsc();\
+ static uint64 __sum__ = 0;\
+ static uint32 __i__ = 0;
+
+#define TOC(str, count)\
+ __sum__ += _rdtsc() - _xxx_;\
+ if (++__i__ == count) {\
+ DEBUG(misc, 0, "[%s] %" OTTD_PRINTF64 "u [avg: %.1f]\n", str, __sum__, __sum__/(double)__i__);\
+ __i__ = 0;\
+ __sum__ = 0;\
+ }\
+}
+
+#endif /* DEBUG_H */