AJA NTV2 SDK  18.0.0.2717
NTV2 SDK 18.0.0.2717
dxmperf.h
Go to the documentation of this file.
1 //------------------------------------------------------------------------------
2 // File: DXMPerf.h
3 //
4 // Desc: Macros for DirectShow performance logging.
5 //
6 // Copyright (c) 1992-2001 Microsoft Corporation. All rights reserved.
7 //------------------------------------------------------------------------------
8 
9 
10 #ifndef _DXMPERF_H_
11 #define _DXMPERF_H_
12 
13 #include "perfstruct.h"
14 #include "perflog.h"
15 
16 #ifdef _IA64_
17 extern "C" unsigned __int64 __getReg( int whichReg );
18 #pragma intrinsic(__getReg)
19 #endif // _IA64_
20 
21 
22 inline ULONGLONG _RDTSC( void ) {
23 #ifdef _X86_
24  LARGE_INTEGER li;
25  __asm {
26  _emit 0x0F
27  _emit 0x31
28  mov li.LowPart,eax
29  mov li.HighPart,edx
30  }
31  return li.QuadPart;
32 
33 #if 0 // This isn't tested yet
34 
35 #elif defined (_IA64_)
36 
37 #define INL_REGID_APITC 3116
38  return __getReg( INL_REGID_APITC );
39 
40 #endif // 0
41 
42 #else // unsupported platform
43  // not implemented on non x86/IA64 platforms
44  return 0;
45 #endif // _X86_/_IA64_
46 }
47 
48 #define DXMPERF_VIDEOREND 0x00000001
49 #define DXMPERF_AUDIOGLITCH 0x00000002
50 //#define GETTIME_BIT 0x00000001
51 //#define AUDIOREND_BIT 0x00000004
52 //#define FRAMEDROP_BIT 0x00000008
53 #define AUDIOBREAK_BIT 0x00000010
54 #define DXMPERF_AUDIORECV 0x00000020
55 #define DXMPERF_AUDIOSLAVE 0x00000040
56 #define DXMPERF_AUDIOBREAK 0x00000080
57 
58 #define PERFLOG_CTOR( name, iface )
59 #define PERFLOG_DTOR( name, iface )
60 #define PERFLOG_DELIVER( name, source, dest, sample, pmt )
61 #define PERFLOG_RECEIVE( name, source, dest, sample, pmt )
62 #define PERFLOG_RUN( name, iface, time, oldstate )
63 #define PERFLOG_PAUSE( name, iface, oldstate )
64 #define PERFLOG_STOP( name, iface, oldstate )
65 #define PERFLOG_JOINGRAPH( name, iface, graph )
66 #define PERFLOG_GETBUFFER( allocator, sample )
67 #define PERFLOG_RELBUFFER( allocator, sample )
68 #define PERFLOG_CONNECT( connector, connectee, status, pmt )
69 #define PERFLOG_RXCONNECT( connector, connectee, status, pmt )
70 #define PERFLOG_DISCONNECT( disconnector, disconnectee, status )
71 
72 #define PERFLOG_GETTIME( clock, time ) /*{ \
73  PERFINFO_WMI_GETTIME perfData; \
74  if (NULL != g_pTraceEvent) { \
75  memset( &perfData, 0, sizeof( perfData ) ); \
76  perfData.header.Size = sizeof( perfData ); \
77  perfData.header.Flags = WNODE_FLAG_TRACED_GUID; \
78  perfData.header.Guid = GUID_GETTIME; \
79  perfData.data.cycleCounter = _RDTSC(); \
80  perfData.data.dshowClock = (ULONGLONG) (time); \
81  if (g_perfMasks[GETTIME_INDEX] & GETTIME_BIT) \
82  (*g_pTraceEvent)( g_traceHandle, (PEVENT_TRACE_HEADER) &perfData ); \
83  } \
84  }*/
85 
86 #define PERFLOG_AUDIOREND( clocktime, sampletime, psample, bytetime, cbytes ) /*{ \
87  PERFINFO_WMI_AVREND perfData; \
88  if (NULL != g_pTraceEvent) { \
89  memset( &perfData, 0, sizeof( perfData ) ); \
90  perfData.header.Size = sizeof( perfData ); \
91  perfData.header.Flags = WNODE_FLAG_TRACED_GUID; \
92  perfData.header.Guid = GUID_AUDIOREND; \
93  perfData.data.cycleCounter = _RDTSC(); \
94  perfData.data.dshowClock = (clocktime); \
95  perfData.data.sampleTime = (sampletime); \
96  if (g_perfMasks[AUDIOREND_INDEX] & AUDIOREND_BIT) \
97  (*g_pTraceEvent)( g_traceHandle, (PEVENT_TRACE_HEADER) &perfData ); \
98  } \
99  }*/
100 
101 #define PERFLOG_AUDIORECV(StreamTime,SampleStart,SampleStop,Discontinuity,Duration) \
102  if (PerflogEnableFlags & DXMPERF_AUDIORECV) { \
103  PERFINFO_WMI_AUDIORECV perfData; \
104  memset( &perfData, 0, sizeof( perfData ) ); \
105  perfData.header.Size = sizeof( perfData ); \
106  perfData.header.Flags = WNODE_FLAG_TRACED_GUID; \
107  perfData.header.Guid = GUID_AUDIORECV; \
108  perfData.data.streamTime = StreamTime; \
109  perfData.data.sampleStart = SampleStart; \
110  perfData.data.sampleStop = SampleStop; \
111  perfData.data.discontinuity = Discontinuity; \
112  perfData.data.hwduration = Duration; \
113  PerflogTraceEvent((PEVENT_TRACE_HEADER) &perfData); \
114  }
115 
116 #define PERFLOG_AUDIOSLAVE(MasterClock,SlaveClock,ErrorAccum,LastHighErrorSeen,LastLowErrorSeen) \
117  if (PerflogEnableFlags & DXMPERF_AUDIOSLAVE) { \
118  PERFINFO_WMI_AUDIOSLAVE perfData; \
119  memset( &perfData, 0, sizeof( perfData ) ); \
120  perfData.header.Size = sizeof( perfData ); \
121  perfData.header.Flags = WNODE_FLAG_TRACED_GUID; \
122  perfData.header.Guid = GUID_AUDIOSLAVE; \
123  perfData.data.masterClock = MasterClock; \
124  perfData.data.slaveClock = SlaveClock; \
125  perfData.data.errorAccum = ErrorAccum; \
126  perfData.data.lastHighErrorSeen = LastHighErrorSeen;\
127  perfData.data.lastLowErrorSeen = LastLowErrorSeen; \
128  PerflogTraceEvent((PEVENT_TRACE_HEADER) &perfData); \
129  }
130 
131 #define PERFLOG_AUDIOADDBREAK(IterNextWrite,OffsetNextWrite,IterWrite,OffsetWrite) \
132  if (PerflogEnableFlags & DXMPERF_AUDIOBREAK) { \
133  PERFINFO_WMI_AUDIOADDBREAK perfData; \
134  memset( &perfData, 0, sizeof( perfData ) ); \
135  perfData.header.Size = sizeof( perfData ); \
136  perfData.header.Flags = WNODE_FLAG_TRACED_GUID; \
137  perfData.header.Guid = GUID_AUDIOADDBREAK; \
138  perfData.data.iterNextWrite = IterNextWrite; \
139  perfData.data.offsetNextWrite = OffsetNextWrite; \
140  perfData.data.iterWrite = IterWrite; \
141  perfData.data.offsetWrite = OffsetWrite; \
142  PerflogTraceEvent((PEVENT_TRACE_HEADER) &perfData); \
143  }
144 
145 #define PERFLOG_VIDEOREND( sampletime, clocktime, psample ) \
146  if (PerflogEnableFlags & DXMPERF_VIDEOREND) { \
147  PERFINFO_WMI_AVREND perfData; \
148  memset( &perfData, 0, sizeof( perfData ) ); \
149  perfData.header.Size = sizeof( perfData ); \
150  perfData.header.Flags = WNODE_FLAG_TRACED_GUID; \
151  perfData.header.Guid = GUID_VIDEOREND; \
152  perfData.data.cycleCounter = _RDTSC(); \
153  perfData.data.dshowClock = (clocktime); \
154  perfData.data.sampleTime = (sampletime); \
155  PerflogTraceEvent ((PEVENT_TRACE_HEADER) &perfData); \
156  }
157 
158 #define PERFLOG_AUDIOGLITCH( instance, glitchtype, currenttime, previoustime ) \
159  if (PerflogEnableFlags & DXMPERF_AUDIOGLITCH) { \
160  PERFINFO_WMI_AUDIOGLITCH perfData; \
161  memset( &perfData, 0, sizeof( perfData ) ); \
162  perfData.header.Size = sizeof( perfData ); \
163  perfData.header.Flags = WNODE_FLAG_TRACED_GUID; \
164  perfData.header.Guid = GUID_DSOUNDGLITCH; \
165  perfData.data.cycleCounter = _RDTSC(); \
166  perfData.data.glitchType = (glitchtype); \
167  perfData.data.sampleTime = (currenttime); \
168  perfData.data.previousTime = (previoustime); \
169  perfData.data.instanceId = (instance); \
170  PerflogTraceEvent ((PEVENT_TRACE_HEADER) &perfData); \
171  }
172 
173 #define PERFLOG_FRAMEDROP( sampletime, clocktime, psample, renderer ) /*{ \
174  PERFINFO_WMI_FRAMEDROP perfData; \
175  if (NULL != g_pTraceEvent) { \
176  memset( &perfData, 0, sizeof( perfData ) ); \
177  perfData.header.Size = sizeof( perfData ); \
178  perfData.header.Flags = WNODE_FLAG_TRACED_GUID; \
179  perfData.header.Guid = GUID_FRAMEDROP; \
180  perfData.data.cycleCounter = _RDTSC(); \
181  perfData.data.dshowClock = (clocktime); \
182  perfData.data.frameTime = (sampletime); \
183  if (g_perfMasks[FRAMEDROP_INDEX] & FRAMEDROP_BIT) \
184  (*g_pTraceEvent)( g_traceHandle, (PEVENT_TRACE_HEADER) &perfData ); \
185  } \
186  }*/
187 
188 /*
189 #define PERFLOG_AUDIOBREAK( nextwrite, writepos, msecs ) { \
190  PERFINFO_WMI_AUDIOBREAK perfData; \
191  if (NULL != g_pTraceEvent) { \
192  memset( &perfData, 0, sizeof( perfData ) ); \
193  perfData.header.Size = sizeof( perfData ); \
194  perfData.header.Flags = WNODE_FLAG_TRACED_GUID; \
195  perfData.header.Guid = GUID_AUDIOBREAK; \
196  perfData.data.cycleCounter = _RDTSC(); \
197  perfData.data.dshowClock = (writepos); \
198  perfData.data.sampleTime = (nextwrite); \
199  perfData.data.sampleDuration = (msecs); \
200  if (g_perfMasks[AUDIOBREAK_INDEX] & AUDIOBREAK_BIT) \
201  (*g_pTraceEvent)( g_traceHandle, (PEVENT_TRACE_HEADER) &perfData ); \
202  } \
203  }
204 */
205 
206 #define PERFLOG_AUDIOBREAK( nextwrite, writepos, msecs ) \
207  if (PerflogEnableFlags & AUDIOBREAK_BIT) { \
208  PERFINFO_WMI_AUDIOBREAK perfData; \
209  memset( &perfData, 0, sizeof( perfData ) ); \
210  perfData.header.Size = sizeof( perfData ); \
211  perfData.header.Flags = WNODE_FLAG_TRACED_GUID; \
212  perfData.header.Guid = GUID_AUDIOBREAK; \
213  perfData.data.cycleCounter = _RDTSC(); \
214  perfData.data.dshowClock = (writepos); \
215  perfData.data.sampleTime = (nextwrite); \
216  perfData.data.sampleDuration = (msecs); \
217  PerflogTraceEvent ((PEVENT_TRACE_HEADER) &perfData); \
218  } \
219 
220 
221 inline
223  ULONG Level,
224  ULONG Id,
225  ULONGLONG DShowClock,
226  ULONGLONG Data1,
227  ULONGLONG Data2,
228  ULONGLONG Data3,
229  ULONGLONG Data4
230  )
231 {
232  if (Level <= PerflogModuleLevel)
233  {
234  PERFINFO_WMI_STREAMTRACE perfData;
235  memset( &perfData, 0, sizeof( perfData ) );
236  perfData.header.Size = sizeof( perfData );
237  perfData.header.Flags = WNODE_FLAG_TRACED_GUID;
238  perfData.header.Guid = GUID_STREAMTRACE;
239  perfData.data.dshowClock = DShowClock;
240  perfData.data.id = Id;
241  perfData.data.data[0] = Data1;
242  perfData.data.data[1] = Data2;
243  perfData.data.data[2] = Data3;
244  perfData.data.data[3] = Data4;
245  PerflogTraceEvent((PEVENT_TRACE_HEADER) &perfData);
246  }
247 }
248 
249 
250 #endif // _DXMPERF_H_
_RDTSC
ULONGLONG _RDTSC(void)
Definition: dxmperf.h:22
perfstruct.h
_PERFINFO_WMI_STREAMTRACE::data
PERFINFO_DSHOW_STREAMTRACE data
Definition: perfstruct.h:152
_PERFINFO_DSHOW_STREAMTRACE::data
ULONGLONG data[4]
Definition: perfstruct.h:147
_PERFINFO_DSHOW_STREAMTRACE::dshowClock
ULONGLONG dshowClock
Definition: perfstruct.h:146
_PERFINFO_WMI_STREAMTRACE
Definition: perfstruct.h:150
PERFLOG_STREAMTRACE
VOID PERFLOG_STREAMTRACE(ULONG Level, ULONG Id, ULONGLONG DShowClock, ULONGLONG Data1, ULONGLONG Data2, ULONGLONG Data3, ULONGLONG Data4)
Definition: dxmperf.h:184
_PERFINFO_DSHOW_STREAMTRACE::id
ULONG id
Definition: perfstruct.h:144
PerflogTraceEvent
VOID PerflogTraceEvent(__in PEVENT_TRACE_HEADER Event)
Definition: perflog.cpp:323
ULONG
ULONG(__stdcall *_RegisterTraceGuids)(__in IN WMIDPREQUEST RequestAddress
_PERFINFO_WMI_STREAMTRACE::header
EVENT_TRACE_HEADER header
Definition: perfstruct.h:151
PerflogModuleLevel
ULONG PerflogModuleLevel
Definition: perflog.cpp:107
perflog.h