36 f64 to_prof_time(
f64 in) {
return (in - time_offset) * 1e6; };
37 f64 to_prof_delta(
f64 in) {
return (in) * 1e6; };
43 std::string category_name;
48 std::string to_string()
const {
49 return shambase::format(
50 "{{\"name\": \"{}\", \"cat\": \"{}\", \"ph\": \"B\", \"ts\": {}, \"pid\": {}, "
55 to_prof_time(t_start),
63 std::string category_name;
68 std::string to_string()
const {
69 return shambase::format(
70 "{{\"name\": \"{}\", \"cat\": \"{}\", \"ph\": \"E\", \"ts\": {}, \"pid\": {}, "
81 struct EventComplete {
83 std::string category_name;
89 std::string to_string()
const {
90 return shambase::format(
91 "{{\"name\": \"{}\", \"cat\": \"{}\", \"ph\": \"X\", \"ts\": {}, \"dur\": {}, "
97 to_prof_time(t_start),
98 to_prof_delta(tend - t_start),
104 struct CounterEvent {
110 std::string to_string()
const {
111 return shambase::format(
112 "{{ \"pid\": {}, \"ph\": \"C\", \"ts\": {}, \"args\": {{\"{}\": {:e} }} }},\n",
120 using var_t = std::variant<EventStart, EventEnd, EventComplete, CounterEvent>;
123 std::string to_string()
const {
126 return v.to_string();
131 void change_pid(
u64 new_pid) {
140 struct EventStorage {
142 std::vector<ChromeEvent> events = {};
143 std::string filename_prefix =
"shamrock_chrome_trace";
144 std::unique_ptr<std::ofstream> stream;
146 EventStorage(std::string filename) : filename_prefix(filename) {}
148 void flush_events() {
155 std::string filename = filename_prefix +
"_" + std::to_string(chrome_pid) +
".json";
156 stream = std::make_unique<std::ofstream>(filename);
159 for (
auto &e : events) {
160 e.change_pid(chrome_pid);
161 auto event = e.to_string();
168 void register_event(ChromeEvent event) {
169 events.push_back(event);
173 void register_event(ChromeEvent::EventStart event) { register_event(ChromeEvent{
event}); }
175 void register_event(ChromeEvent::EventEnd event) { register_event(ChromeEvent{
event}); }
177 void register_event(ChromeEvent::EventComplete event) {
178 register_event(ChromeEvent{
event});
181 void register_event(ChromeEvent::CounterEvent event) { register_event(ChromeEvent{
event}); }
184 auto get_prof_prefix = []() {
185 const char *val = std::getenv(
"SHAM_PROF_PREFIX");
186 if (val !=
nullptr) {
187 return std::string(val);
189 return std::string(
"shamrock_profile");
192 std::string prof_prefix = get_prof_prefix();
193 EventStorage event_storage{prof_prefix};
198 const std::string &name,
const std::string &category_name,
f64 t_start,
u64 pid,
u64 tid) {
200 event_storage.register_event(ChromeEvent::EventStart{name, category_name, t_start, pid, tid});
204 const std::string &name,
const std::string &category_name,
f64 tend,
u64 pid,
u64 tid) {
205 event_storage.register_event(ChromeEvent::EventEnd{name, category_name, tend, pid, tid});
209 const std::string &name,
210 const std::string &category_name,
216 event_storage.register_event(
217 ChromeEvent::EventComplete{name, category_name, t_start, tend, pid, tid});
221 u64 pid,
u64 tid,
const std::string &name) {
226 u64 pid,
f64 t,
const std::string &name,
f64 val) {
228 event_storage.register_event(ChromeEvent::CounterEvent{name, t, val, pid});
double f64
Alias for double.
std::uint32_t u32
32 bit unsigned integer
std::uint64_t u64
64 bit unsigned integer
void register_event_complete(const std::string &name, const std::string &category_name, f64 t_start, f64 tend, u64 pid, u64 tid)
Register a complete event in Chrome tracing.
void set_time_offset(f64 offset)
Set the time offset used for Chrome tracing.
void register_counter_val(u64 pid, f64 t, const std::string &name, f64 val)
Register a counter value in Chrome tracing.
void set_chrome_pid(u32 pid)
Set the Chrome tracing process id.
void register_metadata_thread_name(u64 pid, u64 tid, const std::string &name)
Register a thread name in Chrome tracing.
void register_event_end(const std::string &name, const std::string &category_name, f64 tend, u64 pid, u64 tid)
Register the end of an event in Chrome tracing.
void register_event_start(const std::string &name, const std::string &category_name, f64 t_start, u64 pid, u64 tid)
Register the start of an event in Chrome tracing.
constexpr u32 u32_max
u32 max value