!B (CE-20767) Enabled opaque rendering and shadows for GPU particles. Added ZPassGPU...
[CRYENGINE.git] / Code / CryEngine / CryNetwork / NetTimer.h
blob67a2516fd19ddc6adc627d4534a6cc81a2abb4d0
1 // Copyright 2001-2019 Crytek GmbH / Crytek Group. All rights reserved.
3 #ifndef __NETTIMER_H__
4 #define __NETTIMER_H__
6 #pragma once
8 ///////////////////////////////////////////////////////////////////////////////
9 //
10 // Old net timers
13 #include <CrySystem/TimeValue.h>
14 #include <queue>
15 //#include "VectorMap.h"
16 #include <CryMemory/STLPoolAllocator.h>
17 #include "Config.h"
19 typedef uint32 NetTimerId;
20 typedef void (* NetTimerCallback)(NetTimerId, void*, CTimeValue);
22 static const int TIMER_HERTZ = 250;
24 class CNetTimer
26 public:
27 CNetTimer();
28 #if TIMER_DEBUG
29 NetTimerId AddTimer(CTimeValue when, NetTimerCallback callback, void* pUserData, char* pFile, size_t line, char* pName);
30 #else
31 NetTimerId AddTimer(CTimeValue when, NetTimerCallback callback, void* pUserData);
32 #endif // TIMER_DEBUG
33 void* CancelTimer(NetTimerId& id);
34 CTimeValue Update();
36 void GetMemoryStatistics(ICrySizer* pSizer, bool countingThis = false)
38 SIZER_COMPONENT_NAME(pSizer, "CNetTimer");
39 if (countingThis)
40 pSizer->Add(*this);
41 pSizer->AddContainer(m_callbacks);
44 private:
45 static const int TIMER_SLOTS = 32; // 0.128 seconds
46 int m_timerCallbacks[TIMER_SLOTS];
47 int m_curSlot;
48 #if USE_SYSTEM_ALLOCATOR
49 std::multimap<CTimeValue, int, std::less<CTimeValue>> m_slowCallbacks;
50 #else
51 std::multimap<CTimeValue, int, std::less<CTimeValue>, stl::STLPoolAllocator<std::pair<const CTimeValue, int>, stl::PoolAllocatorSynchronizationSinglethreaded>> m_slowCallbacks;
52 #endif
54 struct SCallbackInfo
56 SCallbackInfo(NetTimerCallback callback, void* pUserData)
58 this->callback = callback;
59 this->pUserData = pUserData;
60 next = -1;
61 cancelled = true;
63 SCallbackInfo()
65 this->callback = 0;
66 this->pUserData = 0;
67 next = -1;
68 cancelled = true;
70 NetTimerCallback callback;
71 void* pUserData;
72 int next;
73 bool cancelled;
74 #if TIMER_DEBUG
75 CTimeValue schedTime;
76 int slotsInFuture;
77 int curSlotWhenScheduled;
78 #endif
81 typedef std::vector<int, stl::STLGlobalAllocator<int>> TGlobalIntVector;
83 std::vector<SCallbackInfo, stl::STLGlobalAllocator<SCallbackInfo>> m_callbacks;
84 TGlobalIntVector m_freeCallbacks;
85 TGlobalIntVector m_execCallbacks;
86 CTimeValue m_wakeup;
87 CTimeValue m_lastExec;
88 #if TIMER_DEBUG
89 CTimeValue m_epoch; // just for debugging
90 #endif
94 ///////////////////////////////////////////////////////////////////////////////
96 ///////////////////////////////////////////////////////////////////////////////
98 // Accurate net timers
101 class CAccurateNetTimer
103 public:
104 CAccurateNetTimer();
105 #if TIMER_DEBUG
106 NetTimerId AddTimer(CTimeValue when, NetTimerCallback callback, void* pUserData, char* pFile, size_t line, char* pName);
107 #else
108 NetTimerId AddTimer(CTimeValue when, NetTimerCallback callback, void* pUserData);
109 #endif // TIMER_DEBUG
110 void* CancelTimer(NetTimerId& id);
111 CTimeValue Update();
113 void GetMemoryStatistics(ICrySizer* pSizer, bool countingThis = false)
115 SIZER_COMPONENT_NAME(pSizer, "CAccurateNetTimer");
116 if (countingThis)
117 pSizer->Add(*this);
118 pSizer->AddContainer(m_callbacks);
121 private:
122 struct SCallbackInfo
124 SCallbackInfo(NetTimerCallback callback, void* pUserData)
126 this->callback = callback;
127 this->pUserData = pUserData;
128 inUse = true;
130 SCallbackInfo()
132 this->callback = 0;
133 this->pUserData = 0;
134 inUse = false;
136 NetTimerCallback callback;
137 void* pUserData;
138 bool inUse;
139 CTimeValue schedTime;
140 #if TIMER_DEBUG
141 CTimeValue timeAdded;
142 CryFixedStringT<256> location;
143 CryFixedStringT<128> name;
144 #endif
147 typedef std::vector<int, stl::STLGlobalAllocator<int>> TGlobalIntVector;
149 std::vector<SCallbackInfo, stl::STLGlobalAllocator<SCallbackInfo>> m_callbacks;
150 TGlobalIntVector m_freeCallbacks;
151 CTimeValue m_nextUpdate;
155 ///////////////////////////////////////////////////////////////////////////////
157 #endif