8#include <unordered_map>
11#include "nlohmann/json.hpp"
15namespace fpmas {
namespace utils {
namespace perf {
26 std::vector<Duration> _durations;
28 std::function<bool()> condition {[] {
return true;}};
70 Probe(std::string
label, std::function<
bool()> condition) :
71 _label(
label), condition(condition) {}
73 std::string
label()
const override {
80 const std::vector<Duration>&
durations()
const override {
84 void start()
override;
93 mutable std::unordered_map<std::string, std::pair<std::size_t, Duration>> data;
97 std::size_t
callCount(std::string probe_label)
const override;
99 void clear()
override;
130 std::string probe_name
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();
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>());
174namespace fpmas {
namespace io {
namespace datapack {
179 template<
typename Rep,
typename Ratio>
185 template<
typename Pack>
188 const std::chrono::duration<Rep, Ratio>&) {
189 return pack.template size<Rep>();
198 template<
typename Pack>
201 const std::chrono::duration<Rep, Ratio>& duration) {
202 pack.put(duration.count());
211 template<
typename Pack>
214 return std::chrono::duration<Rep, Ratio>(pack.template get<Rep>());
219namespace fpmas {
namespace io {
223 template<
typename Rep,
typename Ratio>
236 static std::string
to_csv(
const std::chrono::duration<Rep, Ratio>& duration) {
237 std::ostringstream os;
238 os << duration.count();
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
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
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
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