summaryrefslogtreecommitdiff
path: root/pipetrace.h
diff options
context:
space:
mode:
authorJulian Blake Kongslie2022-10-15 14:01:38 -0700
committerJulian Blake Kongslie2022-10-15 14:01:38 -0700
commit6ddafafa7292f6f6716d6683579bf1ce3287e1d5 (patch)
tree0b215f8e9ddf7010389ead062a8993fdb9142022 /pipetrace.h
downloadnanosim-6ddafafa7292f6f6716d6683579bf1ce3287e1d5.tar.xz
Initial commit (copied from biggolf)
Diffstat (limited to 'pipetrace.h')
-rw-r--r--pipetrace.h37
1 files changed, 37 insertions, 0 deletions
diff --git a/pipetrace.h b/pipetrace.h
new file mode 100644
index 0000000..656b9b9
--- /dev/null
+++ b/pipetrace.h
@@ -0,0 +1,37 @@
1#pragma once
2
3#include <cstdint>
4#include <fmt/format.h>
5#include <ostream>
6#include <string>
7
8namespace infra {
9 struct transaction {
10 std::uint64_t record = ~(std::uint64_t)0;
11 };
12
13 struct pt {
14 static std::ostream *ptfile;
15
16 static std::uint64_t next_record;
17
18 static transaction toplevel() {
19 transaction t;
20 t.record = next_record++;
21 return t;
22 }
23
24 static transaction child(const transaction &p) {
25 transaction t;
26 t.record = next_record++;
27 if (ptfile)
28 *ptfile << fmt::format("{} parent {}\n", t.record, p.record);
29 return t;
30 }
31
32 static void event(const transaction &t, const char *event, std::uint64_t time, const std::string &data) {
33 if (ptfile)
34 *ptfile << fmt::format("@{} {} {} {}\n", time, t.record, event, data);
35 }
36 };
37}