xref: /haiku/headers/private/graphics/common/debug_ext.h (revision e81a954787e50e56a7f06f72705b7859b6ab06d1)
1 /*
2 	Copyright (c) 2002, Thomas Kurschel
3 
4 
5 	Part of Radeon driver
6 
7 	Extended debugging functions
8 */
9 
10 
11 #ifndef __DEBUG_EXT_H__
12 #define __DEBUG_EXT_H__
13 
14 // this is a dprintf wrapper
15 //
16 // there are three kinds of messages:
17 //  flow: used to trace execution
18 //  info: tells things that are important but not an error
19 //  error: used if something has gone wrong
20 //
21 // common usage is
22 //  SHOW_{FLOW,INFO,ERROR}( seriousness, format string, parameters... );
23 //  SHOW_{FLOW,INFO,ERROR}0( seriousness, string );
24 //
25 // with
26 //  seriousness: the smaller the more serious (0..3)
27 //  format string, parameters: normal printf stuff
28 //
29 // to specify the module that created the message you have
30 // to define a string called
31 //  DEBUG_MSG_PREFIX
32 // you dynamically speficify the maximum seriousness level by defining
33 // the following variables/macros
34 //  debug_level_flow
35 //  debug_level_info
36 //  debug_level_error
37 //
38 // you _can_ statically specify the maximum seriuosness level by defining
39 //  DEBUG_MAX_LEVEL_FLOW
40 //  DEBUG_MAX_LEVEL_INFO
41 //  DEBUG_MAX_LEVEL_ERRROR
42 //
43 // you _can_ ask to delay execution after each printed message
44 // by defining the duration (in ms) via
45 //  DEBUG_WAIT_ON_MSG (for flow and info)
46 //  DEBUG_WAIT_ON_ERROR (for error)
47 
48 #ifdef DEBUG_WAIT_ON_MSG
49 #define DEBUG_WAIT snooze( DEBUG_WAIT_ON_MSG );
50 #else
51 #define DEBUG_WAIT
52 #endif
53 
54 #ifdef DEBUG_WAIT_ON_ERROR
55 #define DEBUG_WAIT_ERROR snooze( DEBUG_WAIT_ON_ERROR );
56 #else
57 #define DEBUG_WAIT_ERROR
58 #endif
59 
60 #ifndef DEBUG_MAX_LEVEL_FLOW
61 #define DEBUG_MAX_LEVEL_FLOW 4
62 #endif
63 
64 #ifndef DEBUG_MAX_LEVEL_INFO
65 #define DEBUG_MAX_LEVEL_INFO 4
66 #endif
67 
68 #ifndef DEBUG_MAX_LEVEL_ERROR
69 #define DEBUG_MAX_LEVEL_ERROR 4
70 #endif
71 
72 #ifndef DEBUG_MSG_PREFIX
73 #error you need to define DEBUG_MSG_PREFIX with the module name
74 #endif
75 
76 #define FUNC_NAME DEBUG_MSG_PREFIX, __FUNCTION__
77 
78 #define SHOW_FLOW(seriousness, format, param...) \
79 	do { if( seriousness <= debug_level_flow && seriousness <= DEBUG_MAX_LEVEL_FLOW ) { \
80 		dprintf( "%s%s: " format "\n", FUNC_NAME, param ); DEBUG_WAIT \
81 	}} while( 0 )
82 
83 #define SHOW_FLOW0(seriousness, format) \
84 	do { if( seriousness <= debug_level_flow && seriousness <= DEBUG_MAX_LEVEL_FLOW ) { \
85 		dprintf( "%s%s: " format "\n", FUNC_NAME); DEBUG_WAIT \
86 	}} while( 0 )
87 
88 #define SHOW_INFO(seriousness, format, param...) \
89 	do { if( seriousness <= debug_level_info && seriousness <= DEBUG_MAX_LEVEL_INFO ) { \
90 		dprintf( "%s%s: " format "\n", FUNC_NAME, param ); DEBUG_WAIT \
91 	}} while( 0 )
92 
93 #define SHOW_INFO0(seriousness, format) \
94 	do { if( seriousness <= debug_level_info && seriousness <= DEBUG_MAX_LEVEL_INFO ) { \
95 		dprintf( "%s%s: " format "\n", FUNC_NAME); DEBUG_WAIT \
96 	}} while( 0 )
97 
98 #define SHOW_ERROR(seriousness, format, param...) \
99 	do { if( seriousness <= debug_level_error && seriousness <= DEBUG_MAX_LEVEL_ERROR ) { \
100 		dprintf( "%s%s: " format "\n", FUNC_NAME, param ); DEBUG_WAIT_ERROR \
101 	}} while( 0 )
102 
103 #define SHOW_ERROR0(seriousness, format) \
104 	do { if( seriousness <= debug_level_error && seriousness <= DEBUG_MAX_LEVEL_ERROR ) { \
105 		dprintf( "%s%s: " format "\n", FUNC_NAME); DEBUG_WAIT_ERROR \
106 	}} while( 0 )
107 
108 #endif
109