UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
MassProcessorDependencySolver.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
6#include "MassEntityTypes.h"
9
10#define UE_API MASSENTITY_API
11
12
13class UMassProcessor;
14namespace UE::Mass
15{
16 struct FTypeManager;
17}
18
20{
21 constexpr uint32 Read = 0;
22 constexpr uint32 Write = 1;
23 constexpr uint32 MAX = 2;
24};
25
26template<typename T>
28{
31
32 T& operator[](const uint32 OpIndex)
33 {
35 return OpIndex == EMassAccessOperation::Read ? Read : Write;
36 }
37
38 const T& operator[](const uint32 OpIndex) const
39 {
41 return OpIndex == EMassAccessOperation::Read ? Read : Write;
42 }
43
45
46 bool IsEmpty() const { return Read.IsEmpty() && Write.IsEmpty(); }
47};
48
53template<>
66
85
87{
137
138private:
139 struct FResourceUsage
140 {
141 FResourceUsage(const TArray<FNode>& InAllNodes);
142
143 bool CanAccessRequirements(const FMassExecutionRequirements& TestedRequirements, const TArray<FMassArchetypeHandle>& InArchetypes) const;
144 void SubmitNode(const int32 NodeIndex, FNode& InOutNode);
145
146 private:
147 struct FResourceUsers
148 {
149 TArray<int32> Users;
150 };
151
152 struct FResourceAccess
153 {
155 };
156
157 FMassExecutionRequirements Requirements;
159 TMassExecutionAccess<FResourceAccess> ChunkFragmentsAccess;
160 TMassExecutionAccess<FResourceAccess> SharedFragmentsAccess;
161 TMassExecutionAccess<FResourceAccess> RequiredSubsystemsAccess;
162 TConstArrayView<FNode> AllNodesView;
163
164 template<typename TBitSet>
165 void HandleElementType(TMassExecutionAccess<FResourceAccess>& ElementAccess
167
168 template<typename TBitSet>
170
172 bool HasArchetypeConflict(TMassExecutionAccess<FResourceAccess> ElementAccess, const TArray<FMassArchetypeHandle>& InArchetypes) const;
173 };
174
175public:
194
197
199
201 static bool IsResultUpToDate(const FResult& InResult, TSharedPtr<FMassEntityManager> EntityManager);
202
204
205protected:
206 // note that internals are protected rather than private to support unit testing
207
215
217 void BuildDependencies();
219 void LogNode(const FNode& Node, int Indent = 0);
220
222 void GatherSubsystemInformation(const UE::Mass::FTypeManager& TypeManager);
223
225
234 const bool bGameRuntime = true;
238
241};
242
243#undef UE_API
constexpr auto MakeArrayView(OtherRangeType &&Other)
Definition ArrayView.h:873
#define check(expr)
Definition AssertionMacros.h:314
@ INDEX_NONE
Definition CoreMiscDefines.h:150
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
#define TEXT(x)
Definition Platform.h:1272
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 MASS_DO_PARALLEL
Definition MassProcessingTypes.h:14
#define UE_API
Definition MassProcessorDependencySolver.h:10
const bool
Definition NetworkReplayStreaming.h:178
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition NameTypes.h:617
Definition ArrayView.h:139
Definition Array.h:670
void Reset(SizeType NewSize=0)
Definition Array.h:2246
Definition UnrealString.h.inl:34
Definition SharedPointer.h:692
Definition SubclassOf.h:30
Definition MassProcessor.h:78
Definition MassProcessorDependencySolver.h:20
constexpr uint32 Read
Definition MassProcessorDependencySolver.h:21
constexpr uint32 Write
Definition MassProcessorDependencySolver.h:22
constexpr uint32 MAX
Definition MassProcessorDependencySolver.h:23
Definition MassArchetypeData.h:21
Definition MassEntityTypes.h:74
Definition MassProcessorDependencySolver.h:68
UE_API void CountResourcesUsed()
Definition MassProcessorDependencySolver.cpp:155
TMassExecutionAccess< FMassFragmentBitSet > Fragments
Definition MassProcessorDependencySolver.h:75
FMassTagBitSet RequiredNoneTags
Definition MassProcessorDependencySolver.h:82
FMassTagBitSet RequiredAnyTags
Definition MassProcessorDependencySolver.h:81
TMassExecutionAccess< FMassExternalSubsystemBitSet > RequiredSubsystems
Definition MassProcessorDependencySolver.h:79
UE_API int32 GetTotalBitsUsedCount()
Definition MassProcessorDependencySolver.cpp:168
UE_API bool IsEmpty() const
Definition MassProcessorDependencySolver.cpp:176
TMassExecutionAccess< FMassConstSharedFragmentBitSet > ConstSharedFragments
Definition MassProcessorDependencySolver.h:78
TMassExecutionAccess< FMassSharedFragmentBitSet > SharedFragments
Definition MassProcessorDependencySolver.h:77
TMassExecutionAccess< FMassChunkFragmentBitSet > ChunkFragments
Definition MassProcessorDependencySolver.h:76
int32 ResourcesUsedCount
Definition MassProcessorDependencySolver.h:83
FMassTagBitSet RequiredAllTags
Definition MassProcessorDependencySolver.h:80
UE_API FMassArchetypeCompositionDescriptor AsCompositionDescriptor() const
Definition MassProcessorDependencySolver.cpp:183
Definition MassProcessorDependencySolver.h:89
FMassExecutionRequirements Requirements
Definition MassProcessorDependencySolver.h:117
FName Name
Definition MassProcessorDependencySolver.h:111
int32 SequencePositionIndex
Definition MassProcessorDependencySolver.h:133
int32 MaxExecutionPriority
Definition MassProcessorDependencySolver.h:128
int32 NodeIndex
Definition MassProcessorDependencySolver.h:118
int32 TotalWaitingNodes
Definition MassProcessorDependencySolver.h:120
TArray< int32 > OriginalDependencies
Definition MassProcessorDependencySolver.h:113
TArray< FName > ExecuteBefore
Definition MassProcessorDependencySolver.h:115
TArray< FMassArchetypeHandle > ValidArchetypes
Definition MassProcessorDependencySolver.h:135
bool IncreaseWaitingNodesCountAndPriority(TArrayView< FNode > InAllNodes, const int32 IterationsLimit, TArray< int32 > &OutCycleIndices, const int32 InChildPriority=TNumericLimits< int32 >::Min())
Definition MassProcessorDependencySolver.cpp:379
TArray< int32 > SubNodeIndices
Definition MassProcessorDependencySolver.h:134
bool IncreaseWaitingNodesCount(TArrayView< FNode > InAllNodes, const int32 IterationsLimit, TArray< int32 > &OutCycleIndices)
Definition MassProcessorDependencySolver.cpp:354
TArray< FName > ExecuteAfter
Definition MassProcessorDependencySolver.h:116
TArray< int32 > TransientDependencies
Definition MassProcessorDependencySolver.h:114
bool IsGroup() const
Definition MassProcessorDependencySolver.h:94
FNode(const FName InName, UMassProcessor *InProcessor, const int32 InNodeIndex=INDEX_NONE)
Definition MassProcessorDependencySolver.h:90
void UpdateExecutionPriority(const int32 ChildExecutionPriority)
Definition MassProcessorDependencySolver.h:102
UMassProcessor * Processor
Definition MassProcessorDependencySolver.h:112
Definition MassProcessorDependencySolver.h:179
int32 MaxSequenceLength
Definition MassProcessorDependencySolver.h:182
FString DependencyGraphFileName
Definition MassProcessorDependencySolver.h:180
TArray< TSubclassOf< UMassProcessor > > PrunedProcessorClasses
Definition MassProcessorDependencySolver.h:185
uint32 ArchetypeDataVersion
Definition MassProcessorDependencySolver.h:183
TArray< TObjectPtr< UMassProcessor > > PrunedProcessors
Definition MassProcessorDependencySolver.h:181
void Reset()
Definition MassProcessorDependencySolver.h:187
Definition MassProcessorDependencySolver.h:87
const bool bGameRuntime
Definition MassProcessorDependencySolver.h:234
void Solve(TArray< FMassProcessorOrderInfo > &OutResult)
Definition MassProcessorDependencySolver.cpp:727
FString DependencyGraphFileName
Definition MassProcessorDependencySolver.h:235
TArrayView< UMassProcessor *const > Processors
Definition MassProcessorDependencySolver.h:224
MASSENTITY_API void ResolveDependencies(TArray< FMassProcessorOrderInfo > &OutResult, TSharedPtr< FMassEntityManager > EntityManager=nullptr, FResult *InOutOptionalResult=nullptr)
Definition MassProcessorDependencySolver.cpp:848
static bool IsResultUpToDate(const FResult &InResult, TSharedPtr< FMassEntityManager > EntityManager)
Definition MassProcessorDependencySolver.cpp:982
TArray< FNode > AllNodes
Definition MassProcessorDependencySolver.h:236
void LogNode(const FNode &Node, int Indent=0)
Definition MassProcessorDependencySolver.cpp:703
const bool bSingleThreadTarget
Definition MassProcessorDependencySolver.h:233
int32 CreateNodes(UMassProcessor &Processor)
Definition MassProcessorDependencySolver.cpp:502
void BuildDependencies()
Definition MassProcessorDependencySolver.cpp:589
static MASSENTITY_API void CreateSubGroupNames(FName InGroupName, TArray< FString > &SubGroupNames)
Definition MassProcessorDependencySolver.cpp:481
bool IsSolvingForSingleThread() const
Definition MassProcessorDependencySolver.h:203
bool PerformSolverStep(FResourceUsage &ResourceUsage, TArray< int32 > &InOutIndicesRemaining, TArray< int32 > &OutNodeIndices)
Definition MassProcessorDependencySolver.cpp:412
TMap< FName, int32 > NodeIndexMap
Definition MassProcessorDependencySolver.h:237
void GatherSubsystemInformation(const UE::Mass::FTypeManager &TypeManager)
Definition MassProcessorDependencySolver.cpp:1002
FMassExternalSubsystemBitSet MultiThreadedSystemsBitSet
Definition MassProcessorDependencySolver.h:240
FMassConstSharedFragmentBitSet Read
Definition MassProcessorDependencySolver.h:56
bool IsEmpty() const
Definition MassProcessorDependencySolver.h:61
TConstArrayView< FMassConstSharedFragmentBitSet > AsArrayView() const
Definition MassProcessorDependencySolver.h:57
Definition MassProcessorDependencySolver.h:28
T & operator[](const uint32 OpIndex)
Definition MassProcessorDependencySolver.h:32
T Read
Definition MassProcessorDependencySolver.h:29
const T & operator[](const uint32 OpIndex) const
Definition MassProcessorDependencySolver.h:38
T Write
Definition MassProcessorDependencySolver.h:30
bool IsEmpty() const
Definition MassProcessorDependencySolver.h:46
TConstArrayView< T > AsArrayView() const
Definition MassProcessorDependencySolver.h:44
Definition NumericLimits.h:41
Definition MassTypeManager.h:141