38 bool bPerformFullPurge =
false;
40 bool bIsSuspended =
false;
45 double IncrementalMarkPhaseTotalTime = 0.0;
48 double ReferenceProcessingTotalTime = 0.0;
51 int32 NumIterations = 0;
54 int32 NumRechabilityIterationsToSkip = 0;
88 if (IterationTimeLimit > 0.0)
107 return NumIterations;
154template <
typename PayloadType>
169template <
typename PayloadType>
195template <
typename PayloadType,
typename PayloadOps = TDefaultPayloadOps<PayloadType>>
205 return ThreadIterators;
210 return ThreadIterators.
Num() > 0;
231 for (
int32 ThreadIndex = 0; ThreadIndex < NumThreads; ++ThreadIndex)
233 FIterator& Iterator = ThreadIterators[ThreadIndex];
249 for (
FIterator& Iterator : ThreadIterators)
254 ThreadIterators.
Reset();
260 return ThreadIterators.
Num();
266 for (
const FIterator& ThreadState : ThreadIterators)
268 NumScanned += ThreadState.Index - ThreadState.StartIndex;
276 for (
const FIterator& ThreadState : ThreadIterators)
278 NumGathered += PayloadOps::Num(ThreadState.Payload);
286 bool bIsPending =
false;
292 const int32 TimeLimitPollInterval = 0;
293 int32 TimeLimitTimePollCounter = 0;
294 const double StartTime = 0.0;
295 const double TimeLimit = 0.0;
296 std::atomic<int32>& TimeLimitFlag;
312 const bool bPollTimeLimit = ((TimeLimitTimePollCounter++) % TimeLimitPollInterval == 0);
318 TimeLimitFlag.store(1, std::memory_order_relaxed);
325 return !!TimeLimitFlag.load(std::memory_order_relaxed);
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define ENUM_CLASS_FLAGS(Enum)
Definition EnumClassFlags.h:6
EObjectFlags
Definition ObjectMacros.h:552
@ RF_NoFlags
No flags, used to avoid a cast.
Definition ObjectMacros.h:555
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
static CORE_API FTaskGraphInterface & Get()
Definition TaskGraph.cpp:1794
UE_REWRITE SizeType Num() const
Definition Array.h:1144
void Reset(SizeType NewSize=0)
Definition Array.h:2246
SizeType AddDefaulted()
Definition Array.h:2795
Definition ContainerAllocationPolicies.h:894
Definition ReachabilityAnalysisState.h:22
bool IsSuspended() const
Definition ReachabilityAnalysisState.h:74
FORCEINLINE int32 GetNumWorkers() const
Definition ReachabilityAnalysisState.h:95
FORCEINLINE FWorkerContext ** GetContextArray()
Definition ReachabilityAnalysisState.h:100
void UpdateStats(const UE::GC::FProcessorStats &InStats)
Definition ReachabilityAnalysisState.cpp:29
void PerformReachabilityAnalysis()
Definition GarbageCollection.cpp:5981
FORCEINLINE bool IsTimeLimitExceeded() const
Definition ReachabilityAnalysisState.h:86
void Init()
Definition ReachabilityAnalysisState.cpp:17
void FinishIteration()
Definition ReachabilityAnalysisState.cpp:39
void CollectGarbage(EObjectFlags KeepFlags, bool bFullPurge)
Definition GarbageCollection.cpp:5816
FORCEINLINE int32 GetNumIterations() const
Definition ReachabilityAnalysisState.h:105
FReachabilityAnalysisState()=default
static constexpr int32 MaxWorkers
Definition ReachabilityAnalysisState.h:27
const UE::GC::FProcessorStats & GetStats() const
Definition ReachabilityAnalysisState.h:69
bool CheckIfAnyContextIsSuspended()
Definition ReachabilityAnalysisState.cpp:57
void SetupWorkers(int32 InNumWorkers)
Definition ReachabilityAnalysisState.cpp:22
void ResetWorkers()
Definition ReachabilityAnalysisState.cpp:34
void PerformReachabilityAnalysisAndConditionallyPurgeGarbage(bool bReachabilityUsingTimeLimit)
Definition GarbageCollection.cpp:5840
void StartTimer(double InTimeLimit)
Definition ReachabilityAnalysisState.h:63
Definition ReachabilityAnalysisState.h:291
FTimeSlicer(int32 InPollInterval, int32 InitialCounter, double InStartTime, double InTimeLimit, std::atomic< int32 > &InTimeLimitFlag)
Definition ReachabilityAnalysisState.h:299
FORCEINLINE bool IsTimeLimitExceeded()
Definition ReachabilityAnalysisState.h:308
Definition ReachabilityAnalysisState.h:197
FORCENOINLINE void Start(const EGatherOptions Options, const int32 TotalNumObjects, const int32 FirstIndex=0, const int32 DesiredNumThreads=0)
Definition ReachabilityAnalysisState.h:223
FORCEINLINE bool IsPending() const
Definition ReachabilityAnalysisState.h:213
FORCEINLINE bool IsSuspended() const
Definition ReachabilityAnalysisState.h:208
TGatherIterator< PayloadType > FIterator
Definition ReachabilityAnalysisState.h:200
FORCEINLINE FThreadIterators & GetThreadIterators()
Definition ReachabilityAnalysisState.h:203
int32 NumScanned() const
Definition ReachabilityAnalysisState.h:263
TArray< FIterator, TInlineAllocator< 32 > > FThreadIterators
Definition ReachabilityAnalysisState.h:201
FORCEINLINE int32 NumWorkerThreads() const
Definition ReachabilityAnalysisState.h:258
FORCENOINLINE void Finish(PayloadType &OutGatheredObjects)
Definition ReachabilityAnalysisState.h:241
int32 NumGathered() const
Definition ReachabilityAnalysisState.h:273
void Init()
Definition ReachabilityAnalysisState.h:218
Definition GarbageCollection.cpp:624
UE::GC::Private::FStats GetGarbageCollectionStats()
Definition GarbageCollection.cpp:6057
Definition GCObjectReferencer.cpp:27
int32 GetNumThreadsForGather(const EGatherOptions Options, const int32 NumObjects)
Definition ReachabilityAnalysisState.h:141
EGatherOptions
Definition ReachabilityAnalysisState.h:135
U16 Index
Definition radfft.cpp:71
static double Seconds()
Definition AndroidPlatformTime.h:20
Definition FastReferenceCollector.h:245
Definition FastReferenceCollector.h:334
Definition ReachabilityAnalysis.h:81
Definition ReachabilityAnalysisState.h:171
static int32 Num(const PayloadType &InPayload)
Definition ReachabilityAnalysisState.h:172
static void Append(const PayloadType &InSource, PayloadType &OutDest)
Definition ReachabilityAnalysisState.h:188
static bool Reserve(const TArray< TGatherIterator< PayloadType >, TInlineAllocator< 32 > > &ThreadIterators, PayloadType &OutPayload)
Definition ReachabilityAnalysisState.h:177
Definition ReachabilityAnalysisState.h:156
int32 StartIndex
Definition ReachabilityAnalysisState.h:158
int32 Index
Definition ReachabilityAnalysisState.h:160
int32 Num
Definition ReachabilityAnalysisState.h:162
PayloadType Payload
Definition ReachabilityAnalysisState.h:166
int32 LastIndex
Definition ReachabilityAnalysisState.h:164