summaryrefslogtreecommitdiff
path: root/engine/dt_instrumentation_server.h
diff options
context:
space:
mode:
Diffstat (limited to 'engine/dt_instrumentation_server.h')
-rw-r--r--engine/dt_instrumentation_server.h106
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