UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
GpuProfilerTrace.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreTypes.h"
7#include "RHIDefinitions.h"
8#include "Trace/Config.h"
9#include "UObject/NameTypes.h"
10
11// Tracing for the new GPU Profiler
12#ifndef UE_TRACE_GPU_PROFILER_ENABLED
13 #define UE_TRACE_GPU_PROFILER_ENABLED UE_TRACE_ENABLED && RHI_NEW_GPU_PROFILER && !UE_BUILD_SHIPPING
14#endif
15
16#if GPUPROFILERTRACE_ENABLED
17
18#if RHI_NEW_GPU_PROFILER
19// Define this structure here when the new GPU profiler is enabled so we can still build the old trace API.
20// @todo - remove this. GPU timestamp calibration is no longer necessary with the new GPU profiler, as the
21// platform RHIs are expected to translate timestamps from GPU to CPU clock domain before they reach the profiler.
23{
26};
27#endif
28
29class FName;
30
31#if RHI_NEW_GPU_PROFILER
32// Adds a GPUIndex argument to each function in the API without breaking back compat
33#define GPU_TRACE_ARG , uint32 GPUIndex
34#else
35#define GPU_TRACE_ARG
36#endif
37
38struct FGpuProfilerTrace
39{
44 RHI_API static void EndFrame(uint32 GPUIndex);
45 RHI_API static void Deinitialize();
46};
47
48#undef GPU_TRACE_ARG
49
50#endif // GPUPROFILERTRACE_ENABLED
51
52// Deprecated macros
53#define TRACE_GPUPROFILER_DEFINE_EVENT_TYPE(...) UE_DEPRECATED_MACRO(5.6, "TRACE_GPUPROFILER_DEFINE_EVENT_TYPE has been deprecated and it is non functional. Use standard RHI breadcrumb events instead.")
54#define TRACE_GPUPROFILER_DECLARE_EVENT_TYPE_EXTERN(...) UE_DEPRECATED_MACRO(5.6, "TRACE_GPUPROFILER_DECLARE_EVENT_TYPE_EXTERN has been deprecated and it is non functional. Use standard RHI breadcrumb events instead.")
55#define TRACE_GPUPROFILER_EVENT_TYPE(...) UE_DEPRECATED_MACRO(5.6, "TRACE_GPUPROFILER_EVENT_TYPE has been deprecated and it is non functional. Use standard RHI breadcrumb events instead.") nullptr
56#define TRACE_GPUPROFILER_BEGIN_FRAME(...) UE_DEPRECATED_MACRO(5.6, "TRACE_GPUPROFILER_BEGIN_FRAME has been deprecated and it is non functional. Use standard RHI breadcrumb events instead.")
57#define TRACE_GPUPROFILER_BEGIN_EVENT(...) UE_DEPRECATED_MACRO(5.6, "TRACE_GPUPROFILER_BEGIN_EVENT has been deprecated and it is non functional. Use standard RHI breadcrumb events instead.")
58#define TRACE_GPUPROFILER_END_EVENT(...) UE_DEPRECATED_MACRO(5.6, "TRACE_GPUPROFILER_END_EVENT has been deprecated and it is non functional. Use standard RHI breadcrumb events instead.")
59#define TRACE_GPUPROFILER_END_FRAME(...) UE_DEPRECATED_MACRO(5.6, "TRACE_GPUPROFILER_END_FRAME has been deprecated and it is non functional. Use standard RHI breadcrumb events instead.")
60#define TRACE_GPUPROFILER_DEINITIALIZE(...) UE_DEPRECATED_MACRO(5.6, "TRACE_GPUPROFILER_DEINITIALIZE has been deprecated and it is non functional. Use standard RHI breadcrumb events instead.")
61
62class FCborWriter;
63class FDebugName;
64class FMemoryWriter;
65
67{
69{
70public:
73
74 RHI_API void AppendValue(const ANSICHAR* Value);
75 RHI_API void AppendValue(const WIDECHAR* Value);
76 RHI_API void AppendValue(const UTF8CHAR* Value);
79 RHI_API void AppendValue(bool Value);
80 RHI_API void AppendValue(const FName& Value);
81 RHI_API void AppendValue(const FString& Value);
83 RHI_API void AppendValue(double Value);
84
102 {
104 }
106 {
108 }
109
110 void AppendValue(float Value)
111 {
112 AppendValue((double)Value);
113 }
114
115 const TArray<uint8>& GetData() const { return CborData; }
116
117private:
118 FCborWriter* CborWriter;
119 FMemoryWriter* MemoryWriter;
120 TArray<uint8> CborData;
121};
122
124{
125#if UE_TRACE_GPU_PROFILER_ENABLED
126private:
127
128 RHI_API static uint32 InternalBreadcrumbSpec(const TCHAR* StaticName, const TCHAR* NameFormat, const TArray<uint8>& FieldNames);
129
130 static std::atomic<uint32> NextSpecId;
131
132public:
133
137 RHI_API static bool IsAvailable();
138
142 RHI_API static void Initialize();
143
147 RHI_API static void InitializeQueue(uint32 QueueId, const TCHAR* Name);
148
152 RHI_API static void FrameBoundary(uint32 QueueId, uint32 FrameId);
153
157 template<size_t Size>
158 static uint32 BreadcrumbSpec(const TCHAR* StaticName, const TCHAR* NameFormat, const std::array<const TCHAR*, Size>& FieldNames)
159 {
160 FMetadataSerializer Serializer;
161 for (const TCHAR* FieldName : FieldNames)
162 {
163 Serializer.AppendValue(FieldName);
164 }
165
166 return InternalBreadcrumbSpec(StaticName, NameFormat, Serializer.GetData());
167 }
168
169 RHI_API static void BeginBreadcrumb(uint32 SpecId, uint32 QueueId, uint64 GPUTimestampTOP, const TArray<uint8>& CborData);
170
174 RHI_API static void EndBreadcrumb(uint32 QueueId, uint64 GPUTimestampBOP);
175
179 RHI_API static void BeginWork(uint32 QueueId, uint64 GPUTimestampTOP, uint64 CPUTimestamp);
180
184 RHI_API static void EndWork(uint32 QueueId, uint64 GPUTimestampBOP);
185
189 RHI_API static void TraceWait(uint32 QueueId, uint64 StartTime, uint64 EndTime);
190
194 RHI_API static void Stats(uint32 QueueId, uint32 NumDraws, uint32 NumPrimitives);
195
200
205
206#else
207 static bool IsAvailable() { return false; }
208 static void Initialize() {}
209 static void InitializeQueue(uint32 QueueId, const TCHAR* Name) {}
210 static void FrameBoundary(uint32 QueueId, uint32 FrameId) {}
211 static void BeginBreadcrumb(uint32 SpecId, uint32 QueueId, uint64 GPUTimestampTOP, const TArray<uint8>& CborData) {}
212 static void EndBreadcrumb(uint32 QueueId, uint64 GPUTimestampBOP) {}
213 static void BeginWork(uint32 QueueId, uint64 GPUTimestampTOP, uint64 CPUTimestamp) {}
214 static void EndWork(uint32 QueueId, uint64 GPUTimestampBOP) {}
215 static void TraceWait(uint32 QueueId, uint64 StartTime, uint64 EndTime) {}
216 static void Stats(uint32 QueueId, uint32 NumDraws, uint32 NumPrimitives) {}
219
220 template<size_t Size>
221 static uint32 BreadcrumbSpec(const TCHAR* StaticName, const TCHAR* NameFormat, const std::array<const TCHAR*, Size>& FieldNames) { return 0; }
222#endif
223};
224
225}
226
FPlatformTypes::int16 int16
A 16-bit signed integer.
Definition Platform.h:1123
FPlatformTypes::int8 int8
An 8-bit signed integer.
Definition Platform.h:1121
FPlatformTypes::TCHAR TCHAR
Either ANSICHAR or WIDECHAR, depending on whether the platform supports wide characters or the requir...
Definition Platform.h:1135
FPlatformTypes::WIDECHAR WIDECHAR
A wide character. Normally a signed type.
Definition Platform.h:1133
FPlatformTypes::int64 int64
A 64-bit signed integer.
Definition Platform.h:1127
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
FPlatformTypes::UTF8CHAR UTF8CHAR
An 8-bit character containing a UTF8 (Unicode, 8-bit, variable-width) code unit.
Definition Platform.h:1137
FPlatformTypes::ANSICHAR ANSICHAR
An ANSI character. Normally a signed type.
Definition Platform.h:1131
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
uint8_t uint8
Definition binka_ue_file_header.h:8
uint16_t uint16
Definition binka_ue_file_header.h:7
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition CborWriter.h:20
Definition RHIDefinitions.h:95
Definition MemoryWriter.h:101
Definition NameTypes.h:617
Definition Array.h:670
Definition GpuProfilerTrace.h:69
RHI_API FMetadataSerializer()
Definition GpuProfilerTrace.cpp:477
RHI_API void AppendValue(const ANSICHAR *Value)
Definition GpuProfilerTrace.cpp:490
void AppendValue(uint8 Value)
Definition GpuProfilerTrace.h:105
RHI_API ~FMetadataSerializer()
Definition GpuProfilerTrace.cpp:484
void AppendValue(uint32 Value)
Definition GpuProfilerTrace.h:97
void AppendValue(int8 Value)
Definition GpuProfilerTrace.h:93
void AppendValue(int16 Value)
Definition GpuProfilerTrace.h:89
void AppendValue(int32 Value)
Definition GpuProfilerTrace.h:85
void AppendValue(uint16 Value)
Definition GpuProfilerTrace.h:101
const TArray< uint8 > & GetData() const
Definition GpuProfilerTrace.h:115
void AppendValue(float Value)
Definition GpuProfilerTrace.h:110
Definition GpuProfilerTrace.cpp:270
Definition GpuProfilerTrace.h:124
static void BeginWork(uint32 QueueId, uint64 GPUTimestampTOP, uint64 CPUTimestamp)
Definition GpuProfilerTrace.h:213
static void FrameBoundary(uint32 QueueId, uint32 FrameId)
Definition GpuProfilerTrace.h:210
static void WaitFence(uint32 QueueId, uint64 ResolvedTimestamp, uint32 QueueToWaitForId, uint64 Value)
Definition GpuProfilerTrace.h:218
static void EndWork(uint32 QueueId, uint64 GPUTimestampBOP)
Definition GpuProfilerTrace.h:214
static void BeginBreadcrumb(uint32 SpecId, uint32 QueueId, uint64 GPUTimestampTOP, const TArray< uint8 > &CborData)
Definition GpuProfilerTrace.h:211
static void SignalFence(uint32 QueueId, uint64 ResolvedTimestamp, uint64 Value)
Definition GpuProfilerTrace.h:217
static void EndBreadcrumb(uint32 QueueId, uint64 GPUTimestampBOP)
Definition GpuProfilerTrace.h:212
static void Initialize()
Definition GpuProfilerTrace.h:208
static void Stats(uint32 QueueId, uint32 NumDraws, uint32 NumPrimitives)
Definition GpuProfilerTrace.h:216
static uint32 BreadcrumbSpec(const TCHAR *StaticName, const TCHAR *NameFormat, const std::array< const TCHAR *, Size > &FieldNames)
Definition GpuProfilerTrace.h:221
static void InitializeQueue(uint32 QueueId, const TCHAR *Name)
Definition GpuProfilerTrace.h:209
static void TraceWait(uint32 QueueId, uint64 StartTime, uint64 EndTime)
Definition GpuProfilerTrace.h:215
static bool IsAvailable()
Definition GpuProfilerTrace.h:207