UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
AsyncPackageLoader.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
7#include "CoreMinimal.h"
8#include "CoreTypes.h"
9#include "Misc/PackagePath.h"
10#include "Stats/Stats.h"
11#include "UObject/NameTypes.h"
12#include "UObject/Object.h"
16
18class FPackagePath;
20class UPackage;
21struct FGuid;
22template <typename FuncType> class TFunctionRef;
23namespace Verse { struct VPackage; }
24
27
29
36
39
41
43extern bool IsGarbageCollectionLocked();
44
46
49
50template <typename T>
52{
54 for (UObject* ObjRef : LoadedObjects)
55 {
56 if (ObjRef)
57 {
58 ObjRef->AtomicallyClearFlags(ObjectLoadFlags);
59 if (ObjRef->HasAnyInternalFlags(EInternalObjectFlags::ClusterRoot))
60 {
61 GUObjectClusters.DissolveCluster(ObjRef);
62 }
63 }
64 }
65}
66
67class FPackageIndex;
70
83
88{
89public:
91
95 virtual void InitializeLoading() = 0;
96
100 virtual void ShutdownLoading() = 0;
101
102 virtual void StartThread() = 0;
103
104 virtual bool ShouldAlwaysLoadPackageAsync(const FPackagePath& PackagePath) = 0;
105
120 const FPackagePath& PackagePath,
121 FName CustomPackageName,
127 uint32 InLoadFlags) = 0;
128
137 {
138 checkf(false, TEXT("Not Implemented"));
139 return INDEX_NONE;
140 };
141
149 virtual EAsyncPackageState::Type ProcessLoading(bool bUseTimeLimit, bool bUseFullTimeLimit, double TimeLimit) = 0;
150
158
164 virtual void CancelLoading() = 0;
165
171 virtual void SuspendLoading() = 0;
172
178 virtual void ResumeLoading() = 0;
179
186
191
196
202 virtual float GetAsyncLoadPercentage(const FName& PackageName) = 0;
203
207 virtual bool IsAsyncLoadingSuspended() = 0;
208
212 virtual bool IsInAsyncLoadThread() = 0;
213
219 virtual bool IsMultithreaded() = 0;
220
226 virtual bool IsAsyncLoadingPackages() = 0;
227
229
230 virtual void NotifyUnreachableObjects(const TArrayView<FUObjectItem*>& UnreachableObjects) = 0;
231
232 virtual void NotifyRegistrationEvent(FName PackageName, FName Name, ENotifyRegistrationType NotifyRegistrationType, ENotifyRegistrationPhase NotifyRegistrationPhase, UObject* (*InRegister)(), bool InbDynamic, UObject* FinishedObject) = 0;
233
235 virtual void NotifyScriptVersePackage(Verse::VPackage* Package) {}
236
237 virtual void NotifyRegistrationComplete() = 0;
238
239 virtual ELoaderType GetLoaderType() const = 0;
240
241protected:
242 static int32 GetNextRequestId();
243
244private:
245 static FThreadSafeCounter NextPackageRequestId;
246};
247
248// Stats for ChartCreation.cpp
252
254
255// Time limit
259
261 double InTickStartTime,
262 double CurrentTime,
263 double LastTestTime,
264 double InTimeLimit,
265 const TCHAR* InLastTypeOfWorkPerformed = nullptr,
267
#define checkf(expr, format,...)
Definition AssertionMacros.h:315
ENotifyRegistrationPhase
Definition AsyncLoadingEvents.h:23
ENotifyRegistrationType
Definition AsyncLoadingEvents.h:13
COREUOBJECT_API float GTimeLimitExceededMinTime
Definition AsyncPackageLoader.cpp:808
COREUOBJECT_API int32 GWarnIfTimeLimitExceeded
Definition AsyncPackageLoader.cpp:792
COREUOBJECT_API uint32 GSyncLoadCount
Definition AsyncPackageLoader.cpp:782
COREUOBJECT_API void ResetAsyncLoadingStats()
Definition AsyncPackageLoader.cpp:784
bool CanPostLoadOnAsyncLoadingThread(UObject *Object)
Definition AsyncPackageLoader.cpp:190
void ClearFlagsAndDissolveClustersFromLoadedObjects(T &LoadedObjects)
Definition AsyncPackageLoader.h:51
bool IsNativeCodePackage(UPackage *Package)
Definition AsyncPackageLoader.cpp:184
void IsTimeLimitExceededPrint(double InTickStartTime, double CurrentTime, double LastTestTime, double InTimeLimit, const TCHAR *InLastTypeOfWorkPerformed=nullptr, UObject *InLastObjectWorkWasPerformedOn=nullptr)
Definition AsyncPackageLoader.cpp:816
COREUOBJECT_API float GTimeLimitExceededMultiplier
Definition AsyncPackageLoader.cpp:800
COREUOBJECT_API double GFlushAsyncLoadingTime
Definition AsyncPackageLoader.cpp:780
const FName PrestreamPackageClassNameLoad
Definition AsyncPackageLoader.cpp:129
bool IsGarbageCollectionLocked()
Definition GarbageCollection.cpp:154
COREUOBJECT_API uint32 GFlushAsyncLoadingCount
Definition AsyncPackageLoader.cpp:781
ELoaderType
Definition CoreGlobals.h:485
@ INDEX_NONE
Definition CoreMiscDefines.h:150
#define TEXT(x)
Definition Platform.h:1272
FPlatformTypes::TCHAR TCHAR
Either ANSICHAR or WIDECHAR, depending on whether the platform supports wide characters or the requir...
Definition Platform.h:1135
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
#define DECLARE_CYCLE_STAT(CounterName, StatId, GroupId)
Definition Stats.h:669
#define DECLARE_CYCLE_STAT_WITH_FLAGS(CounterName, StatId, GroupId, StatFlags)
Definition Stats.h:670
#define DECLARE_STATS_GROUP(GroupDesc, GroupId, GroupCat)
Definition Stats.h:689
#define DECLARE_STATS_GROUP_VERBOSE(GroupDesc, GroupId, GroupCat)
Definition Stats.h:690
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
EPackageFlags
Definition ObjectMacros.h:129
@ ClusterRoot
Root of a cluster.
EObjectFlags
Definition ObjectMacros.h:552
@ RF_NeedPostLoad
Object needs to be postloaded.
Definition ObjectMacros.h:575
@ RF_WasLoaded
Flagged on UObjects that were loaded.
Definition ObjectMacros.h:584
@ RF_NeedPostLoadSubobjects
During load, indicates that the object still needs to instance subobjects and fixup serialized compon...
Definition ObjectMacros.h:576
@ RF_NeedLoad
During load, indicates object needs loading.
Definition ObjectMacros.h:573
FUObjectClusterContainer GUObjectClusters
Definition UObjectArray.cpp:27
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition LinkerInstancingContext.h:99
Definition NameTypes.h:617
Definition ObjectResource.h:44
Definition PackagePath.h:89
Definition ThreadSafeCounter.h:14
Definition AsyncPackageLoader.h:88
virtual bool IsMultithreaded()=0
virtual void ResumeLoading()=0
virtual void NotifyUnreachableObjects(const TArrayView< FUObjectItem * > &UnreachableObjects)=0
virtual void FlushLoading(TConstArrayView< int32 > RequestIds)=0
virtual void SuspendLoading()=0
virtual EAsyncPackageState::Type ProcessLoading(bool bUseTimeLimit, bool bUseFullTimeLimit, double TimeLimit)=0
virtual bool IsAsyncLoadingPackages()=0
virtual void NotifyConstructedDuringAsyncLoading(UObject *Object, bool bSubObject)=0
virtual float GetAsyncLoadPercentage(const FName &PackageName)=0
virtual void CancelLoading()=0
virtual int32 GetNumQueuedPackages()=0
virtual void NotifyRegistrationComplete()=0
virtual void NotifyRegistrationEvent(FName PackageName, FName Name, ENotifyRegistrationType NotifyRegistrationType, ENotifyRegistrationPhase NotifyRegistrationPhase, UObject *(*InRegister)(), bool InbDynamic, UObject *FinishedObject)=0
virtual EAsyncPackageState::Type ProcessLoadingUntilComplete(TFunctionRef< bool()> CompletionPredicate, double TimeLimit)=0
virtual bool ShouldAlwaysLoadPackageAsync(const FPackagePath &PackagePath)=0
virtual ELoaderType GetLoaderType() const =0
virtual void InitializeLoading()=0
virtual ~IAsyncPackageLoader()
Definition AsyncPackageLoader.h:90
virtual int32 LoadPackage(const FPackagePath &PackagePath, FName CustomPackageName, FLoadPackageAsyncDelegate InCompletionDelegate, EPackageFlags InPackageFlags, int32 InPIEInstanceID, int32 InPackagePriority, const FLinkerInstancingContext *InInstancingContext, uint32 InLoadFlags)=0
virtual int32 GetNumAsyncPackages()=0
virtual bool IsAsyncLoadingSuspended()=0
virtual void NotifyScriptVersePackage(Verse::VPackage *Package)
Called for built in packages (currently only VVMIntrinsics.cpp) to allow them to be imported.
Definition AsyncPackageLoader.h:235
virtual void StartThread()=0
virtual int32 LoadPackage(const FPackagePath &PackagePath, FLoadPackageAsyncOptionalParams OptionalParams)
Definition AsyncPackageLoader.h:136
virtual void ShutdownLoading()=0
static int32 GetNextRequestId()
Definition AsyncPackageLoader.cpp:42
virtual bool IsInAsyncLoadThread()=0
Definition ArrayView.h:139
Definition AssetRegistryState.h:50
Definition Object.h:95
Definition Package.h:216
Type
Definition UObjectGlobals.h:1141
Definition Archive.h:36
Definition AsyncPackageLoader.h:73
bool bAsyncPostLoadEnabled
Definition AsyncPackageLoader.h:75
FAsyncLoadingThreadSettings()
Definition AsyncPackageLoader.cpp:131
bool bLooseFileLoadingEnabled
Definition AsyncPackageLoader.h:76
static COREUOBJECT_API FAsyncLoadingThreadSettings & Get()
Definition AsyncPackageLoader.cpp:178
bool bAsyncLoadingThreadEnabled
Definition AsyncPackageLoader.h:74
Definition Guid.h:109
Definition UObjectGlobals.h:789