UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
ExclusiveLoadPackageTimeTracker.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "Containers/Array.h"
6#include "Containers/Map.h"
7#include "CoreMinimal.h"
10#include "HAL/Platform.h"
11#include "UObject/NameTypes.h"
12#include "UObject/Object.h"
13#include "UObject/Package.h"
14#include "UObject/UnrealNames.h"
15
16class FString;
17
18#define WITH_LOADPACKAGE_TIME_TRACKER STATS
19
28{
29public:
49
73
80
82 UE_FORCEINLINE_HINT static void PushLoadPackage(FName PackageName)
83 {
84#if WITH_LOADPACKAGE_TIME_TRACKER
85 Get().InternalPushLoadPackage(PackageName);
86#endif
87 }
88
90 UE_FORCEINLINE_HINT static void PopLoadPackage(UPackage* LoadedPackage)
91 {
92#if WITH_LOADPACKAGE_TIME_TRACKER
93 Get().InternalPopLoadPackage(LoadedPackage, nullptr);
94#endif
95 }
96
98 inline static bool PushPostLoad(UObject* PostLoadObject)
99 {
100#if WITH_LOADPACKAGE_TIME_TRACKER
101 if (PostLoadObject && PostLoadObject->IsAsset())
102 {
103 Get().InternalPushLoadPackage(PostLoadObject->GetOutermost()->GetFName());
104 return true;
105 }
106#endif
107 return false;
108 }
109
111 UE_FORCEINLINE_HINT static void PopPostLoad(UObject* PostLoadObject)
112 {
113#if WITH_LOADPACKAGE_TIME_TRACKER
114 Get().InternalPopLoadPackage(nullptr, PostLoadObject);
115#endif
116 }
117
119 inline static void PushEndLoad()
120 {
121#if WITH_LOADPACKAGE_TIME_TRACKER
123 Instance.InternalPushLoadPackage(Instance.EndLoadName);
124#endif
125 }
126
129 {
130#if WITH_LOADPACKAGE_TIME_TRACKER
131 Get().InternalPopLoadPackage(nullptr, nullptr);
132#endif
133 }
134
137 {
138#if WITH_LOADPACKAGE_TIME_TRACKER
139 Get().InternalDumpReport(Args);
140#endif
141 }
142
145 {
146#if WITH_LOADPACKAGE_TIME_TRACKER
147 Get().InternalResetReport();
148#endif
149 }
150
152 inline static double GetExclusiveLoadTime(FName PackageName)
153 {
154#if WITH_LOADPACKAGE_TIME_TRACKER
155 return Get().InternalGetExclusiveLoadTime(PackageName);
156#else
157 return 0;
158#endif
159 }
160
162 inline static double GetInclusiveLoadTime(FName PackageName)
163 {
164#if WITH_LOADPACKAGE_TIME_TRACKER
165 return Get().InternalGetInclusiveLoadTime(PackageName);
166#else
167 return 0;
168#endif
169 }
170
171
172#if WITH_LOADPACKAGE_TIME_TRACKER // The rest of the class is only available if WITH_LOADPACKAGE_TIME_TRACKER
173
174private:
175
177 struct FLoadTime
178 {
180 FName AssetClass;
181 double ExclusiveTime;
182 double InclusiveTime;
183 double LastStartTime;
184 double OriginalStartTime;
185
186 FLoadTime()
188 {}
189
190 FLoadTime(FName InName, double InStartTime)
192 {}
193
196 {}
197 };
198
200 {
201 if (TrackerInstance)
202 return *TrackerInstance;
203 else
204 return Construct();
205 }
206
209
212
215
217 COREUOBJECT_API void InternalDumpReport(const TArray<FString>& Args) const;
218
221
223 COREUOBJECT_API double InternalGetExclusiveLoadTime(FName PackageName) const;
224
226 COREUOBJECT_API double InternalGetInclusiveLoadTime(FName PackageName) const;
227
229 bool IsPackageLoadTime(const FLoadTime& Time) const;
230
233
236
239
242
245
247 double TrackerOverhead;
248
250 const FName EndLoadName;
252
255
258
260
261#endif // WITH_LOADPACKAGE_TIME_TRACKER
262};
#define UE_FORCEINLINE_HINT
Definition Platform.h:723
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
UE::FPlatformRecursiveMutex FCriticalSection
Definition CriticalSection.h:53
void Construct(const FArguments &InArgs)
Definition IConsoleManager.h:2026
Definition ExclusiveLoadPackageTimeTracker.h:28
static double GetExclusiveLoadTime(FName PackageName)
Definition ExclusiveLoadPackageTimeTracker.h:152
static UE_FORCEINLINE_HINT void PushLoadPackage(FName PackageName)
Definition ExclusiveLoadPackageTimeTracker.h:82
static UE_FORCEINLINE_HINT void PopEndLoad()
Definition ExclusiveLoadPackageTimeTracker.h:128
static UE_FORCEINLINE_HINT void ResetReport()
Definition ExclusiveLoadPackageTimeTracker.h:144
static double GetInclusiveLoadTime(FName PackageName)
Definition ExclusiveLoadPackageTimeTracker.h:162
static bool PushPostLoad(UObject *PostLoadObject)
Definition ExclusiveLoadPackageTimeTracker.h:98
static void PushEndLoad()
Definition ExclusiveLoadPackageTimeTracker.h:119
static UE_FORCEINLINE_HINT void PopPostLoad(UObject *PostLoadObject)
Definition ExclusiveLoadPackageTimeTracker.h:111
static UE_FORCEINLINE_HINT void DumpReport(const TArray< FString > &Args)
Definition ExclusiveLoadPackageTimeTracker.h:136
static UE_FORCEINLINE_HINT void PopLoadPackage(UPackage *LoadedPackage)
Definition ExclusiveLoadPackageTimeTracker.h:90
Definition NameTypes.h:617
Definition Array.h:670
Definition UnrealString.h.inl:34
COREUOBJECT_API UPackage * GetOutermost() const
Definition UObjectBaseUtility.cpp:224
FORCEINLINE FName GetFName() const
Definition UObjectBase.h:233
Definition Object.h:95
virtual COREUOBJECT_API bool IsAsset() const
Definition Obj.cpp:2704
Definition Package.h:216
FORCEINLINE T * Get(const FObjectPtr &ObjectPtr)
Definition ObjectPtr.h:426
Definition ExclusiveLoadPackageTimeTracker.h:76
FScopedEndLoadTracker()
Definition ExclusiveLoadPackageTimeTracker.h:77
~FScopedEndLoadTracker()
Definition ExclusiveLoadPackageTimeTracker.h:78
Definition ExclusiveLoadPackageTimeTracker.h:32
~FScopedPackageTracker()
Definition ExclusiveLoadPackageTimeTracker.h:43
FScopedPackageTracker(UPackage *InPackageToTrack)
Definition ExclusiveLoadPackageTimeTracker.h:33
FScopedPackageTracker(FName PackageNameToTrack)
Definition ExclusiveLoadPackageTimeTracker.h:38
UPackage * PackageToTrack
Definition ExclusiveLoadPackageTimeTracker.h:47
Definition ExclusiveLoadPackageTimeTracker.h:52
UObject * PostLoadObject
Definition ExclusiveLoadPackageTimeTracker.h:71
FScopedPostLoadTracker(UObject *InPostLoadObject)
Definition ExclusiveLoadPackageTimeTracker.h:53
~FScopedPostLoadTracker()
Definition ExclusiveLoadPackageTimeTracker.h:64