UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
ReplicationPrioritization.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreTypes.h"
6#include "Containers/Array.h"
11
14namespace UE::Net
15{
16 class FNetBitArrayView;
17 namespace Private
18 {
19 class FNetRefHandleManager;
20 class FReplicationConnections;
21
23 }
24
25 // For testing
27}
28
29namespace UE::Net::Private
30{
31
39
41{
42public:
44
46 void Deinit();
47
50
51 void Prioritize(const FNetBitArrayView& ConnectionsToSend, const FNetBitArrayView& DirtyObjectsThisFrame);
52
53 void SetStaticPriority(uint32 ObjectIndex, float Prio);
54 bool SetPrioritizer(uint32 ObjectIndex, FNetObjectPrioritizerHandle Prioritizer);
55 FNetObjectPrioritizerHandle GetPrioritizerHandle(const FName PrioritizerName) const;
56 UNetObjectPrioritizer* GetPrioritizer(const FName PrioritizerName) const;
57
58 void AddConnection(uint32 ConnectionId);
59 void RemoveConnection(uint32 ConnectionId);
60
62 {
63 return GetPrioritiesForConnection(ConnectionId)[InternalIndex];
64 }
65
66private:
67 class FPrioritizerBatchHelper;
68 class FUpdateDirtyObjectsBatchHelper;
69
70 void SetNetObjectListsSize(FInternalNetRefIndex MaxInternalIndex);
71 void ResizePrioritiesList(TArray<float>& OutPriorities, FInternalNetRefIndex MaxInternalIndex);
72
73 void UpdatePrioritiesForNewAndDeletedObjects();
74 void PrioritizeForConnection(uint32 ConnId, FPrioritizerBatchHelper& BatchHelper, FNetBitArrayView Objects);
75 void SetHighPriorityOnViewTargets(const TArrayView<float>& Priorities, const FReplicationView& View);
76 void NotifyPrioritizersOfDirtyObjects(const FNetBitArrayView& DirtyObjectsThisFrame);
77 void BatchNotifyPrioritizersOfDirtyObjects(FUpdateDirtyObjectsBatchHelper& BatchHelper, uint32* ObjectIndices, uint32 ObjectCount);
78 void InitPrioritizers();
79
80private:
81 friend UE::Net::FTestNetObjectPrioritizerFixture;
82
83 // For testing
84 TConstArrayView<float> GetPrioritiesForConnection(uint32 ConnectionId) const;
85
86 struct FPrioritizerInfo
87 {
89 FName Name;
90 uint32 ObjectCount;
91 };
92
93 struct FPerConnectionInfo
94 {
95 FPerConnectionInfo() : NextObjectIndexToProcess(0), IsValid(0) {}
96
97 TArray<float> Priorities;
98 uint32 NextObjectIndexToProcess;
99 uint32 IsValid : 1;
100 };
101
102 static constexpr float DefaultPriority = 1.0f;
103 static constexpr float ViewTargetHighPriority = 1.0E7f;
104
105 TObjectPtr<const UReplicationSystem> ReplicationSystem = nullptr;
106 FReplicationConnections* Connections = nullptr;
107 const FNetRefHandleManager* NetRefHandleManager = nullptr;
108
110
111 TArray<FNetObjectPrioritizationInfo> NetObjectPrioritizationInfos;
112 TArray<uint8> ObjectIndexToPrioritizer;
113 TArray<FPrioritizerInfo> PrioritizerInfos;
114 TArray<FPerConnectionInfo> ConnectionInfos;
115 TArray<float> DefaultPriorities;
116 FNetBitArray ObjectsWithNewStaticPriority;
117
118 FInternalNetRefIndex MaxInternalNetRefIndex = 0;
119
120 uint32 ConnectionCount = 0;
121 uint32 HasNewObjectsWithStaticPriority : 1;
122};
123
124inline TConstArrayView<float> FReplicationPrioritization::GetPrioritiesForConnection(uint32 ConnectionId) const
125{
126 return MakeArrayView(ConnectionInfos[ConnectionId].Priorities);
127}
128
129}
constexpr auto MakeArrayView(OtherRangeType &&Other)
Definition ArrayView.h:873
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
int32 InternalIndex
Definition VulkanMemory.cpp:4036
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition NameTypes.h:617
Definition ArrayView.h:139
Definition Array.h:670
Definition StrongObjectPtrTemplates.h:26
Definition NetBitArray.h:337
Definition NetRefHandleManager.h:72
Definition ReplicationConnections.h:32
Definition ReplicationPrioritization.h:41
bool SetPrioritizer(uint32 ObjectIndex, FNetObjectPrioritizerHandle Prioritizer)
Definition ReplicationPrioritization.cpp:414
void AddConnection(uint32 ConnectionId)
Definition ReplicationPrioritization.cpp:617
float GetObjectPriorityForConnection(uint32 ConnectionId, FInternalNetRefIndex InternalIndex) const
Definition ReplicationPrioritization.h:61
FReplicationPrioritization()
Definition ReplicationPrioritization.cpp:285
UNetObjectPrioritizer * GetPrioritizer(const FName PrioritizerName) const
Definition ReplicationPrioritization.cpp:496
FNetObjectPrioritizerHandle GetPrioritizerHandle(const FName PrioritizerName) const
Definition ReplicationPrioritization.cpp:474
void OnMaxInternalNetRefIndexIncreased(FInternalNetRefIndex NewMaxInternalIndex)
Definition ReplicationPrioritization.cpp:367
void Deinit()
Definition ReplicationPrioritization.cpp:309
void Prioritize(const FNetBitArrayView &ConnectionsToSend, const FNetBitArrayView &DirtyObjectsThisFrame)
Definition ReplicationPrioritization.cpp:545
void RemoveConnection(uint32 ConnectionId)
Definition ReplicationPrioritization.cpp:636
void SetStaticPriority(uint32 ObjectIndex, float Prio)
Definition ReplicationPrioritization.cpp:387
Definition NetObjectPrioritizerDefinitions.h:44
Definition NetObjectPrioritizer.h:158
Definition ReplicationSystem.h:70
Definition OverriddenPropertySet.cpp:45
Definition NetworkVersion.cpp:28
uint32 FInternalNetRefIndex
Definition ReplicationStateStorage.h:20
Definition NetworkVersion.cpp:28
uint32 FNetObjectPrioritizerHandle
Definition ObjectReplicationBridge.h:34
Definition ObjectPtr.h:488
Definition ReplicationView.h:19
Definition ReplicationPrioritization.h:33
FReplicationConnections * Connections
Definition ReplicationPrioritization.h:36
const FNetRefHandleManager * NetRefHandleManager
Definition ReplicationPrioritization.h:35
TObjectPtr< const UReplicationSystem > ReplicationSystem
Definition ReplicationPrioritization.h:34
FInternalNetRefIndex MaxInternalNetRefIndex
Definition ReplicationPrioritization.h:37