22 class VSG_DECLSPEC ProfileLog :
public Inherit<Object, ProfileLog>
25 explicit ProfileLog(
size_t size = 16384);
40 vsg::time_point cpuTime = {};
43 const Object*
object =
nullptr;
44 uint64_t reference = 0;
45 std::thread::id thread_id = {};
48 std::map<std::thread::id, std::string> threadNames;
49 std::vector<Entry> entries;
50 std::atomic_uint64_t index = 0;
51 std::vector<uint64_t> frameIndices;
52 double timestampScaleToMilliseconds = 1e-6;
54 Entry& enter(uint64_t& reference, Type type)
56 reference = index.fetch_add(1);
57 Entry& enter_entry = entry(reference);
58 enter_entry.enter =
true;
59 enter_entry.type = type;
60 enter_entry.reference = 0;
61 enter_entry.cpuTime = clock::now();
62 enter_entry.gpuTime = 0;
63 enter_entry.thread_id = std::this_thread::get_id();
67 Entry& leave(uint64_t& reference, Type type)
69 Entry& enter_entry = entry(reference);
71 uint64_t new_reference = index.fetch_add(1);
72 Entry& leave_entry = entry(new_reference);
74 enter_entry.reference = new_reference;
75 leave_entry.cpuTime = clock::now();
76 leave_entry.gpuTime = 0;
77 leave_entry.enter =
false;
78 leave_entry.type = type;
79 leave_entry.reference = reference;
80 leave_entry.thread_id = std::this_thread::get_id();
81 reference = new_reference;
85 Entry& entry(uint64_t reference)
87 return entries[reference % entries.size()];
90 void report(std::ostream& out);
91 uint64_t report(std::ostream& out, uint64_t reference);
94 void read(Input& input)
override;
95 void write(Output& output)
const override;
105 mutable std::atomic<uint32_t> queryIndex = 0;
106 std::vector<uint64_t> references;
107 std::vector<uint64_t> timestamps;
109 void writeGpuTimestamp(
CommandBuffer& commandBuffer, uint64_t reference, VkPipelineStageFlagBits pipelineStage);