UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
DirtyNetObjectTracker.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "Logging/LogMacros.h"
6
9
10#include "Iris/IrisConfig.h"
11#include "Iris/Core/IrisCsv.h"
12
13namespace UE::Net::Private
14{
15 class FNetRefHandleManager;
16 class FDirtyObjectsAccessor;
17
19}
20
21#ifndef UE_NET_DIRTYOBJECTTRACKER_LOG_COMPILE_VERBOSITY
22// Don't compile verbose logs in Shipping builds
23#if UE_BUILD_SHIPPING
24# define UE_NET_DIRTYOBJECTTRACKER_LOG_COMPILE_VERBOSITY Log
25#else
26# define UE_NET_DIRTYOBJECTTRACKER_LOG_COMPILE_VERBOSITY All
27#endif
28#endif
29
31
32namespace UE::Net::Private
33{
34
37
44
46{
47public:
50
51 void Init(const FDirtyNetObjectTrackerInitParams& Params);
52 void Deinit();
53
55 bool IsInit() const { return NetRefHandleManager != nullptr; }
56
59
60 /* Update dirty objects from the global list and then prevent future modifications to that list until it is reset. */
62
65
67 void LockExternalAccess();
68
71
74
75#if UE_NET_IRIS_CSV_STATS
76 void ReportCSVStats();
77#endif
78
80 const FNetBitArrayView GetAccumulatedDirtyNetObjects() const { return MakeNetBitArrayView(AccumulatedDirtyNetObjects); }
81
84 const FNetBitArrayView GetForceNetUpdateObjects() const { return MakeNetBitArrayView(ForceNetUpdateObjects); }
85
86private:
89
91
92 using StorageType = FNetBitArrayView::StorageWordType;
93 static constexpr uint32 StorageTypeBitCount = FNetBitArrayView::WordBitCount;
94
95 void SetNetObjectListsSize(FInternalNetRefIndex NewMaxInternalIndex);
96 void OnMaxInternalNetRefIndexIncreased(FInternalNetRefIndex NewMaxInternalIndex);
97
98 void MarkNetObjectDirty(FInternalNetRefIndex NetObjectIndex);
100 void ApplyGlobalDirtyObjectList();
101
110 void ApplyAndTryResetGlobalDirtyObjectList();
111
113 FNetBitArrayView GetDirtyNetObjectsThisFrame();
114
116 bool MarkPushbasedPropertiesDirty(FInternalNetRefIndex ObjectIndex, uint16 OwnerIndex, const FNetBitArrayView& DirtyProperties);
117
118private:
119
120 // Dirty objects that persist across frames.
121 FNetBitArray AccumulatedDirtyNetObjects;
122
123 // Objects that want to force a replication this frame
124 FNetBitArray ForceNetUpdateObjects;
125
126 // List of objects set to be dirty this frame. Is always reset at the end of the net tick flush
127 FNetBitArray DirtyNetObjects;
128
129 const FNetRefHandleManager* NetRefHandleManager = nullptr;
130
131 FGlobalDirtyNetObjectTracker::FPollHandle GlobalDirtyTrackerPollHandle;
132
133 uint32 ReplicationSystemId;
134
135 uint32 NetObjectIdCount = 0;
136
137 bool bShouldResetPolledGlobalDirtyTracker = false;
138
139#if UE_NET_THREAD_SAFETY_CHECK
140 bool bIsExternalAccessAllowed = false;
141#endif
142
143#if UE_NET_IRIS_CSV_STATS
146#endif
147};
148
153{
154public:
156 : DirtyNetObjectTracker(InDirtyNetObjectTracker)
157 {
158 DirtyNetObjectTracker.LockExternalAccess();
159 }
160
162 {
163 DirtyNetObjectTracker.AllowExternalAccess();
164 }
165
166 FNetBitArrayView GetDirtyNetObjects() { return DirtyNetObjectTracker.GetDirtyNetObjectsThisFrame(); }
167 const FNetBitArrayView GetDirtyNetObjects() const { return DirtyNetObjectTracker.GetDirtyNetObjectsThisFrame(); }
168
169private:
170 FDirtyNetObjectTracker& DirtyNetObjectTracker;
171};
172
173}
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define UE_NET_DIRTYOBJECTTRACKER_LOG_COMPILE_VERBOSITY
Definition DirtyNetObjectTracker.h:26
void Init()
Definition LockFreeList.h:4
#define DECLARE_LOG_CATEGORY_EXTERN(CategoryName, DefaultVerbosity, CompileTimeVerbosity)
Definition LogMacros.h:361
uint16_t uint16
Definition binka_ue_file_header.h:7
uint32_t uint32
Definition binka_ue_file_header.h:6
uint32 StorageWordType
Definition NetBitArray.h:50
static constexpr uint32 WordBitCount
Definition NetBitArray.h:51
Definition NetBitArray.h:337
Definition NetBitArray.h:74
Definition DirtyNetObjectTracker.h:46
const FNetBitArrayView GetForceNetUpdateObjects() const
Definition DirtyNetObjectTracker.h:84
void UpdateDirtyNetObjects()
Definition DirtyNetObjectTracker.cpp:217
void UpdateAccumulatedDirtyList()
Definition DirtyNetObjectTracker.cpp:265
void UpdateAndLockDirtyNetObjects()
Definition DirtyNetObjectTracker.cpp:253
void LockExternalAccess()
Definition DirtyNetObjectTracker.cpp:311
~FDirtyNetObjectTracker()
Definition DirtyNetObjectTracker.cpp:24
FNetBitArrayView GetForceNetUpdateObjects()
Definition DirtyNetObjectTracker.h:83
void AllowExternalAccess()
Definition DirtyNetObjectTracker.cpp:318
void ReconcilePolledList(const FNetBitArrayView &ObjectsPolled)
Definition DirtyNetObjectTracker.cpp:333
FDirtyNetObjectTracker()
Definition DirtyNetObjectTracker.cpp:19
friend IRISCORE_API void ForceNetUpdate(uint32 ReplicationSystemId, FInternalNetRefIndex NetObjectIndex)
Definition DirtyNetObjectTracker.cpp:377
bool IsInit() const
Definition DirtyNetObjectTracker.h:55
friend IRISCORE_API void MarkNetObjectStateDirty(uint32 ReplicationSystemId, FInternalNetRefIndex NetObjectIndex)
Definition DirtyNetObjectTracker.cpp:368
void Deinit()
Definition DirtyNetObjectTracker.cpp:48
const FNetBitArrayView GetAccumulatedDirtyNetObjects() const
Definition DirtyNetObjectTracker.h:80
Definition DirtyNetObjectTracker.h:153
const FNetBitArrayView GetDirtyNetObjects() const
Definition DirtyNetObjectTracker.h:167
FDirtyObjectsAccessor(FDirtyNetObjectTracker &InDirtyNetObjectTracker)
Definition DirtyNetObjectTracker.h:155
FNetBitArrayView GetDirtyNetObjects()
Definition DirtyNetObjectTracker.h:166
~FDirtyObjectsAccessor()
Definition DirtyNetObjectTracker.h:161
Definition NetRefHandleManager.h:72
Definition NetworkVersion.cpp:28
void MarkNetObjectStateDirty(uint32 ReplicationSystemId, FInternalNetRefIndex NetObjectIndex)
Definition DirtyNetObjectTracker.cpp:368
void ForceNetUpdate(uint32 ReplicationSystemId, FInternalNetRefIndex NetObjectIndex)
Definition DirtyNetObjectTracker.cpp:377
uint32 FInternalNetRefIndex
Definition ReplicationStateStorage.h:20
FNetBitArrayView MakeNetBitArrayView(const FNetBitArrayView::StorageWordType *Storage, uint32 BitCount)
Definition NetBitArray.h:1677
Definition GlobalDirtyNetObjectTracker.h:20
Definition DirtyNetObjectTracker.h:39
const FNetRefHandleManager * NetRefHandleManager
Definition DirtyNetObjectTracker.h:40
uint32 MaxInternalNetRefIndex
Definition DirtyNetObjectTracker.h:42
uint32 ReplicationSystemId
Definition DirtyNetObjectTracker.h:41