5#include "Containers/Array.h"
19 struct FChangeMaskCache;
20 class FDeltaCompressionBaselineInvalidationTracker;
22 class FNetRefHandleManager;
23 class FReplicationConnections;
106 using ObjectInfoIndexType =
uint16;
110 InvalidObjectInfoIndex = 0,
111 InvalidBaselineStateInfoIndex = 0,
114 InvalidInternalIndex = 0,
116 ObjectInfoGrowCount = 128,
119 enum class EChangeMaskBehavior :
unsigned
125 class FInternalBaseline
128 bool IsValid()
const {
return BaselineStateInfoIndex != InvalidBaselineStateInfoIndex; }
131 uint32 BaselineStateInfoIndex = InvalidBaselineStateInfoIndex;
134 class FObjectBaselineInfo
137 FInternalBaseline Baselines[2];
144 FPerObjectInfo() =
delete;
146 ~FPerObjectInfo() =
delete;
156 uint32 PrevBaselineCreationFrame;
162 FObjectBaselineInfo BaselinesForConnections[1];
167 struct FBaselineSharingContext
169 FNetBitArray ObjectInfoIndicesWithNewBaseline;
171 uint32 CreatedBaselineCount = 0;
177 void UpdateDirtyStateMasks(
const FChangeMaskCache* ChangeMaskCache);
179 void AddObjectToScope(
uint32 ObjectIndex);
180 void RemoveObjectFromScope(
uint32 ObjectIndex);
182 FPerObjectInfo* AllocPerObjectInfoForObject(
uint32 ObjectIndex);
183 void FreePerObjectInfoForObject(
uint32 ObjectIndex);
185 void ConstructPerObjectInfo(FPerObjectInfo*)
const;
186 void DestructPerObjectInfo(FPerObjectInfo*);
188 ObjectInfoIndexType AllocPerObjectInfo();
189 void FreePerObjectInfo(ObjectInfoIndexType
Index);
191 FPerObjectInfo* GetPerObjectInfo(ObjectInfoIndexType
Index);
192 const FPerObjectInfo* GetPerObjectInfo(ObjectInfoIndexType
Index)
const;
194 FPerObjectInfo* GetPerObjectInfoForObject(
uint32 ObjectIndex);
195 const FPerObjectInfo* GetPerObjectInfoForObject(
uint32 ObjectIndex)
const;
197 void FreeAllPerObjectInfos();
205 void ReleaseBaselinesForConnection(
uint32 ConnId);
207 void ConstructBaselineSharingContext(FBaselineSharingContext&);
208 void DestructBaselineSharingContext(FBaselineSharingContext&);
210 bool DoesObjectSupportDeltaCompression(
uint32 ObjectIndex)
const;
219 bool IsAllowedToCreateBaselineForObject(
uint32 ConnId,
uint32 ObjectIndex,
const FPerObjectInfo*, ObjectInfoIndexType InfoIndex)
const;
221 void InvalidateBaselinesDueToModifiedConditionals();
224 FDeltaCompressionBaselineStorage BaselineStorage;
226 FNetBitArray DeltaCompressionEnabledObjects;
227 FNetBitArray UsedPerObjectInfos;
234 FGlobalChangeMaskAllocator ChangeMaskAllocator;
236 FReplicationConnections* Connections =
nullptr;
237 const FNetRefHandleManager* NetRefHandleManager =
nullptr;
239 const FDeltaCompressionBaselineInvalidationTracker* BaselineInvalidationTracker =
nullptr;
240 uint32 MaxConnectionCount = 0;
241 uint32 BytesPerObjectInfo = 0;
242 uint32 MaxDeltaCompressedObjectCount = 0;
246 FBaselineSharingContext BaselineSharingContext;
252 return MaxDeltaCompressedObjectCount;
255inline FDeltaCompressionBaselineManager::FPerObjectInfo* FDeltaCompressionBaselineManager::GetPerObjectInfo(ObjectInfoIndexType
Index)
265inline const FDeltaCompressionBaselineManager::FPerObjectInfo* FDeltaCompressionBaselineManager::GetPerObjectInfo(ObjectInfoIndexType
Index)
const
275inline FDeltaCompressionBaselineManager::FPerObjectInfo* FDeltaCompressionBaselineManager::GetPerObjectInfoForObject(
uint32 ObjectIndex)
277 checkSlow(ObjectIndex != InvalidInternalIndex);
280 const ObjectInfoIndexType InfoIndex = ObjectIndexToObjectInfoIndex[ObjectIndex];
281 if (InfoIndex != InvalidObjectInfoIndex)
283 return GetPerObjectInfo(InfoIndex);
289inline const FDeltaCompressionBaselineManager::FPerObjectInfo* FDeltaCompressionBaselineManager::GetPerObjectInfoForObject(
uint32 ObjectIndex)
const
291 checkSlow(ObjectIndex != InvalidInternalIndex);
294 const ObjectInfoIndexType InfoIndex = ObjectIndexToObjectInfoIndex[ObjectIndex];
295 if (InfoIndex != InvalidObjectInfoIndex)
297 return GetPerObjectInfo(InfoIndex);
308 const uint32 ChangeMaskStride = ObjectInfo->ChangeMaskStride;
314inline ChangeMaskStorageType* FDeltaCompressionBaselineManager::GetChangeMaskPointerForConnection(
const FPerObjectInfo* ObjectInfo,
uint32 ConnId)
const
316 const uint32 ChangeMaskStride = ObjectInfo->ChangeMaskStride;
#define checkSlow(expr)
Definition AssertionMacros.h:332
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
void Init()
Definition LockFreeList.h:4
UE_FORCEINLINE_HINT bool IsValid(const UObject *Test)
Definition Object.h:1875
Definition ContainerAllocationPolicies.h:447
UE_REWRITE SizeType Num() const
Definition Array.h:1144
UE_NODEBUG UE_FORCEINLINE_HINT ElementType * GetData() UE_LIFETIMEBOUND
Definition Array.h:1027
Definition ReplicationStateStorage.h:48
Definition DeltaCompressionBaselineInvalidationTracker.h:28
Definition DeltaCompressionBaselineManager.h:54
void DestroyBaseline(uint32 ConnId, uint32 ObjectIndex, uint32 BaselineIndex)
Definition DeltaCompressionBaselineManager.cpp:469
ENetObjectDeltaCompressionStatus GetDeltaCompressionStatus(FInternalNetRefIndex Index) const
Definition DeltaCompressionBaselineManager.cpp:144
void PostSendUpdate(FDeltaCompressionBaselineManagerPostSendUpdateParams &UpdateParams)
Definition DeltaCompressionBaselineManager.cpp:128
void Deinit()
Definition DeltaCompressionBaselineManager.cpp:100
FString PrintDeltaCompressionStatus(uint32 ConnectionId, FInternalNetRefIndex ObjectIndex) const
Definition DeltaCompressionBaselineManager.cpp:730
@ MaxBaselineCount
Definition DeltaCompressionBaselineManager.h:56
void LostBaseline(uint32 ConnId, uint32 ObjectIndex, uint32 BaselineIndex)
Definition DeltaCompressionBaselineManager.cpp:474
void PreSendUpdate(FDeltaCompressionBaselineManagerPreSendUpdateParams &UpdateParams)
Definition DeltaCompressionBaselineManager.cpp:113
@ InvalidBaselineIndex
Definition DeltaCompressionBaselineManager.h:57
void AddConnection(uint32 ConnectionId)
Definition DeltaCompressionBaselineManager.cpp:135
~FDeltaCompressionBaselineManager()
Definition DeltaCompressionBaselineManager.cpp:61
FDeltaCompressionBaselineManager()
Definition DeltaCompressionBaselineManager.cpp:54
uint32 GetMaxDeltaCompressedObjectCount() const
Definition DeltaCompressionBaselineManager.h:250
FDeltaCompressionBaseline GetBaseline(uint32 ConnId, uint32 ObjectIndex, uint32 BaselineIndex) const
Definition DeltaCompressionBaselineManager.cpp:479
@ BaselineIndexBitCount
Definition DeltaCompressionBaselineManager.h:58
void SetDeltaCompressionStatus(FInternalNetRefIndex Index, ENetObjectDeltaCompressionStatus Status)
Definition DeltaCompressionBaselineManager.cpp:149
FDeltaCompressionBaseline CreateBaseline(uint32 ConnId, uint32 ObjectIndex, uint32 BaselineIndex)
Definition DeltaCompressionBaselineManager.cpp:390
void OnMaxInternalNetRefIndexIncreased(UE::Net::Private::FInternalNetRefIndex NewMaxInternalIndex)
Definition DeltaCompressionBaselineManager.cpp:107
void RemoveConnection(uint32 ConnectionId)
Definition DeltaCompressionBaselineManager.cpp:139
Definition DeltaCompressionBaseline.h:11
Definition NetRefHandleManager.h:72
Definition ReplicationConnections.h:32
Definition ReplicationSystem.h:70
Definition NetworkVersion.cpp:28
bool IsDeltaCompressionEnabled()
Definition DeltaCompressionBaselineManager.cpp:44
uint32 FInternalNetRefIndex
Definition ReplicationStateStorage.h:20
FNetBitArrayView::StorageWordType ChangeMaskStorageType
Definition ChangeMaskUtil.h:11
Definition NetworkVersion.cpp:28
ENetObjectDeltaCompressionStatus
Definition ReplicationSystemTypes.h:13
U16 Index
Definition radfft.cpp:71
Definition ChangeMaskCache.h:17
Definition DeltaCompressionBaselineManager.h:33
const FDeltaCompressionBaselineInvalidationTracker * BaselineInvalidationTracker
Definition DeltaCompressionBaselineManager.h:34
UReplicationSystem * ReplicationSystem
Definition DeltaCompressionBaselineManager.h:38
FReplicationStateStorage * ReplicationStateStorage
Definition DeltaCompressionBaselineManager.h:37
FInternalNetRefIndex MaxInternalNetRefIndex
Definition DeltaCompressionBaselineManager.h:40
FInternalNetRefIndex MaxNetObjectCount
Definition DeltaCompressionBaselineManager.h:39
FReplicationConnections * Connections
Definition DeltaCompressionBaselineManager.h:35
const FNetRefHandleManager * NetRefHandleManager
Definition DeltaCompressionBaselineManager.h:36
uint32 MaxDeltaCompressedObjectCount
Definition DeltaCompressionBaselineManager.h:41
Definition DeltaCompressionBaselineManager.h:50
Definition DeltaCompressionBaselineManager.h:45
const FChangeMaskCache * ChangeMaskCache
Definition DeltaCompressionBaselineManager.h:46