UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
MetalCounterSampler.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "MetalThirdParty.h"
7
17
18class FMetalDevice;
20{
21 FMetalCounterSample(EMetalCounterSampleType Type, MTL::CounterSampleBuffer* Buffer, uint32_t InOffset)
22 : SampleType(Type)
23 , Offset(InOffset)
25 {}
26
31
34
35 void* operator new(size_t Size)
36 {
37 check(Size == sizeof(FMetalCounterSample));
38
39 void* Memory = MemoryPool.Pop();
40 if (Memory == nullptr)
41 {
42 Memory = FMemory::Malloc(sizeof(FMetalCounterSample), alignof(FMetalCounterSample));
43 }
44
45 return Memory;
46 }
47
48 void operator delete(void* Pointer)
49 {
50 MemoryPool.Push(Pointer);
51 }
52
54
57 MTL::CounterSampleBuffer* SampleBuffer;
58 bool bResolved = false;
60};
61
63
65{
66public:
69
73 FMetalCounterSamplePtr SetupBoundaryCounters(MTL::RenderCommandEncoder* RenderCommandEncoder);
74 FMetalCounterSamplePtr SetupBoundaryCounters(MTL::ComputeCommandEncoder* ComputeCommandEncoder);
75 FMetalCounterSamplePtr SetupBoundaryCounters(MTL::BlitCommandEncoder* BlitCommandEncoder);
76
77 MTL::CounterSampleBuffer* SwapOrAllocateBuffer(uint32_t SampleSize, uint32_t& OutOffset);
78
79private:
80 FMetalDevice* Device;
81 MTL::CounterSampleBuffer* SampleBuffer = nullptr;
82 TArray<MTL::CounterSampleBuffer*> SampleBufferFreePool;
83 FCriticalSection Mutex;
84
85 uint32_t Offset = 0;
86 uint32_t Size = 0;
87};
#define check(expr)
Definition AssertionMacros.h:314
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
UE::FPlatformRecursiveMutex FCriticalSection
Definition CriticalSection.h:53
TSharedPtr< FMetalCounterSample > FMetalCounterSamplePtr
Definition MetalCounterSampler.h:62
EMetalCounterSampleType
Definition MetalCounterSampler.h:9
uint32 Size
Definition VulkanMemory.cpp:4034
Definition MetalCounterSampler.h:65
MTL::CounterSampleBuffer * SwapOrAllocateBuffer(uint32_t SampleSize, uint32_t &OutOffset)
Definition MetalCounterSampler.cpp:111
~FMetalCounterSampler()
Definition MetalCounterSampler.cpp:106
FMetalCounterSamplePtr SetupStageCounters(MTL::ComputePassDescriptor *ComputePassDesc)
Definition MetalCounterSampler.cpp:173
FMetalCounterSamplePtr SetupBoundaryCounters(MTL::RenderCommandEncoder *RenderCommandEncoder)
Definition MetalCounterSampler.cpp:230
Definition MetalDevice.h:102
Definition Array.h:670
void Push(T *NewItem)
Definition LockFreeList.h:849
T * Pop()
Definition LockFreeList.h:858
Definition LockFreeList.h:904
Definition SharedPointer.h:692
Definition MetalCounterSampler.h:20
uint64_t StartTime
Definition MetalCounterSampler.h:59
bool IsStageType()
Definition MetalCounterSampler.h:27
uint32_t Offset
Definition MetalCounterSampler.h:56
EMetalCounterSampleType SampleType
Definition MetalCounterSampler.h:55
void ResolveStageCounters(uint64_t &InStartTime, uint64_t &InEndTime)
Definition MetalCounterSampler.cpp:12
uint64_t EndTime
Definition MetalCounterSampler.h:59
MTL::CounterSampleBuffer * SampleBuffer
Definition MetalCounterSampler.h:57
bool bResolved
Definition MetalCounterSampler.h:58
FMetalCounterSample(EMetalCounterSampleType Type, MTL::CounterSampleBuffer *Buffer, uint32_t InOffset)
Definition MetalCounterSampler.h:21
static TLockFreePointerListUnordered< void, PLATFORM_CACHE_LINE_SIZE > MemoryPool
Definition MetalCounterSampler.h:53
void ResolveBoundaryCounter(uint64_t &Time)
Definition MetalCounterSampler.cpp:75