6 #include "absl/container/flat_hash_map.h" 7 #include "absl/strings/string_view.h" 8 #include "base/arena.h" 9 #include "util/stats/varz_node.h" 10 #include "util/uring/sliding_counter.h" 12 #define DEFINE_VARZ(type, name) ::util::uring::type name(#name) 31 virtual AnyValue GetData()
const override;
41 using SumCnt = std::pair<Counter, Counter>;
42 using Map = absl::flat_hash_map<absl::string_view, SumCnt>;
51 void IncBy(absl::string_view key, int32_t delta) {
52 auto& map = avg_map_[ProactorThreadIndex()];
53 auto it = map.find(key);
54 if (it == map.end()) {
57 Inc(delta, &it->second);
61 void Inc(int32_t delta, SumCnt* dest) {
62 dest->first.IncBy(delta);
66 virtual AnyValue GetData()
const override;
67 unsigned ProactorThreadIndex()
const;
68 Map::iterator FindSlow(absl::string_view key);
71 std::unique_ptr<Map[]> avg_map_;
Sliding window data structure that can aggregate moving statistics. It's implmented using ring-buffer...