7#include <unordered_map>
14#define AVM_TRACK_STATS
18#define AVM_TRACK_TIME(key, body) ::bb::avm2::Stats::get().time(key, [&]() { body; });
20#define AVM_TRACK_TIME_V(key, body) ::bb::avm2::Stats::get().time_r(key, [&]() { return body; });
22#define AVM_TRACK_TIME(key, body) body
23#define AVM_TRACK_TIME_V(key, body) body
33 void time(
const std::string&
key,
const std::function<
void()>& f);
35 template <
typename F>
auto time_r(
const std::string&
key,
F&& f)
37 auto start = std::chrono::system_clock::now();
39 auto elapsed = std::chrono::system_clock::now() - start;
41 static_cast<uint64_t>(std::chrono::duration_cast<std::chrono::milliseconds>(
elapsed).count()));
49 std::string
to_string(
int depth = 2)
const;
57 std::unordered_map<std::string, uint64_t>
stats;
void increment(const std::string &key, uint64_t value)
std::vector< std::pair< std::string, uint64_t > > snapshot() const
auto time_r(const std::string &key, F &&f)
std::string to_string(int depth=2) const
std::unordered_map< std::string, uint64_t > stats
void time(const std::string &key, const std::function< void()> &f)
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept