107 lines
2.7 KiB
C++
107 lines
2.7 KiB
C++
//========= 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
|