#ifndef MEDIAPIPE_FRAMEWORK_PROFILER_REPORTER_STATISTIC_H_
#define MEDIAPIPE_FRAMEWORK_PROFILER_REPORTER_STATISTIC_H_
#include "mediapipe/framework/calculator.pb.h"
#include "mediapipe/framework/calculator_profile.pb.h"
namespace mediapipe {
namespace reporter {
// Allows the user to push data and maintains a counter, mean, and stddev of
// that data.
class Statistic {
public:
Statistic() : counter_(0) {}
// Clears the current statistic.
void Clear() { counter_ = 0; }
// Pushes a single value into the statistic, updating mean and stddev.
void Push(double x);
// Returns the number of data points used to calculate the mean and stddev.
int data_count() const;
// Returns the mean of the data pushed into this statistic.
double mean() const;
// Returns the variance of the data pushed into this statistic.
double variance() const;
// Returns the standard deviation of the data pushed into this statistic.
double stddev() const;
// Returns the sum of values of this statistic.
double total() const;
private:
int counter_;
double total_impl_;
// Welford's algorithm allows us to keep a running standard deviation. We need
// to hang onto the mean and sum of squared differences in between calls to
// push().
double mean_;
double ssd_;
};
} // namespace reporter
} // namespace mediapipe
#endif // MEDIAPIPE_FRAMEWORK_PROFILER_REPORTER_STATISTIC_H_