21#if WITH_VERSE_VM || defined(__INTELLISENSE__)
38class FWorkCoordinator;
56UE_DEPRECATED(5.4,
"IsPendingKill should no longer be used. Use IsEliminatingGarbage.")
79#if !WITH_VERSE_BPVM || defined(__INTELLISENSE__)
81namespace Verse = ::Verse;
84struct FStructArrayBlock;
86static constexpr uint32 ObjectLookahead = 16;
98 , PrefetchedSchema(Objects.
Num() ? &It[1]->GetClass()->ReferenceSchema.Get() : nullptr)
139class FWorkstealingQueue;
149 void Init() { AllocateWipBlock(); }
153 template<EGCOptions Options>
161 PushFullBlockAsync();
175 return PopWipBlock();
181 template<EGCOptions Options>
184 return IsParallel(Options) ? PopFullBlockAsync() : PopFullBlockSync();
189 return StealAsyncBlock();
196 return PartialNum() == 0 &&
SyncQueue ==
nullptr;
204 return PartialNum() != 0;
217 void AllocateWipBlock();
304#if !UE_BUILD_SHIPPING
324#if !UE_BUILD_SHIPPING
336 template <
typename ProcessorType,
typename CollectorType>
341 UObject* ReferencingObject =
nullptr;
343#if WITH_VERSE_VM || defined(__INTELLISENSE__)
357#if !UE_BUILD_SHIPPING
365 bool bIsSuspended =
false;
366 bool bDidWork =
false;
379 SetInitialObjectsPrepadded(Objects);
389#if WITH_VERSE_VM || defined(__INTELLISENSE__)
407 void AllocateWorkerIndex();
408 void FreeWorkerIndex();
415#if !UE_BUILD_SHIPPING
421#if !UE_BUILD_SHIPPING
426#if !UE_BUILD_SHIPPING
432#if !UE_BUILD_SHIPPING
453 , WordOffset(In.WordOffset)
455 check(Type < EMemberType::Count);
508template<
class DispatcherType>
511template<
class DispatcherType>
515 if constexpr (DispatcherType::bBatching)
529template<
class DispatcherType,
class ArrayType>
532 typename DispatcherType::SchemaStackScopeType SchemaStack(Dispatcher.Context,
StructSchema);
536template<
class DispatcherType>
540 if constexpr (DispatcherType::bBatching)
548 for (
int32 Idx = 0, MaxIdx =
Set.GetMaxIndex(); Idx < MaxIdx; ++Idx, It += Stride)
550 if (
Set.IsValidIndex(Idx))
552 typename DispatcherType::SchemaStackScopeType SchemaStack(Dispatcher.Context,
StructSchema);
559template<
class DispatcherType>
575template<
class DispatcherType>
584template<
class DispatcherType>
589 bool bIsSet = *(
bool*)(
Instance + ValueSize);
590 typename DispatcherType::SchemaStackScopeType SchemaStack(Dispatcher.Context,
StructSchema);
594template<
class DispatcherType>
597 Value.GetType().MarkReachable(Dispatcher.Collector);
600 Value.GetType().MarkValueReachable(
Value.GetDataPointer(), Dispatcher.Collector);
604#if WITH_EDITORONLY_DATA
608template<
class DispatcherType>
618#if WITH_EDITORONLY_DATA
631template<
class DispatcherType>
637template<
class DispatcherType>
640 if constexpr (DispatcherType::bBatching && DispatcherType::bParallel)
663template<
class DispatcherType>
669template <
typename ObjectType>
674#if UE_WITH_REMOTE_OBJECT_HANDLE
684template<
class DispatcherType,
typename ObjectType>
702 case EMemberType::Reference: Dispatcher.HandleKillableReference(*(
UObject**)MemberPtr,
FMemberId(
DebugIdx), Origin);
724 case EMemberType::Jump:
InstanceCursor += (Member.WordOffset + 1) * FMemberPacked::OffsetRange;
726 case EMemberType::MemberARO:
CallARO(Dispatcher, MemberPtr, *++
WordIt);
732 case EMemberType::Stop:
734#if WITH_VERSE_VM || defined(__INTELLISENSE__)
735 case EMemberType::VerseValue: Dispatcher.HandleVerseValue(*(Verse::VValue*)MemberPtr,
FMemberId(
DebugIdx), Origin);
740 case EMemberType::Count:
750template<
class DispatcherType>
753 static_assert(!DispatcherType::bBatching);
761#if WITH_VERSE_VM || defined(__INTELLISENSE__)
763template <
typename T,
typename =
void>
767using HandleTokenStreamVerseCellReference_t =
decltype(std::declval<T>().HandleTokenStreamVerseCellReference(std::declval<FWorkerContext&>(), std::declval<UObject*>(), std::declval<Verse::VCell*>(), std::declval<FMemberId>(), std::declval<EOrigin>()));
774template<
class ProcessorType>
777 static constexpr bool bBatching =
false;
778 static constexpr bool bParallel =
IsParallel(ProcessorType::Options);
791 Context.Stats.AddReferences(1);
796 HandleReferenceDirectly(
Context.GetReferencingObject(),
Object, MemberId, Origin,
true);
801 HandleReferenceDirectly(
Context.GetReferencingObject(),
Object, MemberId, Origin,
false);
804 template<
class ArrayType>
809 HandleReferenceDirectly(
Context.GetReferencingObject(),
Object, MemberId, Origin,
true);
815 HandleKillableReferences(
Array, MemberId, Origin);
820 HandleKillableReferences(ToView(
Array), MemberId, Origin);
823#if WITH_VERSE_VM || defined(__INTELLISENSE__)
826 if constexpr (HasHandleTokenStreamVerseCellReference<ProcessorType>::value)
828 Processor.HandleTokenStreamVerseCellReference(
Context, ReferencingObject,
Cell, MemberId, Origin);
830 Context.Stats.AddVerseCells(1);
835 if (Verse::VCell*
Cell =
Value.ExtractCell())
841 HandleImmutableReference(
Object, MemberId, Origin);
852 for (Verse::VValue
Value : Values)
865 Context.SchemaStack->SetMemberId(Member);
870template<
class CollectorType,
class ProcessorType>
876template<
class CollectorType,
class ProcessorType,
class =
void >
880 using Type =
typename std::remove_reference_t<RetType>;
904template <
typename ProcessorType,
typename CollectorType>
926 Dispatcher.HandleKillableReference(*
InitialReference, EMemberlessId::InitialReference, EOrigin::Other);
929#if WITH_VERSE_VM || defined(__INTELLISENSE__)
948 FlushWork(Dispatcher);
949 Dispatcher.Suspend();
954 int32 BlockSize = FWorkBlock::ObjectCapacity;
959 if constexpr (bIsParallel)
965 FlushWork(Dispatcher);
969 else if (bIsParallel)
973 case ELoot::Nothing:
break;
974 case ELoot::Block:
break;
994 static constexpr EGCOptions Options = ProcessorType::Options;
995 static constexpr bool bIsParallel =
IsParallel(Options);
1003 UObject* CurrentObject = It.GetCurrentObject();
1009 Class->AssembleReferenceTokenStream();
1012 FSchemaView Schema =
Class->ReferenceSchema.Get();
1013 Dispatcher.Context.ReferencingObject = CurrentObject;
1016 Dispatcher.HandleImmutableReference(
Class, EMemberlessId::Class, EOrigin::Other);
1017 Dispatcher.HandleImmutableReference(
Outer, EMemberlessId::Outer, EOrigin::Other);
1021 Dispatcher.HandleImmutableReference(
Package, EMemberlessId::ExternalPackage, EOrigin::Other);
1023 if (!Schema.IsEmpty())
1025 typename DispatcherType::SchemaStackScopeType SchemaStack(Dispatcher.Context, Schema);
1026 Processor.BeginTimingObject(CurrentObject);
1027 Private::VisitMembers(Dispatcher, Schema, CurrentObject);
1028 Processor.UpdateDetailedStats(CurrentObject);
1033#if WITH_VERSE_VM || defined(__INTELLISENSE__)
1041 FSchemaView Schema =
VerseStruct->ReferenceSchema.Get();
1042 check(!Schema.IsEmpty());
1043 typename DispatcherType::SchemaStackScopeType SchemaStack(Dispatcher.Context, Schema);
1050 template <
typename T,
typename =
void>
1051 struct HasFlushWork : std::false_type {};
1053 template <
typename T>
1054 struct HasFlushWork <T, std::
void_t<decltype(std::declval<T>().FlushWork())>> : std::true_type {};
1058 if constexpr (DispatcherType::bBatching)
1060 if (Dispatcher.FlushToStructBlocks())
1062 ProcessStructs(Dispatcher);
1065 Dispatcher.FlushQueuedReferences();
1068 if constexpr (HasFlushWork<DispatcherType>::value)
1070 Dispatcher.FlushWork();
1074 FORCENOINLINE void ProcessStructs(DispatcherType& Dispatcher);
1080template <
typename ProcessorType>
1095 if (!ReferencingObject)
1097 ReferencingObject =
Context.GetReferencingObject();
1099 Processor.HandleTokenStreamObjectReference(
Context,
const_cast<UObject*
>(ReferencingObject),
Object, EMemberlessId::Collector, EOrigin::Other,
false);
1103 if (!ReferencingObject)
1105 ReferencingObject =
Context.GetReferencingObject();
1107 for (
int32 ObjectIndex = 0; ObjectIndex <
ObjectNum; ++ObjectIndex)
1110 Processor.HandleTokenStreamObjectReference(
Context,
const_cast<UObject*
>(ReferencingObject),
Object, EMemberlessId::Collector, EOrigin::Other,
false);
1114#if WITH_VERSE_VM || defined(__INTELLISENSE__)
1117 if (!ReferencingObject)
1119 ReferencingObject =
Context.GetReferencingObject();
1121 if constexpr (HasHandleTokenStreamVerseCellReference<ProcessorType>::value)
1123 Processor.HandleTokenStreamVerseCellReference(
Context,
const_cast<UObject*
>(ReferencingObject),
Cell, EMemberlessId::Collector, EOrigin::Other);
1166template<
class CollectorType,
class ProcessorType>
1182template<
class ProcessorType>
constexpr auto MakeArrayView(OtherRangeType &&Other)
Definition ArrayView.h:873
#define check(expr)
Definition AssertionMacros.h:314
@ NoInit
Definition CoreMiscDefines.h:158
@ INDEX_NONE
Definition CoreMiscDefines.h:150
#define FORCEINLINE_DEBUGGABLE
Definition CoreMiscDefines.h:74
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
FString GetPathNameSafe(const FField *InField, const UObject *StopOuter)
Definition Field.cpp:1150
FString GetNameSafe(const FField *InField)
Definition Field.h:1230
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
constexpr bool EnumHasAllFlags(Enum Flags, Enum Contains)
Definition EnumClassFlags.h:28
#define ENUM_CLASS_FLAGS(Enum)
Definition EnumClassFlags.h:6
constexpr bool IsParallel(EGCOptions Options)
Definition FastReferenceCollector.h:53
constexpr bool IsEliminatingGarbage(EGCOptions Options)
Definition FastReferenceCollector.h:55
constexpr bool IsPendingKill(EGCOptions Options)
Definition FastReferenceCollector.h:57
EGCOptions
Definition FastReferenceCollector.h:43
@ IncrementalReachability
#define UE_GC_DEBUGNAMES
Definition GarbageCollectionSchema.h:18
int32 GetNumCollectReferenceWorkers()
Definition GarbageCollection.cpp:7324
#define UE_LOG(CategoryName, Verbosity, Format,...)
Definition LogMacros.h:270
bool IsObjectHandleResolved_ForGC(FObjectHandle Handle)
Definition ObjectHandle.h:232
@ CLASS_TokenStreamAssembled
Definition ObjectMacros.h:256
@ AutoRTFMConstructionAborted
auto GetNum(const TStringConversion< Converter, DefaultConversionSize > &Conversion) -> decltype(Conversion.Length())
Definition StringConv.h:808
FUObjectArray GUObjectArray
Definition UObjectHash.cpp:55
static COREUOBJECT_API UGCObjectReferencer * GGCObjectReferencer
Definition GCObject.h:134
Definition FastReferenceCollector.h:68
virtual ~FGarbageCollectionTracer()
Definition FastReferenceCollector.h:70
virtual void PerformReachabilityAnalysisOnObjects(UE::GC::FWorkerContext *Context, EGCOptions Options)=0
Definition UnrealType.h:174
Definition UObjectGlobals.h:2492
Definition ScriptArray.h:328
Definition FastReferenceCollector.h:1138
void UpdateDetailedStats(UObject *CurrentObject)
Definition FastReferenceCollector.h:1150
void LogDetailedStatsSummary()
Definition FastReferenceCollector.h:1151
FORCEINLINE bool IsTimeLimitExceeded() const
Definition FastReferenceCollector.h:1153
void BeginTimingObject(UObject *CurrentObject)
Definition FastReferenceCollector.h:1149
FUObjectItem * ObjectToObjectItem(const UObjectBase *Object)
Definition UObjectArray.h:1117
Definition ArrayView.h:139
UE_NODEBUG UE_FORCEINLINE_HINT SIZE_T GetAllocatedSize(void) const
Definition Array.h:1059
Definition UnrealString.h.inl:34
Definition ScriptArray.h:21
FORCEINLINE int32 Num() const
Definition ScriptArray.h:40
FORCEINLINE void * GetData()
Definition ScriptArray.h:24
Definition ScriptSparseSet.h:26
UE::GC::FSchemaOwner ReferenceSchema
Definition Class.h:4022
Definition GarbageCollectionSchema.h:157
Definition FastReferenceCollector.h:92
FPrefetchingObjectIterator(TConstArrayView< UObject * > Objects)
Definition FastReferenceCollector.h:95
UObject * GetCurrentObject()
Definition FastReferenceCollector.h:114
bool HasMore() const
Definition FastReferenceCollector.h:113
FORCEINLINE_DEBUGGABLE void Advance()
Definition FastReferenceCollector.h:101
Definition GarbageCollectionSchema.h:62
const FSchemaView & Get() const
Definition GarbageCollection.h:81
Definition GarbageCollectionSchema.h:115
const FMemberWord * GetWords() const
Definition GarbageCollectionSchema.h:130
bool IsEmpty() const
Definition GarbageCollectionSchema.h:132
EOrigin GetOrigin() const
Definition GarbageCollectionSchema.h:131
Definition GarbageCollection.cpp:2653
Definition FastReferenceCollector.h:143
FORCEINLINE_DEBUGGABLE void Add(UObject *Object)
Definition FastReferenceCollector.h:154
FWorkstealingQueue * AsyncQueue
Definition FastReferenceCollector.h:213
void SetWorkerIndex(int32 Idx)
Definition FastReferenceCollector.h:199
COREUOBJECT_API void FreeOwningBlock(UObject *const *BlockObjects)
Definition GarbageCollection.cpp:2367
void ResetAsyncQueue()
Definition GarbageCollection.cpp:2386
UE_NONCOPYABLE(FWorkBlockifier)
void Init()
Definition FastReferenceCollector.h:149
FORCEINLINE_DEBUGGABLE FWorkBlock * PopPartialBlock(int32 &OutNum)
Definition FastReferenceCollector.h:170
COREUOBJECT_API ~FWorkBlockifier()
Definition GarbageCollection.cpp:2379
FORCEINLINE FWorkBlock * StealFullBlock() const
Definition FastReferenceCollector.h:187
FORCEINLINE bool IsUnused() const
Definition FastReferenceCollector.h:194
bool HasWork() const
Definition FastReferenceCollector.h:202
int32 GetWorkerIndex() const
Definition FastReferenceCollector.h:200
FORCEINLINE FWorkBlock * PopFullBlock()
Definition FastReferenceCollector.h:182
FWorkBlockifier()=default
void SetAsyncQueue(FWorkstealingQueue &Queue)
Definition FastReferenceCollector.h:150
FWorkBlock * SyncQueue
Definition FastReferenceCollector.h:212
UE_BUILD_SHIPPING.
Definition GarbageCollection.cpp:6964
Definition GarbageCollection.cpp:2273
Definition FastReferenceCollector.h:1082
virtual bool IsIgnoringArchetypeRef() const override
Definition FastReferenceCollector.h:1128
virtual bool IsIgnoringTransient() const override
Definition FastReferenceCollector.h:1129
ProcessorType & Processor
Definition FastReferenceCollector.h:1084
TDefaultCollector(ProcessorType &InProcessor, UE::GC::FWorkerContext &InContext)
Definition FastReferenceCollector.h:1088
UE::GC::FWorkerContext & Context
Definition FastReferenceCollector.h:1085
virtual void HandleObjectReference(UObject *&Object, const UObject *ReferencingObject, const FProperty *ReferencingProperty) override
Definition FastReferenceCollector.h:1093
virtual void HandleObjectReferences(UObject **InObjects, const int32 ObjectNum, const UObject *ReferencingObject, const FProperty *InReferencingProperty) override
Definition FastReferenceCollector.h:1101
Definition FastReferenceCollector.h:906
void ProcessObjectArray(FWorkerContext &Context)
Definition FastReferenceCollector.h:910
TFastReferenceCollector(ProcessorType &InProcessor)
Definition FastReferenceCollector.h:908
FORCEINLINE UObject * GetOuter() const
Definition UObjectBase.h:223
static void PrefetchOuter(UObject *Object)
Definition UObjectBase.h:357
static void PrefetchClass(UObject *Object)
Definition UObjectBase.h:356
COREUOBJECT_API UPackage * GetExternalPackageInternal() const
Definition UObjectBase.cpp:327
FORCEINLINE UClass * GetClass() const
Definition UObjectBase.h:217
Definition VVMVerseStruct.h:33
Definition OverriddenPropertySet.cpp:45
FORCEINLINE_DEBUGGABLE void VisitMembers(DispatcherType &Dispatcher, FSchemaView Schema, ObjectType *Instance)
Definition FastReferenceCollector.h:685
FORCEINLINE FStridedReferenceIterator begin(FStridedReferenceView View)
Definition FastReferenceCollector.h:490
FORCEINLINE_DEBUGGABLE void VisitOptional(DispatcherType &Dispatcher, FSchemaView StructSchema, uint8 *Instance)
Definition FastReferenceCollector.h:585
FORCEINLINE FStridedReferenceIterator end(FStridedReferenceView View)
Definition FastReferenceCollector.h:491
FORCENOINLINE void VisitNestedStructMembers(DispatcherType &Dispatcher, FSchemaView Schema, uint8 *Instance)
Definition FastReferenceCollector.h:751
FORCEINLINE_DEBUGGABLE void VisitStructSet(DispatcherType &Dispatcher, FSchemaView StructSchema, FScriptSet &Set)
Definition FastReferenceCollector.h:537
FORCEINLINE_DEBUGGABLE void CallSlowARO(DispatcherType &Dispatcher, uint32 SlowAROIdx, UObject *Instance, uint32 MemberIdx)
Definition FastReferenceCollector.h:638
FORCEINLINE_DEBUGGABLE void VisitFieldPath(DispatcherType &Dispatcher, FFieldPath &FieldPath, EOrigin Origin, uint32 MemberIdx)
Definition FastReferenceCollector.h:560
FORCEINLINE_DEBUGGABLE void VisitDynamicallyTypedValue(DispatcherType &Dispatcher, UE::FDynamicallyTypedValue &Value)
Definition FastReferenceCollector.h:595
FORCEINLINE_DEBUGGABLE void VisitFieldPathArray(DispatcherType &Dispatcher, TArray< FFieldPath > &FieldPaths, EOrigin Origin, uint32 MemberIdx)
Definition FastReferenceCollector.h:576
FORCEINLINE FStridedReferenceView ToView(FStridedReferenceArray In)
Definition FastReferenceCollector.h:493
FORCEINLINE EOrigin GetSchemaOrigin(FSchemaView Schema, ObjectType *Instance)
Definition FastReferenceCollector.h:670
FORCEINLINE_DEBUGGABLE void VisitStructs(DispatcherType &Dispatcher, FSchemaView StructSchema, uint8 *It, const int32 Num)
Definition FastReferenceCollector.h:512
FORCEINLINE_DEBUGGABLE void VisitStructArray(DispatcherType &Dispatcher, FSchemaView StructSchema, ArrayType &Array)
Definition FastReferenceCollector.h:530
FORCEINLINE uint8 * GetSetData(FScriptSet &Set)
Definition FastReferenceCollector.h:498
FORCEINLINE_DEBUGGABLE void CallARO(DispatcherType &Dispatcher, UObject *Instance, FMemberWord Word)
Definition FastReferenceCollector.h:609
Definition GCObjectReferencer.cpp:27
bool GIsIncrementalReachabilityPending
Definition GarbageCollection.cpp:620
ELoot
Definition FastReferenceCollector.h:885
ELoot StealWork(FWorkerContext &Context, FReferenceCollector &Collector, FWorkBlock *&OutBlock, EGCOptions Options)
Definition GarbageCollection.cpp:7100
EMemberlessId
Definition GarbageCollectionSchema.h:145
EOrigin
Definition GarbageCollectionSchema.h:53
void SuspendWork(FWorkerContext &Context)
Definition GarbageCollection.cpp:7091
void PadObjectArray(TArray< UObject * > &Objects)
Definition GarbageCollection.cpp:2106
constexpr EGCOptions DefaultOptions
Definition FastReferenceCollector.h:1132
EMemberType
Definition GarbageCollectionSchema.h:25
void ProcessAsync(void(*ProcessSync)(void *, FWorkerContext &), void *Processor, FWorkerContext &InContext)
Definition GarbageCollection.cpp:7238
TDirectDispatcher< ProcessorType > GetDispatcher(CollectorType &Collector, ProcessorType &Processor, FWorkerContext &Context)
Definition FastReferenceCollector.h:871
Definition FieldPath.h:36
Definition FastReferenceCollector.h:61
static FORCEINLINE void ClearCachedField(FFieldPath &Path)
Definition FastReferenceCollector.h:63
static FORCEINLINE FUObjectItem * GetResolvedOwner(FFieldPath &Path)
Definition FastReferenceCollector.h:62
Definition ScriptSparseSet.h:13
Definition UObjectArray.h:50
UE_FORCEINLINE_HINT bool HasAnyFlags(EInternalObjectFlags InFlags) const
Definition UObjectArray.h:309
Definition UnrealTemplate.h:341
Definition DynamicallyTypedValue.h:72
Definition FastReferenceCollector.h:439
FDebugSchemaStackNoOpScope(FWorkerContext &InContext, FSchemaView Schema)
Definition FastReferenceCollector.h:440
Definition FastReferenceCollector.h:303
FSchemaView Schema
Definition FastReferenceCollector.h:306
FORCEINLINE void SetMemberId(FMemberId MemberId)
Definition FastReferenceCollector.h:322
FDebugSchemaStackNode * Prev
Definition FastReferenceCollector.h:307
COREUOBJECT_API FString ToString() const
Definition GarbageCollection.cpp:3732
FMemberId Member
Definition FastReferenceCollector.h:305
FDebugSchemaStackNode()
Definition FastReferenceCollector.h:309
FDebugSchemaStackNode(FSchemaView InSchema, FDebugSchemaStackNode *PrevNode)
Definition FastReferenceCollector.h:314
Definition FastReferenceCollector.h:414
~FDebugSchemaStackScope()
Definition FastReferenceCollector.h:430
FDebugSchemaStackScope(FWorkerContext &InContext, FSchemaView Schema)
Definition FastReferenceCollector.h:420
FDebugSchemaStackNode Node
Definition FastReferenceCollector.h:417
FWorkerContext & Context
Definition FastReferenceCollector.h:416
Definition GarbageCollectionSchema.h:181
Definition GarbageCollectionSchema.h:195
Definition FastReferenceCollector.h:245
FORCEINLINE void AddReferences(uint32 Num)
Definition FastReferenceCollector.h:261
bool bFoundGarbageRef
Definition FastReferenceCollector.h:259
uint32 NumVerseCells
Definition FastReferenceCollector.h:258
uint32 NumObjects
Definition FastReferenceCollector.h:256
FORCEINLINE void AddVerseCells(uint32 Num)
Definition FastReferenceCollector.h:262
uint32 NumReferences
Definition FastReferenceCollector.h:257
FORCEINLINE void AddObjects(uint32 Num)
Definition FastReferenceCollector.h:260
FORCEINLINE void TrackPotentialGarbageReference(bool bDetectedGarbage)
Definition FastReferenceCollector.h:263
void AddStats(FProcessorStats Stats)
Definition FastReferenceCollector.h:266
Definition FastReferenceCollector.h:234
static COREUOBJECT_API void CallSync(uint32 SlowAROIndex, UObject *Object, FReferenceCollector &Collector)
Definition GarbageCollection.cpp:2853
static COREUOBJECT_API bool ProcessAllCalls(FWorkerContext &Context, FReferenceCollector &Collector)
Definition GarbageCollection.cpp:2876
static COREUOBJECT_API bool TryQueueCall(uint32 SlowAROIndex, UObject *Object, FWorkerContext &Context)
Definition GarbageCollection.cpp:2858
static COREUOBJECT_API void ProcessUnbalancedCalls(FWorkerContext &Context, FReferenceCollector &Collector)
Definition GarbageCollection.cpp:2872
Definition GarbageCollectionSchema.h:208
uint16 WordOffset
Definition GarbageCollectionSchema.h:209
uint16 WordStride
Definition GarbageCollectionSchema.h:210
Definition GarbageCollection.cpp:1790
Definition FastReferenceCollector.h:276
uint32 Stride
Definition FastReferenceCollector.h:280
int32 Num
Definition FastReferenceCollector.h:279
FSchemaView Schema
Definition FastReferenceCollector.h:277
uint8 * Data
Definition FastReferenceCollector.h:278
Definition FastReferenceCollector.h:284
FStructArrayBlock * Wip
Definition FastReferenceCollector.h:285
FORCEINLINE bool ContainsBatchData() const
Definition FastReferenceCollector.h:288
FStructArray * WipIt
Definition FastReferenceCollector.h:286
Definition FastReferenceCollector.h:295
UObject ** Reference
Definition FastReferenceCollector.h:297
UObject * ReferencedObject
Definition FastReferenceCollector.h:296
UObject * ReferenceOwner
Definition FastReferenceCollector.h:298
Definition FastReferenceCollector.h:129
UObject * Objects[ObjectCapacity+ObjectLookahead]
Definition FastReferenceCollector.h:133
TArrayView< UObject * > GetPadding()
Definition FastReferenceCollector.h:136
TArrayView< UObject * > GetObjects()
Definition FastReferenceCollector.h:135
FWorkBlock * Previous
Definition FastReferenceCollector.h:132
static constexpr uint32 ObjectCapacity
Definition FastReferenceCollector.h:130
Definition FastReferenceCollector.h:334
TArray< FWeakReferenceInfo > WeakReferences
Definition FastReferenceCollector.h:354
void SetInitialObjectsUnpadded(TArray< UObject * > &Objects)
Definition FastReferenceCollector.h:376
TArray< FGarbageReferenceInfo > GarbageReferences
Definition FastReferenceCollector.h:358
UE_NONCOPYABLE(FWorkerContext)
int64 GetAllocatedSize() const
Definition FastReferenceCollector.h:401
FWorkBlockifier ObjectsToSerialize
Definition FastReferenceCollector.h:351
FSuspendedStructBatch IncrementalStructs
Definition FastReferenceCollector.h:364
TConstArrayView< UObject * > GetInitialObjects()
Definition FastReferenceCollector.h:372
FORCEINLINE int32 GetWorkerIndex() const
Definition FastReferenceCollector.h:406
FProcessorStats Stats
Definition FastReferenceCollector.h:355
void SetInitialObjectsPrepadded(TConstArrayView< UObject * > PaddedObjects)
Definition FastReferenceCollector.h:383
FORCEINLINE UObject * GetReferencingObject()
Definition FastReferenceCollector.h:370
TConstArrayView< UObject ** > InitialNativeReferences
Definition FastReferenceCollector.h:352
void ResetInitialObjects()
Definition FastReferenceCollector.h:373
Definition FastReferenceCollector.h:450
uint32 WordOffset
Definition FastReferenceCollector.h:458
FMemberUnpacked(FMemberPacked In)
Definition FastReferenceCollector.h:451
EMemberType Type
Definition FastReferenceCollector.h:457
Definition FastReferenceCollector.h:462
FMemberWordUnpacked(const FMemberPacked In[4])
Definition FastReferenceCollector.h:463
Definition FastReferenceCollector.h:468
FStridedLayout Layout
Definition FastReferenceCollector.h:470
FScriptArray * Array
Definition FastReferenceCollector.h:469
Definition FastReferenceCollector.h:481
UObject ** It
Definition FastReferenceCollector.h:482
FStridedReferenceIterator & operator++()
Definition FastReferenceCollector.h:486
UObject *& operator*()
Definition FastReferenceCollector.h:485
uint32 Stride
Definition FastReferenceCollector.h:483
bool operator!=(FStridedReferenceIterator Rhs) const
Definition FastReferenceCollector.h:487
Definition FastReferenceCollector.h:474
uint32 Stride
Definition FastReferenceCollector.h:477
int32 Num
Definition FastReferenceCollector.h:476
UObject ** Data
Definition FastReferenceCollector.h:475
Definition FastReferenceCollector.h:776
FORCEINLINE void HandleKillableArray(Private::FStridedReferenceArray Array, FMemberId MemberId, EOrigin Origin) const
Definition FastReferenceCollector.h:818
FWorkerContext & Context
Definition FastReferenceCollector.h:782
void SetDebugSchemaStackMemberId(FMemberId Member)
Definition FastReferenceCollector.h:863
void Suspend()
Definition FastReferenceCollector.h:859
FORCEINLINE void HandleImmutableReference(UObject *Object, FMemberId MemberId, EOrigin Origin) const
Definition FastReferenceCollector.h:799
FReferenceCollector & Collector
Definition FastReferenceCollector.h:783
FORCEINLINE void HandleKillableArray(TArray< UObject * > &Array, FMemberId MemberId, EOrigin Origin) const
Definition FastReferenceCollector.h:813
FORCEINLINE void HandleReferenceDirectly(UObject *ReferencingObject, UObject *&Object, FMemberId MemberId, EOrigin Origin, bool bAllowReferenceElimination) const
Definition FastReferenceCollector.h:785
ProcessorType & Processor
Definition FastReferenceCollector.h:781
FORCEINLINE void HandleKillableReference(UObject *&Object, FMemberId MemberId, EOrigin Origin) const
Definition FastReferenceCollector.h:794
FORCEINLINE void HandleKillableReferences(ArrayType &&Objects, FMemberId MemberId, EOrigin Origin) const
Definition FastReferenceCollector.h:805
FDebugSchemaStackScope SchemaStackScopeType
Definition FastReferenceCollector.h:780
Definition FastReferenceCollector.h:878
typename std::remove_reference_t< RetType > Type
Definition FastReferenceCollector.h:880
decltype(GetDispatcher(*(CollectorType *) nullptr, *(ProcessorType *) nullptr, *(FWorkerContext *) nullptr)) RetType
Definition FastReferenceCollector.h:879
Definition GarbageCollectionSchema.h:214