src/debug.h
author peter1138
Tue, 22 Jan 2008 07:27:06 +0000
changeset 8374 7a1b6c89cb89
parent 8247 16e1c8db6f55
child 8409 de295d5e2bb4
permissions -rw-r--r--
(svn r11940) -Codechange: Store short filename once per open file instead of once per sprite cache entry. Not all file types need this, but most of the time no sprite cache entry needed it either.
2186
db48cf29b983 (svn r2701) Insert Id tags into all source files
tron
parents: 2125
diff changeset
     1
/* $Id$ */
db48cf29b983 (svn r2701) Insert Id tags into all source files
tron
parents: 2125
diff changeset
     2
6179
d19b0137d8e4 (svn r8950) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents: 5941
diff changeset
     3
/** @file debug.h */
d19b0137d8e4 (svn r8950) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents: 5941
diff changeset
     4
1299
39c06aba09aa (svn r1803) Move debugging stuff into files of it's own
tron
parents:
diff changeset
     5
#ifndef DEBUG_H
39c06aba09aa (svn r1803) Move debugging stuff into files of it's own
tron
parents:
diff changeset
     6
#define DEBUG_H
39c06aba09aa (svn r1803) Move debugging stuff into files of it's own
tron
parents:
diff changeset
     7
5380
8ea58542b6e0 (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5108
diff changeset
     8
/* Debugging messages policy:
8ea58542b6e0 (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5108
diff changeset
     9
 * These should be the severities used for direct DEBUG() calls
8ea58542b6e0 (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5108
diff changeset
    10
 * maximum debugging level should be 10 if really deep, deep
8ea58542b6e0 (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5108
diff changeset
    11
 * debugging is needed.
8ea58542b6e0 (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5108
diff changeset
    12
 * (there is room for exceptions, but you have to have a good cause):
8ea58542b6e0 (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5108
diff changeset
    13
 * 0   - errors or severe warnings
8ea58542b6e0 (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5108
diff changeset
    14
 * 1   - other non-fatal, non-severe warnings
8ea58542b6e0 (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5108
diff changeset
    15
 * 2   - crude progress indicator of functionality
8ea58542b6e0 (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5108
diff changeset
    16
 * 3   - important debugging messages (function entry)
8ea58542b6e0 (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5108
diff changeset
    17
 * 4   - debugging messages (crude loop status, etc.)
8ea58542b6e0 (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5108
diff changeset
    18
 * 5   - detailed debugging information
8ea58542b6e0 (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5108
diff changeset
    19
 * 6.. - extremely detailed spamming
8ea58542b6e0 (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5108
diff changeset
    20
 */
8ea58542b6e0 (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5108
diff changeset
    21
5406
2df85542fee4 (svn r7602) -Fix (r7565): MSVC2003 and lower don't support variadic macros, so work around
Darkvater
parents: 5390
diff changeset
    22
/* Of course MSVC 2003 and lower has no support for variadic macros
2df85542fee4 (svn r7602) -Fix (r7565): MSVC2003 and lower don't support variadic macros, so work around
Darkvater
parents: 5390
diff changeset
    23
 * so we need to work around this... *sigh* */
2df85542fee4 (svn r7602) -Fix (r7565): MSVC2003 and lower don't support variadic macros, so work around
Darkvater
parents: 5390
diff changeset
    24
#if defined(_MSC_VER) && (_MSC_VER < 1400)
2df85542fee4 (svn r7602) -Fix (r7565): MSVC2003 and lower don't support variadic macros, so work around
Darkvater
parents: 5390
diff changeset
    25
	#define NO_VARARG_MACRO
2df85542fee4 (svn r7602) -Fix (r7565): MSVC2003 and lower don't support variadic macros, so work around
Darkvater
parents: 5390
diff changeset
    26
#endif
2df85542fee4 (svn r7602) -Fix (r7565): MSVC2003 and lower don't support variadic macros, so work around
Darkvater
parents: 5390
diff changeset
    27
2df85542fee4 (svn r7602) -Fix (r7565): MSVC2003 and lower don't support variadic macros, so work around
Darkvater
parents: 5390
diff changeset
    28
#if defined(NO_VARARG_MACRO)
2df85542fee4 (svn r7602) -Fix (r7565): MSVC2003 and lower don't support variadic macros, so work around
Darkvater
parents: 5390
diff changeset
    29
	enum DebugLevelType {
2df85542fee4 (svn r7602) -Fix (r7565): MSVC2003 and lower don't support variadic macros, so work around
Darkvater
parents: 5390
diff changeset
    30
		ai,
2df85542fee4 (svn r7602) -Fix (r7565): MSVC2003 and lower don't support variadic macros, so work around
Darkvater
parents: 5390
diff changeset
    31
		driver,
2df85542fee4 (svn r7602) -Fix (r7565): MSVC2003 and lower don't support variadic macros, so work around
Darkvater
parents: 5390
diff changeset
    32
		grf,
2df85542fee4 (svn r7602) -Fix (r7565): MSVC2003 and lower don't support variadic macros, so work around
Darkvater
parents: 5390
diff changeset
    33
		map,
2df85542fee4 (svn r7602) -Fix (r7565): MSVC2003 and lower don't support variadic macros, so work around
Darkvater
parents: 5390
diff changeset
    34
		misc,
2df85542fee4 (svn r7602) -Fix (r7565): MSVC2003 and lower don't support variadic macros, so work around
Darkvater
parents: 5390
diff changeset
    35
		ms,
2df85542fee4 (svn r7602) -Fix (r7565): MSVC2003 and lower don't support variadic macros, so work around
Darkvater
parents: 5390
diff changeset
    36
		net,
2df85542fee4 (svn r7602) -Fix (r7565): MSVC2003 and lower don't support variadic macros, so work around
Darkvater
parents: 5390
diff changeset
    37
		sprite,
2df85542fee4 (svn r7602) -Fix (r7565): MSVC2003 and lower don't support variadic macros, so work around
Darkvater
parents: 5390
diff changeset
    38
		oldloader,
2df85542fee4 (svn r7602) -Fix (r7565): MSVC2003 and lower don't support variadic macros, so work around
Darkvater
parents: 5390
diff changeset
    39
		ntp,
2df85542fee4 (svn r7602) -Fix (r7565): MSVC2003 and lower don't support variadic macros, so work around
Darkvater
parents: 5390
diff changeset
    40
		npf,
2df85542fee4 (svn r7602) -Fix (r7565): MSVC2003 and lower don't support variadic macros, so work around
Darkvater
parents: 5390
diff changeset
    41
		yapf,
2df85542fee4 (svn r7602) -Fix (r7565): MSVC2003 and lower don't support variadic macros, so work around
Darkvater
parents: 5390
diff changeset
    42
		freetype,
2df85542fee4 (svn r7602) -Fix (r7565): MSVC2003 and lower don't support variadic macros, so work around
Darkvater
parents: 5390
diff changeset
    43
		sl,
5664
846a93238ca1 (svn r8124) -Add [DEBUG]: _debug_station_level
KUDr
parents: 5587
diff changeset
    44
		station,
5406
2df85542fee4 (svn r7602) -Fix (r7565): MSVC2003 and lower don't support variadic macros, so work around
Darkvater
parents: 5390
diff changeset
    45
	};
2df85542fee4 (svn r7602) -Fix (r7565): MSVC2003 and lower don't support variadic macros, so work around
Darkvater
parents: 5390
diff changeset
    46
#endif /* NO_VARARG_MACRO */
2df85542fee4 (svn r7602) -Fix (r7565): MSVC2003 and lower don't support variadic macros, so work around
Darkvater
parents: 5390
diff changeset
    47
1299
39c06aba09aa (svn r1803) Move debugging stuff into files of it's own
tron
parents:
diff changeset
    48
#ifdef NO_DEBUG_MESSAGES
5406
2df85542fee4 (svn r7602) -Fix (r7565): MSVC2003 and lower don't support variadic macros, so work around
Darkvater
parents: 5390
diff changeset
    49
	#if defined(NO_VARARG_MACRO)
2df85542fee4 (svn r7602) -Fix (r7565): MSVC2003 and lower don't support variadic macros, so work around
Darkvater
parents: 5390
diff changeset
    50
		static inline void DEBUG(int name, int level, ...) {}
2df85542fee4 (svn r7602) -Fix (r7565): MSVC2003 and lower don't support variadic macros, so work around
Darkvater
parents: 5390
diff changeset
    51
	#elif defined(__GNUC__) && (__GNUC__ < 3)
2df85542fee4 (svn r7602) -Fix (r7565): MSVC2003 and lower don't support variadic macros, so work around
Darkvater
parents: 5390
diff changeset
    52
		#define DEBUG(name, level, args...)
2df85542fee4 (svn r7602) -Fix (r7565): MSVC2003 and lower don't support variadic macros, so work around
Darkvater
parents: 5390
diff changeset
    53
	#else
2df85542fee4 (svn r7602) -Fix (r7565): MSVC2003 and lower don't support variadic macros, so work around
Darkvater
parents: 5390
diff changeset
    54
		#define DEBUG(name, level, ...)
2df85542fee4 (svn r7602) -Fix (r7565): MSVC2003 and lower don't support variadic macros, so work around
Darkvater
parents: 5390
diff changeset
    55
	#endif
2df85542fee4 (svn r7602) -Fix (r7565): MSVC2003 and lower don't support variadic macros, so work around
Darkvater
parents: 5390
diff changeset
    56
#else /* NO_DEBUG_MESSAGES */
2df85542fee4 (svn r7602) -Fix (r7565): MSVC2003 and lower don't support variadic macros, so work around
Darkvater
parents: 5390
diff changeset
    57
	#if defined(NO_VARARG_MACRO)
2df85542fee4 (svn r7602) -Fix (r7565): MSVC2003 and lower don't support variadic macros, so work around
Darkvater
parents: 5390
diff changeset
    58
		void CDECL DEBUG(int name, int level, ...);
2df85542fee4 (svn r7602) -Fix (r7565): MSVC2003 and lower don't support variadic macros, so work around
Darkvater
parents: 5390
diff changeset
    59
	#elif defined(__GNUC__) && (__GNUC__ < 3)
5390
b51df40d72a1 (svn r7579) -Fix: upon merging the bridge branch, I accidently reverted 7571. Re-revert it. Sorry.
celestar
parents: 5385
diff changeset
    60
		#define DEBUG(name, level, args...) if ((level == 0) || ( _debug_ ## name ## _level >= level)) debug(#name, args)
b51df40d72a1 (svn r7579) -Fix: upon merging the bridge branch, I accidently reverted 7571. Re-revert it. Sorry.
celestar
parents: 5385
diff changeset
    61
	#else
b51df40d72a1 (svn r7579) -Fix: upon merging the bridge branch, I accidently reverted 7571. Re-revert it. Sorry.
celestar
parents: 5385
diff changeset
    62
		#define DEBUG(name, level, ...) if (level == 0 || _debug_ ## name ## _level >= level) debug(#name, __VA_ARGS__)
b51df40d72a1 (svn r7579) -Fix: upon merging the bridge branch, I accidently reverted 7571. Re-revert it. Sorry.
celestar
parents: 5385
diff changeset
    63
	#endif
1299
39c06aba09aa (svn r1803) Move debugging stuff into files of it's own
tron
parents:
diff changeset
    64
39c06aba09aa (svn r1803) Move debugging stuff into files of it's own
tron
parents:
diff changeset
    65
	extern int _debug_ai_level;
2210
b76184e0929c (svn r2728) -Fix/Feature: Change the driver probing algorithm
tron
parents: 2186
diff changeset
    66
	extern int _debug_driver_level;
1299
39c06aba09aa (svn r1803) Move debugging stuff into files of it's own
tron
parents:
diff changeset
    67
	extern int _debug_grf_level;
39c06aba09aa (svn r1803) Move debugging stuff into files of it's own
tron
parents:
diff changeset
    68
	extern int _debug_map_level;
39c06aba09aa (svn r1803) Move debugging stuff into files of it's own
tron
parents:
diff changeset
    69
	extern int _debug_misc_level;
39c06aba09aa (svn r1803) Move debugging stuff into files of it's own
tron
parents:
diff changeset
    70
	extern int _debug_ms_level;
39c06aba09aa (svn r1803) Move debugging stuff into files of it's own
tron
parents:
diff changeset
    71
	extern int _debug_net_level;
5380
8ea58542b6e0 (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5108
diff changeset
    72
	extern int _debug_sprite_level;
1322
a7fef520f54c (svn r1826) -Feature: a brand new OldLoader so OpenTTD is TTD(Patch) compatible
truelight
parents: 1299
diff changeset
    73
	extern int _debug_oldloader_level;
2125
edc17858f9f6 (svn r2635) Fix: [ntp/misc] Improve the old pathfinder. Changed it to A* instead of Dijkstra.
ludde
parents: 2033
diff changeset
    74
	extern int _debug_ntp_level;
1678
187385f01cc9 (svn r2182) - Add: [NPF] There is now a debug class for NPF. Use -d npf<level> to enable debugging printouts from npf.
matthijs
parents: 1322
diff changeset
    75
	extern int _debug_npf_level;
3900
2c84ed52709d (svn r4987) Feature: Merged YAPF into trunk. Thanks to devs for continuous support and users for testing.
KUDr
parents: 3851
diff changeset
    76
	extern int _debug_yapf_level;
5108
aeaef6fe53b7 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 3900
diff changeset
    77
	extern int _debug_freetype_level;
5380
8ea58542b6e0 (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5108
diff changeset
    78
	extern int _debug_sl_level;
5664
846a93238ca1 (svn r8124) -Add [DEBUG]: _debug_station_level
KUDr
parents: 5587
diff changeset
    79
	extern int _debug_station_level;
1299
39c06aba09aa (svn r1803) Move debugging stuff into files of it's own
tron
parents:
diff changeset
    80
5406
2df85542fee4 (svn r7602) -Fix (r7565): MSVC2003 and lower don't support variadic macros, so work around
Darkvater
parents: 5390
diff changeset
    81
	#if !defined(NO_VARARG_MACRO)
2df85542fee4 (svn r7602) -Fix (r7565): MSVC2003 and lower don't support variadic macros, so work around
Darkvater
parents: 5390
diff changeset
    82
		void CDECL debug(const char *dbg, ...);
2df85542fee4 (svn r7602) -Fix (r7565): MSVC2003 and lower don't support variadic macros, so work around
Darkvater
parents: 5390
diff changeset
    83
	#endif /* NO_VARARG_MACRO */
2df85542fee4 (svn r7602) -Fix (r7565): MSVC2003 and lower don't support variadic macros, so work around
Darkvater
parents: 5390
diff changeset
    84
#endif /* NO_DEBUG_MESSAGES */
1299
39c06aba09aa (svn r1803) Move debugging stuff into files of it's own
tron
parents:
diff changeset
    85
39c06aba09aa (svn r1803) Move debugging stuff into files of it's own
tron
parents:
diff changeset
    86
void SetDebugString(const char *s);
6247
7d81e3a5d803 (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 6179
diff changeset
    87
const char *GetDebugString();
1299
39c06aba09aa (svn r1803) Move debugging stuff into files of it's own
tron
parents:
diff changeset
    88
3851
9ad2f4ec0ac3 (svn r4875) - Fix: %ll don't work with mingw (msvrct.dll problem)
glx
parents: 3341
diff changeset
    89
/* MSVCRT of course has to have a different syntax for long long *sigh* */
9ad2f4ec0ac3 (svn r4875) - Fix: %ll don't work with mingw (msvrct.dll problem)
glx
parents: 3341
diff changeset
    90
#if defined(_MSC_VER) || defined(__MINGW32__)
5406
2df85542fee4 (svn r7602) -Fix (r7565): MSVC2003 and lower don't support variadic macros, so work around
Darkvater
parents: 5390
diff changeset
    91
	#define OTTD_PRINTF64 "I64"
3341
b20541ef8945 (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.
Darkvater
parents: 2916
diff changeset
    92
#else
5406
2df85542fee4 (svn r7602) -Fix (r7565): MSVC2003 and lower don't support variadic macros, so work around
Darkvater
parents: 5390
diff changeset
    93
	#define OTTD_PRINTF64 "ll"
3341
b20541ef8945 (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.
Darkvater
parents: 2916
diff changeset
    94
#endif
b20541ef8945 (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.
Darkvater
parents: 2916
diff changeset
    95
6830
37507080af66 (svn r10069) -Documentation: some documentation for TIC/TOC, as it isn't what I expected...
truelight
parents: 6247
diff changeset
    96
/* Used for profiling
37507080af66 (svn r10069) -Documentation: some documentation for TIC/TOC, as it isn't what I expected...
truelight
parents: 6247
diff changeset
    97
 *
37507080af66 (svn r10069) -Documentation: some documentation for TIC/TOC, as it isn't what I expected...
truelight
parents: 6247
diff changeset
    98
 * Usage:
37507080af66 (svn r10069) -Documentation: some documentation for TIC/TOC, as it isn't what I expected...
truelight
parents: 6247
diff changeset
    99
 * TIC();
37507080af66 (svn r10069) -Documentation: some documentation for TIC/TOC, as it isn't what I expected...
truelight
parents: 6247
diff changeset
   100
 *   --Do your code--
37507080af66 (svn r10069) -Documentation: some documentation for TIC/TOC, as it isn't what I expected...
truelight
parents: 6247
diff changeset
   101
 * TOC("A name", 1);
37507080af66 (svn r10069) -Documentation: some documentation for TIC/TOC, as it isn't what I expected...
truelight
parents: 6247
diff changeset
   102
 *
37507080af66 (svn r10069) -Documentation: some documentation for TIC/TOC, as it isn't what I expected...
truelight
parents: 6247
diff changeset
   103
 * When you run the TIC() / TOC() multiple times, you can increase the '1'
37507080af66 (svn r10069) -Documentation: some documentation for TIC/TOC, as it isn't what I expected...
truelight
parents: 6247
diff changeset
   104
 *  to only display average stats every N values. Some things to know:
37507080af66 (svn r10069) -Documentation: some documentation for TIC/TOC, as it isn't what I expected...
truelight
parents: 6247
diff changeset
   105
 *
37507080af66 (svn r10069) -Documentation: some documentation for TIC/TOC, as it isn't what I expected...
truelight
parents: 6247
diff changeset
   106
 * for (int i = 0; i < 5; i++) {
37507080af66 (svn r10069) -Documentation: some documentation for TIC/TOC, as it isn't what I expected...
truelight
parents: 6247
diff changeset
   107
 *   TIC();
37507080af66 (svn r10069) -Documentation: some documentation for TIC/TOC, as it isn't what I expected...
truelight
parents: 6247
diff changeset
   108
 *     --Do yuor code--
37507080af66 (svn r10069) -Documentation: some documentation for TIC/TOC, as it isn't what I expected...
truelight
parents: 6247
diff changeset
   109
 *   TOC("A name", 5);
37507080af66 (svn r10069) -Documentation: some documentation for TIC/TOC, as it isn't what I expected...
truelight
parents: 6247
diff changeset
   110
 * }
37507080af66 (svn r10069) -Documentation: some documentation for TIC/TOC, as it isn't what I expected...
truelight
parents: 6247
diff changeset
   111
 *
37507080af66 (svn r10069) -Documentation: some documentation for TIC/TOC, as it isn't what I expected...
truelight
parents: 6247
diff changeset
   112
 * Is the correct usage for multiple TIC() / TOC() calls.
37507080af66 (svn r10069) -Documentation: some documentation for TIC/TOC, as it isn't what I expected...
truelight
parents: 6247
diff changeset
   113
 *
37507080af66 (svn r10069) -Documentation: some documentation for TIC/TOC, as it isn't what I expected...
truelight
parents: 6247
diff changeset
   114
 * TIC() / TOC() creates it's own block, so make sure not the mangle
37507080af66 (svn r10069) -Documentation: some documentation for TIC/TOC, as it isn't what I expected...
truelight
parents: 6247
diff changeset
   115
 *  it with an other block.
37507080af66 (svn r10069) -Documentation: some documentation for TIC/TOC, as it isn't what I expected...
truelight
parents: 6247
diff changeset
   116
 **/
3341
b20541ef8945 (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.
Darkvater
parents: 2916
diff changeset
   117
#define TIC() {\
6247
7d81e3a5d803 (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 6179
diff changeset
   118
	extern uint64 _rdtsc();\
3341
b20541ef8945 (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.
Darkvater
parents: 2916
diff changeset
   119
	uint64 _xxx_ = _rdtsc();\
b20541ef8945 (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.
Darkvater
parents: 2916
diff changeset
   120
	static uint64 __sum__ = 0;\
b20541ef8945 (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.
Darkvater
parents: 2916
diff changeset
   121
	static uint32 __i__ = 0;
b20541ef8945 (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.
Darkvater
parents: 2916
diff changeset
   122
b20541ef8945 (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.
Darkvater
parents: 2916
diff changeset
   123
#define TOC(str, count)\
b20541ef8945 (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.
Darkvater
parents: 2916
diff changeset
   124
	__sum__ += _rdtsc() - _xxx_;\
b20541ef8945 (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.
Darkvater
parents: 2916
diff changeset
   125
	if (++__i__ == count) {\
5380
8ea58542b6e0 (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5108
diff changeset
   126
		DEBUG(misc, 0, "[%s] %" OTTD_PRINTF64 "u [avg: %.1f]\n", str, __sum__, __sum__/(double)__i__);\
3341
b20541ef8945 (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.
Darkvater
parents: 2916
diff changeset
   127
		__i__ = 0;\
b20541ef8945 (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.
Darkvater
parents: 2916
diff changeset
   128
		__sum__ = 0;\
b20541ef8945 (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.
Darkvater
parents: 2916
diff changeset
   129
	}\
b20541ef8945 (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.
Darkvater
parents: 2916
diff changeset
   130
}
b20541ef8945 (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.
Darkvater
parents: 2916
diff changeset
   131
8131
160939e24ed3 (svn r11692) -Codechange: move some functions from 'functions.h' to a more logical place and remove about 50% of the includes of 'functions.h'
rubidium
parents: 6830
diff changeset
   132
void ShowInfo(const char *str);
160939e24ed3 (svn r11692) -Codechange: move some functions from 'functions.h' to a more logical place and remove about 50% of the includes of 'functions.h'
rubidium
parents: 6830
diff changeset
   133
void CDECL ShowInfoF(const char *str, ...);
160939e24ed3 (svn r11692) -Codechange: move some functions from 'functions.h' to a more logical place and remove about 50% of the includes of 'functions.h'
rubidium
parents: 6830
diff changeset
   134
8247
16e1c8db6f55 (svn r11811) -Fix: make compilation without networking work again (and thus move the debugdumpcommand stuff out of the network 'area').
rubidium
parents: 8131
diff changeset
   135
#ifdef DEBUG_DUMP_COMMANDS
16e1c8db6f55 (svn r11811) -Fix: make compilation without networking work again (and thus move the debugdumpcommand stuff out of the network 'area').
rubidium
parents: 8131
diff changeset
   136
	void CDECL DebugDumpCommands(const char *s, ...);
16e1c8db6f55 (svn r11811) -Fix: make compilation without networking work again (and thus move the debugdumpcommand stuff out of the network 'area').
rubidium
parents: 8131
diff changeset
   137
#else /* DEBUG_DUMP_COMMANDS */
16e1c8db6f55 (svn r11811) -Fix: make compilation without networking work again (and thus move the debugdumpcommand stuff out of the network 'area').
rubidium
parents: 8131
diff changeset
   138
	static inline void DebugDumpCommands(const char *s, ...) {}
16e1c8db6f55 (svn r11811) -Fix: make compilation without networking work again (and thus move the debugdumpcommand stuff out of the network 'area').
rubidium
parents: 8131
diff changeset
   139
#endif /* DEBUG_DUMP_COMMANDS */
16e1c8db6f55 (svn r11811) -Fix: make compilation without networking work again (and thus move the debugdumpcommand stuff out of the network 'area').
rubidium
parents: 8131
diff changeset
   140
2436
7d5df545bd5d (svn r2962) - const correctness for all Get* functions and most Draw* functions that don't change their pointer parameters
Darkvater
parents: 2210
diff changeset
   141
#endif /* DEBUG_H */