Sunshine0.0.5917
Sunshine 0.0.5917
Self-hosted game stream host for Moonlight.
Loading...
Searching...
No Matches
stat_trackers.h
Go to the documentation of this file.
1
5#pragma once
6
7// standard includes
8#include <algorithm>
9#include <chrono>
10#include <cstdint>
11#include <functional>
12#include <limits>
13
14// lib includes
15#include <boost/format.hpp>
16
17namespace stat_trackers {
18
24 boost::format one_digit_after_decimal();
25
31 boost::format two_digits_after_decimal();
32
36 template<typename T>
38 public:
42 using callback_function = std::function<void(T stat_min, T stat_max, double stat_avg)>;
43
51 void collect_and_callback_on_interval(T stat, const callback_function &callback, std::chrono::seconds interval_in_seconds) {
52 if (data.calls == 0) {
53 data.last_callback_time = std::chrono::steady_clock::now();
54 } else if (std::chrono::steady_clock::now() > data.last_callback_time + interval_in_seconds) {
55 callback(data.stat_min, data.stat_max, data.stat_total / data.calls);
56 data = {};
57 }
58 data.stat_min = std::min(data.stat_min, stat);
59 data.stat_max = std::max(data.stat_max, stat);
60 data.stat_total += stat;
61 data.calls += 1;
62 }
63
67 void reset() {
68 data = {};
69 }
70
71 private:
72 struct {
73 std::chrono::steady_clock::time_point last_callback_time = std::chrono::steady_clock::now();
74 T stat_min = std::numeric_limits<T>::max();
75 T stat_max = std::numeric_limits<T>::lowest();
76 double stat_total = 0;
77 uint32_t calls = 0;
78 } data;
79 };
80
81} // namespace stat_trackers
Accumulates minimum, maximum, and average values between periodic callbacks.
Definition stat_trackers.h:37
std::function< void(T stat_min, T stat_max, double stat_avg)> callback_function
Callback invoked with the minimum, maximum, and average for one interval.
Definition stat_trackers.h:42
void collect_and_callback_on_interval(T stat, const callback_function &callback, std::chrono::seconds interval_in_seconds)
Add one statistic sample and invoke the callback when the interval elapses.
Definition stat_trackers.h:51
void reset()
Reset the object to its initial empty state.
Definition stat_trackers.h:67
boost::format one_digit_after_decimal()
Create a Boost formatter with one fractional digit.
Definition stat_trackers.cpp:13
boost::format two_digits_after_decimal()
Create a Boost formatter with two fractional digits.
Definition stat_trackers.cpp:20