summaryrefslogtreecommitdiff
path: root/debug.h
diff options
context:
space:
mode:
authorDarkvater <darkvater@openttd.org>2006-03-26 21:15:09 +0000
committerDarkvater <darkvater@openttd.org>2006-03-26 21:15:09 +0000
commita91c52e16909976b40951cf2893f2349e9ebf25d (patch)
tree07ce18ba583aad9caf062c352c2632ba1ea394c6 /debug.h
parent4125aa21f8dfc72a60bf70b890b95c2187425112 (diff)
downloadopenttd-a91c52e16909976b40951cf2893f2349e9ebf25d.tar.xz
(svn r4125) - Feature: Add a general TIC() TOC() mechanism using rdtsc or something similar on non-i386 architectures to performance-tune (critical) code. Some systems are probably missing, but those can be added later.
Diffstat (limited to 'debug.h')
-rw-r--r--debug.h23
1 files changed, 23 insertions, 0 deletions
diff --git a/debug.h b/debug.h
index 71d0dcbd1..9721fb882 100644
--- a/debug.h
+++ b/debug.h
@@ -26,4 +26,27 @@ void CDECL debug(const char *s, ...);
void SetDebugString(const char *s);
const char *GetDebugString(void);
+/* MSVC of course has to have a different syntax for long long *sigh* */
+#ifdef _MSC_VER
+# 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) {\
+ printf("[%s]: %" OTTD_PRINTF64 "u [avg: %.1f]\n", str, __sum__, __sum__/(double)__i__);\
+ __i__ = 0;\
+ __sum__ = 0;\
+ }\
+}
+
#endif /* DEBUG_H */