144 ++NumCompletedRequests;
151 return NumRequests == NumCompletedRequests;
165 int32 NumCompletedRequests = 0;
201 void OnRequestComplete(
int32 RequestID)
210 if (
int32*
MainRequest = DuplicateRequestMap.Find(RequestID.load(std::memory_order_relaxed)))
212 RequestID.store(*
MainRequest, std::memory_order_relaxed);
246 static bool bThreadStarted;
249 FEvent* QueuedRequestsEvent;
251 FEvent* CancelLoadingEvent;
253 FEvent* ThreadSuspendedEvent;
255 FEvent* ThreadResumedEvent;
258#if THREADSAFE_UOBJECTS
269#if THREADSAFE_UOBJECTS
280#if THREADSAFE_UOBJECTS
291#if THREADSAFE_UOBJECTS
306#if THREADSAFE_UOBJECTS
313#if THREADSAFE_UOBJECTS
331 static uint32 AsyncLoadingThreadID;
334 enum class EAsyncPackageInsertMode
336 InsertBeforeMatchingPriorities,
337 InsertAfterMatchingPriorities
340#if LOOKING_FOR_PERF_ISSUES
359 return IoStorePackageLoader;
452 return bThreadStarted;
459 check(CurrentAsyncLoadingTickThreadIndex ==
INDEX_NONE || CurrentAsyncLoadingTickThreadIndex == ThreadIndex);
460 CurrentAsyncLoadingTickThreadIndex = ThreadIndex;
467 check(CurrentAsyncLoadingTickThreadIndex == ThreadIndex);
470 CurrentAsyncLoadingTickThreadIndex =
INDEX_NONE;
477 return !!AsyncLoadingTickCounter.
GetValue();
482 return QueuedPackagesCounter.
GetValue() != 0 || ExistingAsyncPackagesCounter.
GetValue() != 0;
487 bool bResult =
false;
506 return !!IsLoadingSuspended.
GetValue();
517 return IsLoadingSuspended.
GetValue();
523 return QueuedPackagesCounter.
GetValue();
529 return ExistingAsyncPackagesCounter.
GetValue();
541 return AsyncPackageNameLookup.FindRef(PackageName);
561 return LoadedPackagesNameLookup.FindRef(PackageName);
599 return AsyncPackages[PackageIndex];
655 void AddPendingRequest(
int32 RequestID)
657#if THREADSAFE_UOBJECTS
660 if (!PendingRequests.Contains(RequestID))
662 PendingRequests.Add(RequestID);
671#if THREADSAFE_UOBJECTS
674 for (
int32 ID : RequestIDs)
676 PendingRequests.Remove(ID);
696 int32 GetQueuedPackagesCount()
const
698 return QueuedPackagesCounter.
GetValue();
701 int32 GetExistingAsyncPackagesCount()
const
703 return ExistingAsyncPackagesCounter.
GetValue();
709 bool ContainsRequestInternal(
int32 RequestID)
711#if THREADSAFE_UOBJECTS
714 return PendingRequests.Contains(RequestID);
722#if THREADSAFE_UOBJECTS
725 return Algo::AnyOf(RequestIDs, [
this](
int32 RequestID){
return PendingRequests.Contains(RequestID); });
731 bool ContainsAnyRequestInternal(
TConstArrayView<std::atomic<int32>> RequestIDs)
733#if THREADSAFE_UOBJECTS
736 return Algo::AnyOf(RequestIDs, [
this](
const std::atomic<int32>& RequestID){
return PendingRequests.Contains(RequestID.load(std::memory_order_relaxed)); });
781 int32 CreateAsyncPackagesFromQueue(
bool bUseTimeLimit,
bool bUseFullTimeLimit,
double TimeLimit);
807 void CancelAsyncLoadingInternal();
808 void FinalizeCancelAsyncLoadingInternal();
815 int32 AsyncLoadingThreadIndex;
819 static int32 CurrentAsyncLoadingTickThreadIndex;
832 return *PrecacheHandler;
838 return AsyncLoadingThreadIndex;
841#if !UE_BUILD_SHIPPING && !UE_BUILD_TEST
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
constexpr auto MakeArrayView(OtherRangeType &&Other)
Definition ArrayView.h:873
#define checkSlow(expr)
Definition AssertionMacros.h:332
#define check(expr)
Definition AssertionMacros.h:314
ENotifyRegistrationPhase
Definition AsyncLoadingEvents.h:23
ENotifyRegistrationType
Definition AsyncLoadingEvents.h:13
#define UE_AUTORTFM_ALWAYS_OPEN
Definition AutoRTFMDefines.h:114
ELoaderType
Definition CoreGlobals.h:485
@ INDEX_NONE
Definition CoreMiscDefines.h:150
TSharedRef< InObjectType, InMode > MakeShared(InArgTypes &&... Args)
Definition SharedPointer.h:2009
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
UE::FPlatformRecursiveMutex FCriticalSection
Definition CriticalSection.h:53
#define TRACE_LOADTIME_END_REQUEST(...)
Definition LoadTimeTracePrivate.h:135
const bool
Definition NetworkReplayStreaming.h:178
#define MAX_int32
Definition NumericLimits.h:25
EPackageFlags
Definition ObjectMacros.h:129
CORE_API bool IsInGameThread()
Definition ThreadingBase.cpp:185
int32 TAsyncLoadPriority
Definition UObjectGlobals.h:726
UE_FORCEINLINE_HINT TUniquePtr< T > MakeUnique(TArgs &&... Args)
Definition UniquePtr.h:918
FRWLock Lock
Definition UnversionedPropertySerialization.cpp:921
Definition AsyncLoadingThread.h:235
void QueueEvent_ProcessPostloadWait(FAsyncPackage *Pkg, int32 EventSystemPriority=0)
Definition AsyncLoading.cpp:2699
virtual bool IsAsyncLoadingSuspended() override
Definition AsyncLoadingThread.h:509
EAsyncPackageState::Type ProcessAsyncLoading(int32 &OutPackagesProcessed, bool bUseTimeLimit, bool bUseFullTimeLimit, float TimeLimit, FFlushRequest &FlushRequest)
Definition AsyncLoading.cpp:4326
void SetIoStorePackageLoader(IAsyncPackageLoader *InIoStorePackageLoader)
Definition AsyncLoadingThread.h:362
void InitializeLoading() override
Definition AsyncLoading.cpp:823
FAsyncLoadEventQueue EventQueue
Definition AsyncLoadingThread.h:414
FORCEINLINE bool IsAsyncLoadingSuspendedInternal() const
Definition AsyncLoadingThread.h:504
static void EnterAsyncLoadingTick(int32 ThreadIndex)
Definition AsyncLoadingThread.h:456
void ShutdownLoading() override
Definition AsyncLoading.cpp:5152
int32 GetThreadIndex() const
Definition AsyncLoadingThread.h:836
void QueueEvent_StartPostLoad(FAsyncPackage *Pkg, int32 EventSystemPriority=0)
Definition AsyncLoading.cpp:2741
FORCEINLINE int32 GetNumQueuedPackages() override
Definition AsyncLoadingThread.h:521
void QueueEvent_FinishLinker(FWeakAsyncPackagePtr WeakPtr, int32 EventSystemPriority=0)
Definition AsyncLoading.cpp:1854
virtual ~FAsyncLoadingThread()
Definition AsyncLoading.cpp:5144
void QueueEvent_SetupImports(FAsyncPackage *Pkg, int32 EventSystemPriority=0)
Definition AsyncLoading.cpp:2303
TArray< FAsyncPackage * > AsyncPackagesReadyForTick
Definition AsyncLoadingThread.h:303
void QueuePackage(FAsyncPackageDesc &Package)
Definition AsyncLoading.cpp:828
void StartThread() override
Definition AsyncLoading.cpp:5176
virtual void Stop()
Definition AsyncLoading.cpp:5348
static FAsyncLoadingThread * Instance
Definition AsyncLoadingThread.h:845
FPrecacheCallbackHandler & GetPrecacheHandler()
Definition AsyncLoadingThread.h:830
void InsertPackage(FAsyncPackage *Package, bool bReinsert=false, EAsyncPackageInsertMode InsertMode=EAsyncPackageInsertMode::InsertBeforeMatchingPriorities)
Definition AsyncLoading.cpp:4210
FEventLoadGraph & GetEventGraph()
Definition AsyncLoadingThread.h:824
float GetAsyncLoadPercentage(const FName &PackageName) override
Definition AsyncLoading.cpp:5513
FORCEINLINE FAsyncPackage * GetPackage(FWeakAsyncPackagePtr Ptr)
Definition AsyncLoadingThread.h:417
void FireCompletedCompiledInImport(void *AsyncPacakge, FPackageIndex Import)
Definition AsyncLoading.cpp:5597
void SuspendLoading() override
Definition AsyncLoading.cpp:5484
FThreadSafeCounter RecursionNotAllowed
Definition AsyncLoadingThread.h:842
FORCEINLINE FAsyncPackage * GetPackage(int32 PackageIndex)
Definition AsyncLoadingThread.h:596
void NotifyRegistrationComplete() override
Definition AsyncLoading.cpp:5592
void FlushLoading(TConstArrayView< int32 > RequestIDs) override
Definition AsyncLoading.cpp:7522
void QueueEvent_SetupExports(FAsyncPackage *Pkg, int32 EventSystemPriority=0)
Definition AsyncLoading.cpp:2642
void NotifyUnreachableObjects(const TArrayView< FUObjectItem * > &UnreachableObjects) override
Definition AsyncLoadingThread.h:405
void QueueEvent_CreateLinker(FAsyncPackage *Pkg, int32 EventSystemPriority=0)
Definition AsyncLoading.cpp:1788
void QueueEvent_ExportsDone(FAsyncPackage *Pkg, int32 EventSystemPriority=0)
Definition AsyncLoading.cpp:2720
virtual ELoaderType GetLoaderType() const override
Definition AsyncLoadingThread.h:352
FORCEINLINE FAsyncPackage * FindAsyncPackage(const FName &PackageName)
Definition AsyncLoadingThread.h:538
FORCEINLINE int32 GetAsyncLoadingSuspendedCount()
Definition AsyncLoadingThread.h:514
void NotifyConstructedDuringAsyncLoading(UObject *Object, bool bSubObject) override
Definition AsyncLoading.cpp:5555
EAsyncPackageState::Type ProcessLoading(bool bUseTimeLimit, bool bUseFullTimeLimit, double TimeLimit) override
Definition AsyncLoading.cpp:7625
FORCEINLINE bool IsInAsyncLoadThread() override
Definition AsyncLoadingThread.h:485
EAsyncPackageState::Type ProcessLoadingUntilComplete(TFunctionRef< bool()> CompletionPredicate, double TimeLimit) override
Definition AsyncLoading.cpp:7582
EAsyncPackageState::Type TickAsyncLoading(bool bUseTimeLimit, bool bUseFullTimeLimit, double TimeLimit, FFlushRequest FlushRequest=FFlushRequest())
Definition AsyncLoading.cpp:4975
EAsyncPackageState::Type TickAsyncThread(bool bUseTimeLimit, bool bUseFullTimeLimit, double TimeLimit, bool &bDidSomething, FFlushRequest &FlushRequest)
Definition AsyncLoading.cpp:5276
void NotifyRegistrationEvent(FName PackageName, FName Name, ENotifyRegistrationType NotifyRegistrationType, ENotifyRegistrationPhase NotifyRegistrationPhase, UObject *(*InRegister)(), bool InbDynamic, UObject *FinishedObject) override
Definition AsyncLoading.cpp:5587
void ResumeLoading() override
Definition AsyncLoading.cpp:5498
static FAsyncLoadingThread & Get()
Definition AsyncLoadingThread.h:374
UE_AUTORTFM_ALWAYS_OPEN bool IsAsyncLoadingPackages() override
Definition AsyncLoadingThread.h:480
bool ShouldAlwaysLoadPackageAsync(const FPackagePath &InPackagePath) override
Definition AsyncLoading.cpp:7441
void CancelLoading() override
Definition AsyncLoading.cpp:5353
void CheckForCycles()
Definition AsyncLoading.cpp:5246
FORCEINLINE bool IsMultithreaded() override
Definition AsyncLoadingThread.h:450
static void LeaveAsyncLoadingTick(int32 ThreadIndex)
Definition AsyncLoadingThread.h:463
FORCEINLINE FAsyncPackage * FindLoadedPackage(const FName &PackageName)
Definition AsyncLoadingThread.h:558
virtual uint32 Run()
Definition AsyncLoading.cpp:5199
static UE_AUTORTFM_ALWAYS_OPEN bool GetIsInAsyncLoadingTick()
Definition AsyncLoadingThread.h:475
FORCEINLINE int32 GetNumAsyncPackages() override
Definition AsyncLoadingThread.h:527
virtual bool Init()
Definition AsyncLoading.cpp:5194
IAsyncPackageLoader * GetIoStorePackageLoader() const
Definition AsyncLoadingThread.h:357
void QueueEvent_StartImportPackages(FAsyncPackage *Pkg, int32 EventSystemPriority=0)
Definition AsyncLoading.cpp:2005
void QueueEvent_ProcessImportsAndExports(FAsyncPackage *Pkg, int32 EventSystemPriority=0)
Definition AsyncLoading.cpp:2678
Definition LinkerInstancingContext.h:99
Definition NameTypes.h:617
Definition ObjectResource.h:44
Definition PackagePath.h:89
Definition RunnableThread.h:20
Definition ThreadSafeBool.h:17
Definition ThreadSafeCounter.h:14
int32 Increment()
Definition ThreadSafeCounter.h:52
int32 Decrement()
Definition ThreadSafeCounter.h:75
int32 GetValue() const
Definition ThreadSafeCounter.h:120
Definition AsyncPackageLoader.h:88
Definition ArrayView.h:139
UE_REWRITE SizeType Num() const
Definition Array.h:1144
SizeType HeapPush(ElementType &&InItem, const PREDICATE_CLASS &Predicate)
Definition Array.h:3671
void HeapPop(ElementType &OutItem, const PREDICATE_CLASS &Predicate, EAllowShrinking AllowShrinking=UE::Core::Private::AllowShrinkingByDefault< AllocatorType >())
Definition Array.h:3748
Definition AssetRegistryState.h:50
Definition AndroidPlatformMisc.h:14
Definition UnrealString.h.inl:34
Definition SharedPointer.h:692
UE_FORCEINLINE_HINT const bool IsValid() const
Definition SharedPointer.h:1085
Definition UniquePtr.h:107
UE_FORCEINLINE_HINT T * Get() const
Definition UniquePtr.h:324
Definition ScopeLock.h:21
UE_REWRITE bool AnyOf(const RangeType &Range)
Definition AnyOf.h:20
Type
Definition UObjectGlobals.h:1141
static UE_FORCEINLINE_HINT void MemoryBarrier()
Definition AndroidPlatformMisc.h:249
static uint32 GetCurrentThreadId(void)
Definition AndroidPlatformTLS.h:20
Definition AsyncLoading.h:309
Definition AsyncLoadingThread.h:78
bool PopAndExecute(FAsyncLoadEventArgs &Args)
Definition AsyncLoadingThread.h:94
FORCEINLINE void AddAsyncEvent(int32 UserPriority, int32 PackageSerialNumber, int32 EventSystemPriority, TFunction< void(FAsyncLoadEventArgs &Args)> &&Payload)
Definition AsyncLoadingThread.h:88
int32 RunningSerialNumber
Definition AsyncLoadingThread.h:80
TArray< FAsyncLoadEvent > EventQueue
Definition AsyncLoadingThread.h:81
FAsyncLoadEventQueue()
Definition AsyncLoadingThread.h:83
Definition AsyncLoadingThread.h:30
@ EventSystemPriority_MAX
Definition AsyncLoadingThread.h:33
int32 PackageSerialNumber
Definition AsyncLoadingThread.h:37
int32 EventSystemPriority
Definition AsyncLoadingThread.h:38
int32 SerialNumber
Definition AsyncLoadingThread.h:39
TFunction< void(FAsyncLoadEventArgs &Args)> Payload
Definition AsyncLoadingThread.h:40
int32 UserPriority
Definition AsyncLoadingThread.h:36
FAsyncLoadEvent()
Definition AsyncLoadingThread.h:42
FORCEINLINE bool operator<(const FAsyncLoadEvent &Other) const
Definition AsyncLoadingThread.h:58
FAsyncLoadEvent(int32 InUserPriority, int32 InPackageSerialNumber, int32 InEventSystemPriority, int32 InSerialNumber, TFunction< void(FAsyncLoadEventArgs &Args)> &&InPayload)
Definition AsyncLoadingThread.h:49
Definition AsyncPackage.h:18
Definition AsyncLoading.h:345
Definition AsyncLoading.cpp:118
Definition AsyncLoading.h:290
Definition AsyncLoadingThread.h:117
void OnRequestComplete(int32 InCompletedRequest)
Definition AsyncLoadingThread.h:138
TConstArrayView< std::atomic< int32 > > GetRequestIDs() const
Definition AsyncLoadingThread.h:128
bool IsComplete()
Definition AsyncLoadingThread.h:149
FFlushRequestData(TConstArrayView< int32 > InRequestIDs)
Definition AsyncLoadingThread.h:118
TArrayView< std::atomic< int32 > > GetRequestIDs()
Definition AsyncLoadingThread.h:133
Definition AsyncLoadingThread.h:172
bool IsValid() const
Definition AsyncLoadingThread.h:185
TConstArrayView< std::atomic< int32 > > GetRequestIDs() const
Definition AsyncLoadingThread.h:180
FFlushRequest(TConstArrayView< int32 > InRequestIDs)
Definition AsyncLoadingThread.h:175
bool IsComplete() const
Definition AsyncLoadingThread.h:190
Definition UObjectGlobals.h:789
Definition AsyncLoadingThread.h:226
static void Init()
Definition AsyncLoading.cpp:5088
static int32 Value
Definition AsyncLoadingThread.h:227
Definition AsyncLoading.cpp:1483
Definition AsyncLoading.h:71
FName PackageName
Definition AsyncLoading.h:72
int32 SerialNumber
Definition AsyncLoading.h:73