1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
|
/*
* logdefs.h: Logging and debug output
*
* See the main source file 'xineliboutput.c' for copyright information and
* how to reach the author.
*
* $Id: logdefs.h,v 1.4 2006-10-23 19:22:14 phintuka Exp $
*
*/
#ifndef _LOGDEFS_H_
#ifndef LOG_MODULENAME
# define LOG_MODULENAME "[xine..put] "
#endif
#define TRACELINE LOGDBG("at %s:%d %s", __FILE__, __LINE__, __FUNCTION__)
#if defined(XINELIBOUTPUT_DEBUG_STDOUT)
# /* logging --> stdout */
# include <stdio.h>
# define x_syslog(l,x...) do { printf(LOG_MODULENAME x); \
printf("\n"); \
} while(0)
#elif defined(XINELIBOUTPUT_DEBUG_STDERR)
# /* logging --> stderr */
# include <stdio.h>
# define x_syslog(l,x...) do { fprintf(stderr, LOG_MODULENAME x); \
fprintf(stderr,"\n"); \
} while(0)
#else
# /* logging --> syslog */
# include <syslog.h>
# if defined(VDRVERSNUM) && VDRVERSNUM >= 10343
# define x_syslog(l,x...) syslog_with_tid(l, LOG_MODULENAME x)
# else
# define x_syslog(l,x...) syslog(l, LOG_MODULENAME x)
# endif
#endif
#include <errno.h>
#define LOG_ERRNO x_syslog(LOG_ERR, "ERROR (%s,%d): %s", \
__FILE__, __LINE__, strerror(errno))
#define LOGERR(x...) do { \
if(SysLogLevel > 0) { \
x_syslog(LOG_ERR, x); \
if(errno) \
LOG_ERRNO; \
} \
} while(0)
#define LOGMSG(x...) do{ if(SysLogLevel > 1) x_syslog(LOG_INFO, x); } while(0)
#define LOGDBG(x...) do{ if(SysLogLevel > 2) x_syslog(LOG_DEBUG, x); } while(0)
#ifdef NDEBUG
# define ASSERT(expr)
#else
# define ASSERT(expr,fatal) \
do { \
if(!(expr)) { \
LOGERR("Asseretion failed: %s at %s:%d (%s)", \
#expr, __FILE__, __LINE__, __FUNCTION__); \
if(fatal) \
abort(); \
} \
} while(0)
#endif
#ifdef XINELIBOUTPUT_DEBUG
# ifdef __cplusplus
#
# include <fstream>
# include <iostream>
# include <stdio.h>
#
# ifndef TRACE_IDENT
# define TRACE_IDENT ""
# endif
# if defined(XINELIBOUTPUT_DEBUG_STDOUT)
# define TRACE(x) do {std::cout << TRACE_IDENT << x << "\n"; fflush(stdout);}while(0)
# elif defined(XINELIBOUTPUT_DEBUG_STDERR)
# define TRACE(x) do {std::cerr << TRACE_IDENT << x << "\n"; fflush(stderr);}while(0)
# else
# error No trace target !
# endif
# define TRACEF(x) cTraceFunctionCall _x_cTraceFunctionCall(x);
class cTraceFunctionCall {
public:
const char *m_name;
cTraceFunctionCall(const char *name) : m_name(name)
{ TRACE(m_name << " - Enter"); }
~cTraceFunctionCall()
{ TRACE(m_name << " - Leave "); }
};
# endif
#else
# define TRACE(x)
# define TRACEF(x)
#endif
#ifdef __cplusplus
# ifdef TRACK_EXEC_TIME
class cTimeTracker
{
private:
const char *m_Message;
const char *m_Where;
uint64_t m_Start;
uint64_t m_Trigger;
public:
cTimeTracker(const char *Message, int TriggerMs, const char *Where) {
m_Message = Message;
m_Where = Where;
m_Trigger = TriggerMs;
m_Start = cTimeMs::Now();
}
~cTimeTracker() {
if(cTimeMs::Now() - m_Start > m_Trigger)
LOGMSG("********** TimeTracker hit in %s: %d ms %s",
m_Where, (int)(cTimeMs::Now() - m_Start),
m_Message?m_Message:"");
}
};
# define TRACK_TIME(limit) cTimeTracker _timetracker(NULL,limit,__PRETTY_FUNCTION__)
# define TRACK_TIME_EXT(limit,msg) cTrimeTracker __timetracker(msg,limit,__PRETTY_FUNCTION__)
# else
# define TRACK_TIME(limit)
# define TRACK_TIME_EXT(limit,msg)
# endif
# endif
#endif /* _LOGDEFS_H_ */
|