diff options
Diffstat (limited to 'engine/dt_instrumentation_server.h')
| -rw-r--r-- | engine/dt_instrumentation_server.h | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/engine/dt_instrumentation_server.h b/engine/dt_instrumentation_server.h new file mode 100644 index 0000000..3617ee2 --- /dev/null +++ b/engine/dt_instrumentation_server.h @@ -0,0 +1,106 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +//=============================================================================// + +#ifndef DATATABLE_INSTRUMENTATION_SERVER_H +#define DATATABLE_INSTRUMENTATION_SERVER_H +#ifdef _WIN32 +#pragma once +#endif + +#include "tier0/fasttimer.h" +#include "iservernetworkable.h" + + +class CDTISendTable; +class SendTable; + + +// Is instrumentation enabled? +extern bool g_bServerDTIEnabled; + + +// Types of things it times. +typedef enum +{ + SERVERDTI_CALCDELTA=0, + SERVERDTI_ENCODE, + SERVERDTI_SHOULDTRANSMIT, + SERVERDTI_WRITE_DELTA_PROPS +} ServerDTITimerType; + + + +// ------------------------------------------------------------------------------------------ // +// Instrumentation functions. +// ------------------------------------------------------------------------------------------ // + +// This is called at startup to enable or disable instrumentation. +// If pFilename is null, no instrumentation is performed. +void ServerDTI_Init( char const *pFilename ); + +// This calls ServerDTI_Flush and cleans up. +void ServerDTI_Term(); + +// This writes out the instrumentation file. +void ServerDTI_Flush(); + +// Setup instrumentation on a CRecvDecoder. +CDTISendTable* ServerDTI_HookTable( SendTable *pTable ); + +void ServerDTI_AddEntityEncodeEvent( SendTable *pTable, float distToPlayer ); + +// Used to tell if the entity is using manual or auto mode. +void ServerDTI_RegisterNetworkStateChange( SendTable *pTable, bool bStateChanged ); + + +// ------------------------------------------------------------------------------------------ // +// Helper class to place timers easily. +// ------------------------------------------------------------------------------------------ // + +class CServerDTITimer +{ +public: + CServerDTITimer( const SendTable *pTable, ServerDTITimerType type ); + ~CServerDTITimer(); + +private: + + const SendTable *m_pTable; + ServerDTITimerType m_Type; + CFastTimer m_Timer; +}; + +inline CServerDTITimer::CServerDTITimer( const SendTable *pTable, ServerDTITimerType type ) +{ + if ( g_bServerDTIEnabled ) + { + m_pTable = pTable; + m_Type = type; + m_Timer.Start(); + } +} + +inline CServerDTITimer::~CServerDTITimer() +{ + if ( g_bServerDTIEnabled && m_pTable ) + { + m_Timer.End(); + extern void _ServerDTI_HookTimer( const SendTable *pTable, ServerDTITimerType timerType, CCycleCount const &count ); + _ServerDTI_HookTimer( m_pTable, m_Type, m_Timer.GetDuration() ); + } +} + +inline void ServerDTI_RegisterNetworkStateChange( SendTable *pTable, bool bStateChanged ) +{ + if ( g_bServerDTIEnabled ) + { + extern void _ServerDTI_RegisterNetworkStateChange( SendTable *pTable, bool bStateChanged ); + _ServerDTI_RegisterNetworkStateChange( pTable, bStateChanged ); + } +} + +#endif // DATATABLE_INSTRUMENTATION_SERVER_H |