UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
LoadTimeTracker.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
7#pragma once
8
9#include "Containers/Array.h"
10#include "Containers/Map.h"
12#include "CoreTypes.h"
13#include "Misc/Build.h"
14#include "Misc/Optional.h"
18#include "Stats/Stats.h"
19#include "Trace/Trace.h"
20#include "Trace/Trace.inl"
21#include "UObject/NameTypes.h"
22
23#ifndef ENABLE_LOADTIME_TRACKING
24 #define ENABLE_LOADTIME_TRACKING 0
25#endif
26
27#ifndef ENABLE_LOADTIME_TRACKING_WITH_STATS
28 #define ENABLE_LOADTIME_TRACKING_WITH_STATS 0
29#endif
30
31#define ENABLE_LOADTIME_RAW_TIMINGS 0
32
35{
36public:
38
41
44
47
52
54 {
55 return TimeInfo;
56 }
57
59
61 CORE_API void DumpRawLoadTimes() const;
62
64 {
66 }
67
69
71 {
73 }
74
76
81
83
88
89 bool IsAccumulating() { return bAccumulating; }
90
91#if ENABLE_LOADTIME_RAW_TIMINGS
92
98 double CreateLinkerTime;
99 double FinishLinkerTime;
100 double CreateImportsTime;
101 double CreateExportsTime;
102 double PreLoadObjectsTime;
103 double PostLoadObjectsTime;
105 double FinishObjectsTime;
106 double MaterialPostLoad;
108 double SerializeInlineShaderMaps;
111 double AsyncLoadingTime;
112 double CreateMetaDataTime;
113
128
130 double Package_LoadImports;
137 double Package_Tick;
140 double Package_EventIOWait;
141
142 double Package_Temp1;
143 double Package_Temp2;
144 double Package_Temp3;
145 double Package_Temp4;
146
147 double Graph_AddNode;
149
150 double Graph_AddArc;
152
153 double Graph_RemoveNode;
155
158
161
164
165 double Graph_Misc;
167
169
171
175
177
179 double LoadImports_Event;
181 double MakeNextPrecacheRequestCurrent;
182 double FlushPrecacheBuffer;
183 double ProcessImportsAndExports_Event;
193 double PreLoadAndSerialize;
194 double PostLoad;
199 double UObject_Serialize;
200 double BulkData_Serialize;
202 double EndLoad;
232 double VerifyGlobalShaders;
234
235
236
237#endif
238
239private:
241
243 struct FTimeAndCount
244 {
245 double Time;
246 uint64 Count;
247 };
248
250 struct FAccumulatorTracker
251 {
253 };
254
256 TMap<FName, FAccumulatorTracker> AccumulatedTimeInfo;
257
259 bool bAccumulating;
260private:
262};
263
271
272#if ENABLE_LOADTIME_TRACKING
273#define ACCUM_LOADTIME(TimerName, Time) FLoadTimeTracker::Get().ReportScopeTime(Time, FName(TimerName));
274#else
275#define ACCUM_LOADTIME(TimerName, Time)
276#endif
277
278#if ENABLE_LOADTIME_TRACKING
279#define SCOPED_ACCUM_LOADTIME(TimerName, InstanceName) FScopedLoadTimeAccumulatorTimer AccumulatorTimer_##TimerName(FName(#TimerName), FName(InstanceName));
280#else
281#define SCOPED_ACCUM_LOADTIME(TimerName, InstanceName)
282#endif
283
284// Uses raw timers to store cumulative load times, does not support specific strings
285#if ENABLE_LOADTIME_RAW_TIMINGS
286#define SCOPED_LOADTIMER_TEXT(TimerName)
287#define SCOPED_LOADTIMER_ASSET_TEXT(TimerName)
288#define SCOPED_LOADTIMER(TimerName) FScopedDurationTimer DurationTimer_##TimerName(FLoadTimeTracker::Get().TimerName);
289#define SCOPED_CUSTOM_LOADTIMER(TimerName)
290#define SCOPED_LOADTIMER_CNT(TimerName) FScopedDurationTimer DurationTimer_##TimerName(FLoadTimeTracker::Get().TimerName); FLoadTimeTracker::Get().TimerName##Cnt++;
291#define ADD_CUSTOM_LOADTIMER_META(TimerName, Key, Value)
292#else
293
294#define CUSTOM_LOADTIMER_LOG Cpu
295
296// Uses trace system that can be read by Insights
297#if LOADTIMEPROFILERTRACE_ENABLED
298
299// Writes any string to the LoadTime channel, normally used for class names
300#define SCOPED_LOADTIMER_TEXT(TimerName) TRACE_CPUPROFILER_EVENT_SCOPE_TEXT_ON_CHANNEL(TimerName, LoadTimeChannel)
301
302// Writes any string to the AssetLoadTime channel, for full asset paths
303#define SCOPED_LOADTIMER_ASSET_TEXT(TimerName) TRACE_CPUPROFILER_EVENT_SCOPE_TEXT_ON_CHANNEL(TimerName, AssetLoadTimeChannel)
304
305// Writes raw scope name to LoadTime channel
306#define SCOPED_LOADTIMER(TimerName) TRACE_CPUPROFILER_EVENT_SCOPE_ON_CHANNEL(TimerName, LoadTimeChannel)
307
308// Used to create a custom trace event and add metadata
309#define SCOPED_CUSTOM_LOADTIMER(TimerName) UE_TRACE_LOG_SCOPED_T(CUSTOM_LOADTIMER_LOG, TimerName, LoadTimeChannel)
310#define ADD_CUSTOM_LOADTIMER_META(TimerName, Key, Value) << TimerName.Key(Value)
311
312// Increment cumulative event count, disabled in this mode
313#define SCOPED_LOADTIMER_CNT(TimerName)
314
315// All load time tracking is disabled
316#else
317#define SCOPED_LOADTIMER_TEXT(TimerName)
318#define SCOPED_LOADTIMER_ASSET_TEXT(TimerName)
319#define SCOPED_LOADTIMER(TimerName)
320#define SCOPED_CUSTOM_LOADTIMER(TimerName)
321#define ADD_CUSTOM_LOADTIMER_META(TimerName, Key, Value)
322#define SCOPED_LOADTIMER_CNT(TimerName)
323#endif
324#endif
325
326#if ENABLE_LOADTIME_TRACKING_WITH_STATS && STATS
327 #define SCOPED_ACCUM_LOADTIME_STAT(InstanceName) FSimpleScopeSecondsStat ScopeTimer(FDynamicStats::CreateStatIdDouble<FStatGroup_STATGROUP_LoadTimeClass>(InstanceName, true), 1000.0);
328 #define ACCUM_LOADTIMECOUNT_STAT(InstanceName) INC_DWORD_STAT_FNAME_BY(FDynamicStats::CreateStatIdInt64<FStatGroup_STATGROUP_LoadTimeClassCount>(InstanceName+TEXT("_Count"), true).GetName(), 1);
329#else
330 #define SCOPED_ACCUM_LOADTIME_STAT(...)
331 #define ACCUM_LOADTIMECOUNT_STAT(...)
332#endif
FPlatformTypes::uint64 uint64
A 64-bit unsigned integer.
Definition Platform.h:1117
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
void VerifyGlobalShaders(EShaderPlatform Platform, const ITargetPlatform *TargetPlatform, bool bLoadedFromCacheFile, const TArray< const FShaderType * > *OutdatedShaderTypes, const TArray< const FShaderPipelineType * > *OutdatedShaderPipelineTypes, const FShaderCompilerFlags &InExtraCompilerFlags)
Definition ShaderCompiler.cpp:4723
void EndLoad(FUObjectSerializeContext *LoadContext, TArray< UPackage * > *OutLoadedPackages)
Definition UObjectGlobals.cpp:2157
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition LoadTimeTracker.h:35
static CORE_API FLoadTimeTracker & Get()
Definition LoadTimeTracker.cpp:27
static void StartAccumulatedLoadTimesStatic()
Definition LoadTimeTracker.h:77
static void StopAccumulatedLoadTimesStatic()
Definition LoadTimeTracker.h:84
static void DumpRawLoadTimesStatic()
Definition LoadTimeTracker.h:63
CORE_API void StopAccumulatedLoadTimes()
Definition LoadTimeTracker.cpp:383
CORE_API void ReportScopeTime(double ScopeTime, const FName ScopeLabel)
Definition LoadTimeTracker.cpp:33
CORE_API void ResetRawLoadTimes()
Definition LoadTimeTracker.cpp:229
CORE_API void ResetHighLevelLoadTimes()
Definition LoadTimeTracker.cpp:81
const TMap< FName, TArray< double > > & GetData() const
Definition LoadTimeTracker.h:53
static void ResetRawLoadTimesStatic()
Definition LoadTimeTracker.h:70
bool IsAccumulating()
Definition LoadTimeTracker.h:89
static void DumpHighLevelLoadTimesStatic()
Definition LoadTimeTracker.h:48
CORE_API void StartAccumulatedLoadTimes()
Definition LoadTimeTracker.cpp:377
CORE_API void DumpHighLevelLoadTimes() const
Definition LoadTimeTracker.cpp:49
CORE_API double & GetScopeTimeAccumulator(const FName &ScopeLabel, const FName &ScopeInstance)
Definition LoadTimeTracker.cpp:40
CORE_API void DumpRawLoadTimes() const
Definition LoadTimeTracker.cpp:90
Definition NameTypes.h:617
Definition ScopedTimers.h:66
Definition UnrealString.h.inl:34
Definition LoadTimeTracker.h:266
static CORE_API double DummyTimer
Definition LoadTimeTracker.h:267