#ifndef VALVE_TRACELOGGING_H
#define VALVE_TRACELOGGING_H
#include "platform.h"
#ifdef _WINDOWS
#undef WINVER
#define WINVER 0x0601
#define WIN32_LEAN_AND_MEAN
#define NOMINMAX
#include <windows.h>
#if defined(_WIN32) && (defined(__MINGW32__) || defined(__MINGW64__))
#define VALVE_DISABLE_TRACELOGGING
#else
#include <winmeta.h>
#endif
#ifdef VALVE_DISABLE_TRACELOGGING
#define IsTraceLoggingEnabled() false
#else
#define IsTraceLoggingEnabled() true
#define EVNTAPI
#define EventEnabled EventEnabled_ValveDoNotUse
#define EventProviderEnabled EventProviderEnabled_ValveDoNotUse
#define EventRegister EventRegister_Valve
#define EventUnregister EventUnregister_Valve
#define EventWrite EventWrite_ValveDoNotUse
#define EventWriteTransfer EventWriteTransfer_Valve
#define EventActivityIdControl EventActivityIdControl_Valve
#include <TraceLoggingProvider.h>
#include <TraceLoggingActivity.h>
PLATFORM_INTERFACE ULONG Plat_EventRegister( LPCGUID ProviderId, PENABLECALLBACK EnableCallback, PVOID CallbackContext, PREGHANDLE RegHandle );
inline ULONG EVNTAPI EventRegister( LPCGUID ProviderId, PENABLECALLBACK EnableCallback, PVOID CallbackContext, PREGHANDLE RegHandle )
{
return Plat_EventRegister( ProviderId, EnableCallback, CallbackContext, RegHandle );
}
PLATFORM_INTERFACE ULONG Plat_EventUnregister( REGHANDLE RegHandle );
inline ULONG EVNTAPI EventUnregister( REGHANDLE RegHandle )
{
return Plat_EventUnregister( RegHandle );
}
PLATFORM_INTERFACE ULONG __stdcall Plat_EventWriteTransfer( REGHANDLE RegHandle, PCEVENT_DESCRIPTOR EventDescriptor, LPCGUID ActivityId, LPCGUID RelatedActivityId, ULONG UserDataCount, PEVENT_DATA_DESCRIPTOR UserData );
inline ULONG EVNTAPI EventWriteTransfer( REGHANDLE RegHandle, PCEVENT_DESCRIPTOR EventDescriptor, LPCGUID ActivityId, LPCGUID RelatedActivityId, ULONG UserDataCount, PEVENT_DATA_DESCRIPTOR UserData )
{
return Plat_EventWriteTransfer( RegHandle, EventDescriptor, ActivityId, RelatedActivityId, UserDataCount, UserData );
}
PLATFORM_INTERFACE ULONG __stdcall Plat_EventActivityIdControl( ULONG ControlCode, LPGUID ActivityId );
inline ULONG EVNTAPI EventActivityIdControl( ULONG ControlCode, LPGUID ActivityId )
{
return Plat_EventActivityIdControl( ControlCode, ActivityId );
}
#define IsTraceLoggingProviderEnabled( hProvider ) TraceLoggingProviderEnabled( (hProvider), 0, 0 )
#define TRACELOGGING_DEFINE_PROVIDER_AUTOREGISTER( hprovider, providerName, providerId, ... ) \
TRACELOGGING_DEFINE_PROVIDER( hprovider, providerName, providerId, __VA_ARGS__ ); \
ValveTraceLoggingAutoRegister< hprovider > hprovider##_autoRegister
template< TraceLoggingHProvider const& provider >
struct ValveTraceLoggingAutoRegister
{
ValveTraceLoggingAutoRegister() { TraceLoggingRegister( provider ); }
~ValveTraceLoggingAutoRegister() { TraceLoggingUnregister( provider ); }
};
#define TRACELOGGING_ACTIVITY_SCOPE( hprovider, activity_name, ... ) \
TraceLoggingThreadActivity<hprovider> traceloggingscopevar_##activity_name; \
TraceLoggingWriteStart( traceloggingscopevar_##activity_name, #activity_name, __VA_ARGS__ ); \
RunCodeAtScopeExit( TraceLoggingWriteStop( traceloggingscopevar_##activity_name, #activity_name ) )
#endif
#else
#define IsTraceLoggingEnabled() false
#endif
#if !IsTraceLoggingEnabled()
struct _tlgProvider_t;
typedef struct _tlgProvider_t const* TraceLoggingHProvider;
#define TRACELOGGING_DECLARE_PROVIDER( hprovider ) extern "C" const TraceLoggingHProvider hprovider;
#define TRACELOGGING_DEFINE_PROVIDER( hprovider, ... ) extern "C" const TraceLoggingHProvider hprovider = nullptr;
#define TRACELOGGING_DEFINE_PROVIDER_AUTOREGISTER( hprovider, ... ) TRACELOGGING_DEFINE_PROVIDER( hprovider )
#define TraceLoggingRegister( ... ) ((void)0)
#define TraceLoggingUnregister( ... ) ((void)0)
#define TraceLoggingWrite( ... ) ((void)0)
#define IsTraceLoggingProviderEnabled( hprovider ) false
#define TraceLoggingWriteStart( activity, name, ...) ((void)0)
#define TraceLoggingWriteTagged( activity, name, ...) ((void)0)
#define TraceLoggingWriteStop( activity, name, ...) ((void)0)
#define TRACELOGGING_ACTIVITY_SCOPE( hprovider , activity_name, ... ) ((void)0)
template< TraceLoggingHProvider const& provider > class TraceLoggingActivity {};
template< TraceLoggingHProvider const& provider > class TraceLoggingThreadActivity {};
#endif
#endif