From d456a42cdd27ba9b814f76bf96b7f5da9d05ae37 Mon Sep 17 00:00:00 2001 From: Jason Volk Date: Wed, 24 Jun 2020 08:59:26 -0700 Subject: [PATCH] ircd::json: Add stats items counting calls and cycles on input and output. --- include/ircd/json/util.h | 10 ++++++++++ ircd/json.cc | 7 +++++++ 2 files changed, 17 insertions(+) diff --git a/include/ircd/json/util.h b/include/ircd/json/util.h index 6e432b505..b8ff96542 100644 --- a/include/ircd/json/util.h +++ b/include/ircd/json/util.h @@ -35,8 +35,18 @@ namespace ircd::json bool valid(const string_view &, std::nothrow_t) noexcept; void valid(const string_view &); std::string why(const string_view &); + + struct stats extern stats; } +/// Statistics counter access; unfortunately these cannot participate as +/// ircd::stats items right now. +struct ircd::json::stats +{ + uint64_t print_calls {0}, print_cycles {0}; + uint64_t parse_calls {0}, parse_cycles {0}; +}; + /// Alternative to `json::strung` which uses a fixed array rather than an /// allocated string as the target. template diff --git a/ircd/json.cc b/ircd/json.cc index 3a8180b28..cc4bfe2ad 100644 --- a/ircd/json.cc +++ b/ircd/json.cc @@ -19,6 +19,9 @@ namespace ircd::json } #pragma GCC visibility pop +decltype(ircd::json::stats) +ircd::json::stats; + #pragma GCC visibility push(internal) BOOST_FUSION_ADAPT_STRUCT ( @@ -489,6 +492,8 @@ ircd::json::printer::operator()(mutable_buffer &out, attr&&... a) const { + ++stats.print_calls; + const prof::scope_cycles timer{stats.print_cycles}; if(unlikely(!ircd::generate(out, std::forward(g), std::forward(a)...))) throw print_error { @@ -542,6 +547,8 @@ ircd::json::parser::operator()(const char *&start, attr&&...a) const { + ++stats.parse_calls; + const prof::scope_cycles timer{stats.parse_cycles}; return ircd::parse(start, stop, std::forward(g), std::forward(a)...); }