11#include <fmt/format.h>
28 _report.open(
"profile.json", std::ios::out);
29 _report << R
"([{"name":"process_name","ph":"M","pid":1,"args":{"name":"GPU"}})"
31 _report << R
"({"name":"process_name","ph":"M","pid":2,"args":{"name":"CPU"}})";
41 static ProfileReport &
get()
43 static ProfileReport singleton;
53 std::scoped_lock
lock(_mutex);
55 size_t thread_hash = std::hash<std::thread::id>()(std::this_thread::get_id());
56 int thread_id = _thread_ids.lookup_or_add(thread_hash, _thread_ids.size());
58 _report << fmt::format(
60 R
"({{"name":"{}","ph":"X","ts":{},"dur":{},"pid":1,"tid":{}}})",
63 (gpu_end - gpu_start) / uint64_t(1000),
66 _report << fmt::format(
68 R
"({{"name":"{}","ph":"X","ts":{},"dur":{},"pid":2,"tid":{}}})",
71 (cpu_end - cpu_start) / uint64_t(1000),
77 std::scoped_lock
lock(_mutex);
79 size_t thread_hash = std::hash<std::thread::id>()(std::this_thread::get_id());
80 int thread_id = _thread_ids.lookup_or_add(thread_hash, _thread_ids.size());
82 _report << fmt::format(
84 R
"({{"name":"{}","ph":"X","ts":{},"dur":{},"pid":2,"tid":{}}})",
87 (cpu_end - cpu_start) / uint64_t(1000),
unsigned long long int uint64_t
static ProfileReport & get()
void add_group(StringRefNull name, uint64_t gpu_start, uint64_t gpu_end, uint64_t cpu_start, uint64_t cpu_end)
void add_group_cpu(StringRefNull name, uint64_t cpu_start, uint64_t cpu_end)