20#if RHI_NEW_GPU_PROFILER
62 return !(*
this == RHS);
78 default:
return TEXT(
"<unknown>");
107 #if WITH_RHI_BREADCRUMBS
146 #if WITH_RHI_BREADCRUMBS
154 , GPUTimestampTOP(GPUTimestampTOP)
161 uint64 GPUTimestampBOP = 0;
165 , GPUTimestampBOP(GPUTimestampBOP)
263 #if WITH_RHI_BREADCRUMBS
279 FrameTime = FStorage::IndexOfType<FFrameTime >(),
280 #if WITH_RHI_BREADCRUMBS
281 BeginBreadcrumb = FStorage::IndexOfType<FBeginBreadcrumb>(),
282 EndBreadcrumb = FStorage::IndexOfType<FEndBreadcrumb >(),
284 BeginWork = FStorage::IndexOfType<FBeginWork >(),
285 EndWork = FStorage::IndexOfType<FEndWork >(),
286 Stats = FStorage::IndexOfType<FStats >(),
287 SignalFence = FStorage::IndexOfType<FSignalFence >(),
288 WaitFence = FStorage::IndexOfType<FWaitFence >(),
289 Flip = FStorage::IndexOfType<FFlip >(),
290 VSync = FStorage::IndexOfType<FVsync >()
300 template <
typename T>
321 #if WITH_RHI_BREADCRUMBS
326 static constexpr uint32 ChunkSizeInBytes = 16 * 1024;
334 void*
operator new(
size_t Size)
338 void*
Memory = MemoryPool.Pop();
341 Memory = FMemory::Malloc(
sizeof(FChunk),
alignof(FChunk));
350 void operator delete(
void* Pointer)
355 MemoryPool.Push(Pointer);
360 return Elements[
Index].GetTypedPtr();
364 static_assert(
sizeof(FChunk) <= FChunk::ChunkSizeInBytes,
"Incorrect FChunk size.");
366 FChunk* First =
nullptr;
367 FChunk* Current =
nullptr;
379 : First (
Other.First)
383 Other.First =
nullptr;
384 Other.Current =
nullptr;
391 FChunk*
Next = First->Header.Next;
400 static_assert(std::is_trivially_destructible_v<TEventType>,
"Destructors are not called on GPU profiler events, so the types must be trivially destructible.");
411 if (
Current->Header.Num >= FChunk::MaxEventsPerChunk)
423 #if WITH_RHI_BREADCRUMBS
425 std::is_same_v<UE::RHI::GPUProfiler::FEvent::FBeginBreadcrumb, TEventType> ||
426 std::is_same_v<UE::RHI::GPUProfiler::FEvent::FEndBreadcrumb , TEventType> ||
427 std::is_same_v<UE::RHI::GPUProfiler::FEvent::FFrameBoundary , TEventType>
434 Current->Header.BreadcrumbAllocators.AddUnique(Data.Breadcrumb->Allocator);
444 return First ==
nullptr;
456 else if (!
Other.IsEmpty())
462 Other.Current =
nullptr;
463 Other.First =
nullptr;
477 FEventStream::FChunk* Current;
535 #if CSV_PROFILER_STATS
542 static TCHAR const* GetTypeString(
EType Type);
584 template <
typename TNameProv
ider>
592 template <
typename TNameProv
ider>
626 NumDraws =
rhs.NumDraws;
627 NumPrimitives =
rhs.NumPrimitives;
628 NumVertices =
rhs.NumVertices;
629 NumDispatches =
rhs.NumDispatches;
669 NumDraws +=
rhs.NumDraws;
670 NumPrimitives +=
rhs.NumPrimitives;
671 NumVertices +=
rhs.NumVertices;
672 NumDispatches +=
rhs.NumDispatches;
688 FGPUProfilerEventNode(
const TCHAR* InName, FGPUProfilerEventNode*
InParent) :
700 FGPUProfilerEventNode*
Parent;
705 virtual float GetTiming() {
return 0.0f; }
706 virtual void StartTiming() {}
707 virtual void StopTiming() {}
711struct FGPUProfilerEventNodeFrame
719 virtual void StartFrame() {}
728 virtual float GetRootTimingResults() {
return 0.0f; }
731 virtual void LogDisjointQuery() {}
733 virtual bool PlatformDisablesVSync()
const {
return false; }
757 static bool IsSupported()
782 typedef void (PlatformStaticInitialize)(
void*);
783 static void StaticInitialize(
void* UserData, PlatformStaticInitialize*
PlatformFunction)
789 if (GetTimingFrequency() != 0)
899 void RegisterGPUWork(
uint32 NumPrimitives = 0,
uint32 NumVertices = 0)
901 RegisterGPUWork(1, NumPrimitives, NumVertices);
914 virtual FGPUProfilerEventNode* CreateEventNode(
const TCHAR* InName, FGPUProfilerEventNode*
InParent)
916 return new FGPUProfilerEventNode(InName,
InParent);
920 RHI_API virtual void PopEvent();
963 static constexpr uint32 MaxLength = 16;
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
#define NULL
Definition oodle2base.h:134
#define check(expr)
Definition AssertionMacros.h:314
@ InPlace
Definition CoreMiscDefines.h:162
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
UE::FPlatformRecursiveMutex FCriticalSection
Definition CriticalSection.h:53
RHI_API FRHIGPUFrameTimeHistory GRHIGPUFrameTimeHistory
Definition GPUProfiler.cpp:2672
const bool
Definition NetworkReplayStreaming.h:178
#define WITH_RHI_BREADCRUMBS
Definition RHIBreadcrumbs.h:25
FStringBuilderBase & operator+=(FStringBuilderBase &Builder, ANSICHAR Char)
Definition StringBuilder.h:582
CORE_API bool IsInRHIThread()
Definition ThreadingBase.cpp:339
CORE_API bool IsInRenderingThread()
Definition ThreadingBase.cpp:273
uint32 Size
Definition VulkanMemory.cpp:4034
if(Failed) console_printf("Failed.\n")
Definition NameTypes.h:617
Definition GPUProfiler.h:954
RHI_API EResult PopFrameCycles(uint64 &OutCycles64)
Definition GPUProfiler.cpp:2674
Definition GPUProfiler.h:939
EResult
Definition GPUProfiler.h:942
RHI_API void PushFrameCycles(double GPUFrequency, uint64 GPUCycles)
Definition GPUProfiler.cpp:2706
Definition RefCounting.h:252
Definition ArrayView.h:139
Definition LockFreeList.h:904
Definition UnrealString.h.inl:34
Definition SharedPointer.h:153
Definition StaticArray.h:26
Definition UniquePtr.h:107
SIZE_T GetIndex() const
Definition TVariant.h:231
Definition GPUProfiler.h:310
bool IsEmpty() const
Definition GPUProfiler.h:442
FQueue const Queue
Definition GPUProfiler.h:370
FEventStream(FQueue const Queue)
Definition GPUProfiler.h:372
TEventType & Emplace(TArgs &&... Args)
Definition GPUProfiler.h:398
void Append(FEventStream &&Other)
Definition GPUProfiler.h:447
FEventStream(FEventStream &&Other)
Definition GPUProfiler.h:378
FEventStream(FEventStream const &)=delete
~FEventStream()
Definition GPUProfiler.h:387
Definition GpuProfilerTrace.cpp:270
RHI_API void ProcessEvents(TArrayView< FEventStream > EventStreams)
RHI_API void InitializeQueues(TConstArrayView< FQueue > Queues)
RHI_API bool IsProfiling()
@ false
Definition radaudio_common.h:23
U16 Index
Definition radfft.cpp:71
static UE_FORCEINLINE_HINT void * Memset(void *Dest, uint8 Char, SIZE_T Count)
Definition UnrealMemory.h:119
Definition RHIStats.h:110
Definition Optional.h:131
Definition LightweightStats.h:416
Definition GPUProfiler.h:471
FEvent const * Peek() const
Definition GPUProfiler.h:486
FIterator(TSharedRef< FEventStream > const &Stream)
Definition GPUProfiler.h:481
FEvent const * Pop()
Definition GPUProfiler.h:491
friend FEventSink
Definition GPUProfiler.h:472
Definition GPUProfiler.h:468
FEventSink(FEventSink const &)=delete
virtual void ProcessStreams(TConstArrayView< TSharedRef< FEventStream > > EventStreams)=0
FEventSink(FEventSink &&)=delete
virtual void InitializeQueues(TConstArrayView< FQueue > Queues)=0
Definition GPUProfiler.h:172
uint64 GPUTimestampTOP
Definition GPUProfiler.h:177
FBeginWork(uint64 CPUTimestamp, uint64 GPUTimestampTOP=0)
Definition GPUProfiler.h:179
uint64 CPUTimestamp
Definition GPUProfiler.h:174
Definition GPUProfiler.h:187
uint64 GPUTimestampBOP
Definition GPUProfiler.h:188
FEndWork(uint64 GPUTimestampBOP=0)
Definition GPUProfiler.h:190
Definition GPUProfiler.h:251
uint64 GPUTimestamp
Definition GPUProfiler.h:252
Definition GPUProfiler.h:93
FFrameBoundary(uint64 CPUTimestamp, uint32 FrameNumber)
Definition GPUProfiler.h:112
uint64 CPUTimestamp
Definition GPUProfiler.h:95
uint32 FrameNumber
Definition GPUProfiler.h:99
Definition GPUProfiler.h:137
uint64 TotalGPUTime
Definition GPUProfiler.h:139
FFrameTime(uint64 InTotalGPUTime)
Definition GPUProfiler.h:141
Definition GPUProfiler.h:213
uint64 CPUTimestamp
Definition GPUProfiler.h:220
uint64 Value
Definition GPUProfiler.h:223
FSignalFence(uint64 CPUTimestamp, uint64 Value)
Definition GPUProfiler.h:225
Definition GPUProfiler.h:196
uint32 NumDraws
Definition GPUProfiler.h:197
uint32 NumPrimitives
Definition GPUProfiler.h:199
uint32 NumDispatches
Definition GPUProfiler.h:198
uint32 NumVertices
Definition GPUProfiler.h:200
Definition GPUProfiler.h:256
uint64 GPUTimestamp
Definition GPUProfiler.h:257
Definition GPUProfiler.h:233
FQueue Queue
Definition GPUProfiler.h:241
FWaitFence(uint64 CPUTimestamp, uint64 Value, FQueue Queue)
Definition GPUProfiler.h:243
uint64 Value
Definition GPUProfiler.h:238
uint64 CPUTimestamp
Definition GPUProfiler.h:235
Definition GPUProfiler.h:84
FEvent(FEvent const &)=delete
EType GetType() const
Definition GPUProfiler.h:295
FEvent(T const &Value)
Definition GPUProfiler.h:301
FStorage Value
Definition GPUProfiler.h:293
EType
Definition GPUProfiler.h:277
Definition GPUProfiler.h:524
FGPUStat(TCHAR const *StatName, TCHAR const *DisplayName)
Definition GPUProfiler.h:574
TCHAR const *const DisplayName
Definition GPUProfiler.h:533
EType
Definition GPUProfiler.h:526
TCHAR const *const StatName
Definition GPUProfiler.h:532
Definition GPUProfiler.h:25
uint32 Value
Definition GPUProfiler.h:43
uint8 GPU
Definition GPUProfiler.h:39
constexpr bool operator!=(FQueue const &RHS) const
Definition GPUProfiler.h:60
EType Type
Definition GPUProfiler.h:38
constexpr bool operator==(FQueue const &RHS) const
Definition GPUProfiler.h:55
friend uint32 GetTypeHash(FQueue const &Queue)
Definition GPUProfiler.h:65
TCHAR const * GetTypeString() const
Definition GPUProfiler.h:70
uint8 Index
Definition GPUProfiler.h:40
EType
Definition GPUProfiler.h:27
constexpr FQueue(EType Type, uint8 GPU, uint8 Index)
Definition GPUProfiler.h:48
uint8 Padding
Definition GPUProfiler.h:41
Definition GPUProfiler.h:594
Definition GPUProfiler.h:586
TGPUStat()
Definition GPUProfiler.h:587