source-engine/engine/dt_instrumentation_server.h

107 lines
2.7 KiB
C
Raw Permalink Normal View History

2020-04-22 16:56:21 +00:00
//========= 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