123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250 |
- //------------------------------------------------------------------------------
- // File: DXMPerf.h
- //
- // Desc: Macros for DirectShow performance logging.
- //
- // Copyright (c) 1992-2001 Microsoft Corporation. All rights reserved.
- //------------------------------------------------------------------------------
- extern "C" unsigned __int64 __getReg( int whichReg );
- inline ULONGLONG _RDTSC( void ) {
- LARGE_INTEGER li;
- __asm {
- _emit 0x0F
- _emit 0x31
- mov li.LowPart,eax
- mov li.HighPart,edx
- }
- return li.QuadPart;
- return __getReg( INL_REGID_APITC );
- // not implemented on non x86/IA64 platforms
- return 0;
- }
- //#define GETTIME_BIT 0x00000001
- //#define AUDIOREND_BIT 0x00000004
- //#define FRAMEDROP_BIT 0x00000008
- PERFINFO_WMI_GETTIME perfData; \
- if (NULL != g_pTraceEvent) { \
- memset( &perfData, 0, sizeof( perfData ) ); \
- perfData.header.Size = sizeof( perfData ); \
- perfData.header.Flags = WNODE_FLAG_TRACED_GUID; \
- perfData.header.Guid = GUID_GETTIME; \
- perfData.data.cycleCounter = _RDTSC(); \
- perfData.data.dshowClock = (ULONGLONG) (time); \
- if (g_perfMasks[GETTIME_INDEX] & GETTIME_BIT) \
- (*g_pTraceEvent)( g_traceHandle, (PEVENT_TRACE_HEADER) &perfData ); \
- } \
- }*/
- PERFINFO_WMI_AVREND perfData; \
- if (NULL != g_pTraceEvent) { \
- memset( &perfData, 0, sizeof( perfData ) ); \
- perfData.header.Size = sizeof( perfData ); \
- perfData.header.Flags = WNODE_FLAG_TRACED_GUID; \
- perfData.header.Guid = GUID_AUDIOREND; \
- perfData.data.cycleCounter = _RDTSC(); \
- perfData.data.dshowClock = (clocktime); \
- perfData.data.sampleTime = (sampletime); \
- if (g_perfMasks[AUDIOREND_INDEX] & AUDIOREND_BIT) \
- (*g_pTraceEvent)( g_traceHandle, (PEVENT_TRACE_HEADER) &perfData ); \
- } \
- }*/
- if (PerflogEnableFlags & DXMPERF_AUDIORECV) { \
- PERFINFO_WMI_AUDIORECV perfData; \
- memset( &perfData, 0, sizeof( perfData ) ); \
- perfData.header.Size = sizeof( perfData ); \
- perfData.header.Flags = WNODE_FLAG_TRACED_GUID; \
- perfData.header.Guid = GUID_AUDIORECV; \
- perfData.data.streamTime = StreamTime; \
- perfData.data.sampleStart = SampleStart; \
- perfData.data.sampleStop = SampleStop; \
- perfData.data.discontinuity = Discontinuity; \
- perfData.data.hwduration = Duration; \
- PerflogTraceEvent((PEVENT_TRACE_HEADER) &perfData); \
- }
- if (PerflogEnableFlags & DXMPERF_AUDIOSLAVE) { \
- PERFINFO_WMI_AUDIOSLAVE perfData; \
- memset( &perfData, 0, sizeof( perfData ) ); \
- perfData.header.Size = sizeof( perfData ); \
- perfData.header.Flags = WNODE_FLAG_TRACED_GUID; \
- perfData.header.Guid = GUID_AUDIOSLAVE; \
- perfData.data.masterClock = MasterClock; \
- perfData.data.slaveClock = SlaveClock; \
- perfData.data.errorAccum = ErrorAccum; \
- perfData.data.lastHighErrorSeen = LastHighErrorSeen;\
- perfData.data.lastLowErrorSeen = LastLowErrorSeen; \
- PerflogTraceEvent((PEVENT_TRACE_HEADER) &perfData); \
- }
- if (PerflogEnableFlags & DXMPERF_AUDIOBREAK) { \
- PERFINFO_WMI_AUDIOADDBREAK perfData; \
- memset( &perfData, 0, sizeof( perfData ) ); \
- perfData.header.Size = sizeof( perfData ); \
- perfData.header.Flags = WNODE_FLAG_TRACED_GUID; \
- perfData.header.Guid = GUID_AUDIOADDBREAK; \
- perfData.data.iterNextWrite = IterNextWrite; \
- perfData.data.offsetNextWrite = OffsetNextWrite; \
- perfData.data.iterWrite = IterWrite; \
- perfData.data.offsetWrite = OffsetWrite; \
- PerflogTraceEvent((PEVENT_TRACE_HEADER) &perfData); \
- }
- if (PerflogEnableFlags & DXMPERF_VIDEOREND) { \
- PERFINFO_WMI_AVREND perfData; \
- memset( &perfData, 0, sizeof( perfData ) ); \
- perfData.header.Size = sizeof( perfData ); \
- perfData.header.Flags = WNODE_FLAG_TRACED_GUID; \
- perfData.header.Guid = GUID_VIDEOREND; \
- perfData.data.cycleCounter = _RDTSC(); \
- perfData.data.dshowClock = (clocktime); \
- perfData.data.sampleTime = (sampletime); \
- PerflogTraceEvent ((PEVENT_TRACE_HEADER) &perfData); \
- }
- if (PerflogEnableFlags & DXMPERF_AUDIOGLITCH) { \
- PERFINFO_WMI_AUDIOGLITCH perfData; \
- memset( &perfData, 0, sizeof( perfData ) ); \
- perfData.header.Size = sizeof( perfData ); \
- perfData.header.Flags = WNODE_FLAG_TRACED_GUID; \
- perfData.header.Guid = GUID_DSOUNDGLITCH; \
- perfData.data.cycleCounter = _RDTSC(); \
- perfData.data.glitchType = (glitchtype); \
- perfData.data.sampleTime = (currenttime); \
- perfData.data.previousTime = (previoustime); \
- perfData.data.instanceId = (instance); \
- PerflogTraceEvent ((PEVENT_TRACE_HEADER) &perfData); \
- }
- PERFINFO_WMI_FRAMEDROP perfData; \
- if (NULL != g_pTraceEvent) { \
- memset( &perfData, 0, sizeof( perfData ) ); \
- perfData.header.Size = sizeof( perfData ); \
- perfData.header.Flags = WNODE_FLAG_TRACED_GUID; \
- perfData.header.Guid = GUID_FRAMEDROP; \
- perfData.data.cycleCounter = _RDTSC(); \
- perfData.data.dshowClock = (clocktime); \
- perfData.data.frameTime = (sampletime); \
- if (g_perfMasks[FRAMEDROP_INDEX] & FRAMEDROP_BIT) \
- (*g_pTraceEvent)( g_traceHandle, (PEVENT_TRACE_HEADER) &perfData ); \
- } \
- }*/
- /*
- PERFINFO_WMI_AUDIOBREAK perfData; \
- if (NULL != g_pTraceEvent) { \
- memset( &perfData, 0, sizeof( perfData ) ); \
- perfData.header.Size = sizeof( perfData ); \
- perfData.header.Flags = WNODE_FLAG_TRACED_GUID; \
- perfData.header.Guid = GUID_AUDIOBREAK; \
- perfData.data.cycleCounter = _RDTSC(); \
- perfData.data.dshowClock = (writepos); \
- perfData.data.sampleTime = (nextwrite); \
- perfData.data.sampleDuration = (msecs); \
- if (g_perfMasks[AUDIOBREAK_INDEX] & AUDIOBREAK_BIT) \
- (*g_pTraceEvent)( g_traceHandle, (PEVENT_TRACE_HEADER) &perfData ); \
- } \
- }
- */
- if (PerflogEnableFlags & AUDIOBREAK_BIT) { \
- PERFINFO_WMI_AUDIOBREAK perfData; \
- memset( &perfData, 0, sizeof( perfData ) ); \
- perfData.header.Size = sizeof( perfData ); \
- perfData.header.Flags = WNODE_FLAG_TRACED_GUID; \
- perfData.header.Guid = GUID_AUDIOBREAK; \
- perfData.data.cycleCounter = _RDTSC(); \
- perfData.data.dshowClock = (writepos); \
- perfData.data.sampleTime = (nextwrite); \
- perfData.data.sampleDuration = (msecs); \
- PerflogTraceEvent ((PEVENT_TRACE_HEADER) &perfData); \
- } \
- inline
- VOID PERFLOG_STREAMTRACE(
- ULONG Level,
- ULONG Id,
- ULONGLONG DShowClock,
- ULONGLONG Data1,
- ULONGLONG Data2,
- ULONGLONG Data3,
- ULONGLONG Data4
- )
- {
- if (Level <= PerflogModuleLevel)
- {
- PERFINFO_WMI_STREAMTRACE perfData;
- memset( &perfData, 0, sizeof( perfData ) );
- perfData.header.Size = sizeof( perfData );
- perfData.header.Flags = WNODE_FLAG_TRACED_GUID;
- perfData.header.Guid = GUID_STREAMTRACE;
- perfData.data.dshowClock = DShowClock;
- perfData.data.id = Id;
- perfData.data.data[0] = Data1;
- perfData.data.data[1] = Data2;
- perfData.data.data[2] = Data3;
- perfData.data.data[3] = Data4;
- PerflogTraceEvent((PEVENT_TRACE_HEADER) &perfData);
- }
- }
|