fpmas 1.6
perf.h
Go to the documentation of this file.
1#ifndef FPMAS_PERF_H
2#define FPMAS_PERF_H
3
8#include <unordered_map>
9#include <functional>
11#include "nlohmann/json.hpp"
12#include "fpmas/io/csv_output.h"
14
15namespace fpmas { namespace utils { namespace perf {
19
24 private:
25 std::string _label;
26 std::vector<Duration> _durations;
27 ClockTime start_time;
28 std::function<bool()> condition {[] {return true;}};
29 bool running = false;
30
31 public:
37 Probe(std::string label) : _label(label) {}
70 Probe(std::string label, std::function<bool()> condition) :
71 _label(label), condition(condition) {}
72
73 std::string label() const override {
74 return _label;
75 }
76
77 std::vector<Duration>& durations() override {
78 return _durations;
79 }
80 const std::vector<Duration>& durations() const override {
81 return _durations;
82 }
83
84 void start() override;
85 void stop() override;
86 };
87
92 private:
93 mutable std::unordered_map<std::string, std::pair<std::size_t, Duration>> data;
94
95 public:
96 void commit(api::utils::perf::Probe& probe) override;
97 std::size_t callCount(std::string probe_label) const override;
98 Duration totalDuration(std::string probe_label) const override;
99 void clear() override;
100 };
101
111 private:
113 api::model::Behavior& behavior;
114 mutable Probe probe;
115
116 public:
129 api::model::Behavior& behavior,
130 std::string probe_name
131 );
132
139 void execute(api::model::Agent* agent) const override;
140 };
141}}}
142
143namespace nlohmann {
147 template<typename Rep, typename Ratio>
148 struct adl_serializer<std::chrono::duration<Rep, Ratio>> {
156 template<typename JsonType>
157 static void to_json(JsonType& json, const std::chrono::duration<Rep, Ratio>& duration) {
158 json = duration.count();
159 }
167 template<typename JsonType>
168 static void from_json(JsonType& json, std::chrono::duration<Rep, Ratio>& duration) {
169 duration = std::chrono::duration<Rep, Ratio>(json.template get<Rep>());
170 }
171 };
172}
173
174namespace fpmas { namespace io { namespace datapack {
175
179 template<typename Rep, typename Ratio>
180 struct Serializer<std::chrono::duration<Rep, Ratio>> {
185 template<typename Pack>
186 static std::size_t size(
187 const Pack& pack,
188 const std::chrono::duration<Rep, Ratio>&) {
189 return pack.template size<Rep>();
190 }
198 template<typename Pack>
199 static void to_datapack(
200 Pack& pack,
201 const std::chrono::duration<Rep, Ratio>& duration) {
202 pack.put(duration.count());
203 }
211 template<typename Pack>
212 static std::chrono::duration<Rep, Ratio> from_datapack(
213 const Pack& pack) {
214 return std::chrono::duration<Rep, Ratio>(pack.template get<Rep>());
215 }
216 };
217}}}
218
219namespace fpmas { namespace io {
223 template<typename Rep, typename Ratio>
224 struct CsvSerial<std::chrono::duration<Rep, Ratio>> {
236 static std::string to_csv(const std::chrono::duration<Rep, Ratio>& duration) {
237 std::ostringstream os;
238 os << duration.count();
239 return os.str();
240 }
241 };
242}}
243#endif
Definition: model.h:174
Definition: model.h:520
Definition: perf.h:112
Definition: perf.h:53
Definition: perf.h:91
void clear() override
Definition: perf.cpp:38
Duration totalDuration(std::string probe_label) const override
Definition: perf.cpp:34
std::size_t callCount(std::string probe_label) const override
Definition: perf.cpp:30
void commit(api::utils::perf::Probe &probe) override
Definition: perf.cpp:21
Definition: perf.h:110
ProbeBehavior(api::utils::perf::Monitor &monitor, api::model::Behavior &behavior, std::string probe_name)
Definition: perf.cpp:42
void execute(api::model::Agent *agent) const override
Definition: perf.cpp:50
Definition: perf.h:23
std::vector< Duration > & durations() override
Definition: perf.h:77
void start() override
Definition: perf.cpp:7
Probe(std::string label, std::function< bool()> condition)
Definition: perf.h:70
void stop() override
Definition: perf.cpp:14
Probe(std::string label)
Definition: perf.h:37
std::string label() const override
Definition: perf.h:73
const std::vector< Duration > & durations() const override
Definition: perf.h:80
std::chrono::steady_clock Clock
Definition: perf.h:17
std::chrono::steady_clock::duration Duration
Definition: perf.h:21
std::chrono::steady_clock::time_point ClockTime
Definition: perf.h:25
Definition: fpmas.cpp:3
static std::string to_csv(const std::chrono::duration< Rep, Ratio > &duration)
Definition: perf.h:236
Definition: csv_output.h:31
static std::size_t size(const Pack &pack, const std::chrono::duration< Rep, Ratio > &)
Definition: perf.h:186
static void to_datapack(Pack &pack, const std::chrono::duration< Rep, Ratio > &duration)
Definition: perf.h:199
static std::chrono::duration< Rep, Ratio > from_datapack(const Pack &pack)
Definition: perf.h:212
Definition: datapack.h:55
static void from_json(JsonType &json, std::chrono::duration< Rep, Ratio > &duration)
Definition: perf.h:168
static void to_json(JsonType &json, const std::chrono::duration< Rep, Ratio > &duration)
Definition: perf.h:157