45 PerfData(std::string name, PerfData* parent);
48 T getData(
const std::string& key)
50 const auto& val = data_.at(key);
51 return std::get<T>(val);
54 std::string name_ =
"";
55 std::map<std::string, std::variant<uint64_t, int64_t, double, UnitAlgebra, std::string>> data_;
56 std::map<std::string, std::pair<std::string, std::string>>
58 PerfData* parent_ =
nullptr;
59 std::vector<PerfData*> children_;
67 enum class TextFormat { plain, tree, list };
68 DataRecord(std::string name, TextFormat format);
74 void setKeys(std::map<std::string, std::pair<std::string, std::string>>& key_map);
76 void setFormat(TextFormat format) { format_ = format; }
80 bool changeLevelDown(std::string name);
81 void addChild(std::string name);
83 void addData(std::string key,
double value);
84 void addData(std::string key, uint64_t value);
85 void addData(std::string key, int64_t value);
87 void addData(std::string key, std::string value);
88 void addData(std::map<std::string, std::variant<uint64_t, int64_t, double, UnitAlgebra, std::string>> data);
105 DataRecord* createDataRecord(std::string name, DataRecord::TextFormat format = DataRecord::TextFormat::plain);
107 void output(
int rank,
int num_ranks);
109 void configureOutput(std::string output_str);
110 void outputRecordToTextTree(
const PerfData* node, std::stringstream* sstr);
112 void outputNodeToTextTree(
113 const PerfData* node, std::stringstream* sstr,
bool last_child, std::vector<int> levels_has_more_siblings = {});
114 void printTreeIndent(
115 std::stringstream* sstr,
const std::vector<int>& levels_has_more_siblings,
size_t indent_level);
116 void outputValueToText(
117 const std::variant<uint64_t, int64_t, double, UnitAlgebra, std::string>& v, std::stringstream* sstr);
118 std::string convertValueToString(
const std::variant<uint64_t, int64_t, double, UnitAlgebra, std::string>& v);
119 void outputRecordToText(
const PerfData* node, std::stringstream* sstr,
int indent = 0,
bool print_name =
true);
120 void outputRecordToTextList(
const PerfData* node, std::stringstream* sstr,
bool header);
121 void outputRecordToJSON(
const PerfData* node, nlohmann::ordered_json* obj);
122 size_t recordCount();
127 bool output_console_ =
false;
128 std::string filename_;
129 std::map<std::string, DataRecord*>
131 mutable std::mutex mtx;