10 #include "vulkan/vulkan_handles.hpp"
18 class GPUTracerVK :
public std::enable_shared_from_this<GPUTracerVK> {
20 explicit GPUTracerVK(
const std::shared_ptr<DeviceHolder>& device_holder);
43 static const constexpr
size_t kTraceStatesSize = 32u;
48 void OnFenceComplete(
size_t frame);
52 void RecordCmdBufferStart(
const vk::CommandBuffer& buffer,
GPUProbe& probe);
56 void RecordCmdBufferEnd(
const vk::CommandBuffer& buffer,
GPUProbe& probe);
58 const std::shared_ptr<DeviceHolder> device_holder_;
60 struct GPUTraceState {
61 size_t current_index = 0;
62 size_t pending_buffers = 0;
63 vk::UniqueQueryPool query_pool;
66 mutable Mutex trace_state_mutex_;
67 GPUTraceState trace_states_[kTraceStatesSize] IPLR_GUARDED_BY(
69 size_t current_state_ IPLR_GUARDED_BY(trace_state_mutex_) = 0u;
72 float timestamp_period_ = 1;
81 bool in_frame_ =
false;
85 std::thread::id raster_thread_id_;
86 bool enabled_ =
false;
91 explicit GPUProbe(
const std::weak_ptr<GPUTracerVK>& tracer);
109 std::weak_ptr<GPUTracerVK> tracer_;
110 std::optional<size_t> index_ = std::nullopt;