68#ifndef ORTOOLS_UTIL_STATS_H_
69#define ORTOOLS_UTIL_STATS_H_
76#include "absl/container/flat_hash_map.h"
77#include "absl/strings/string_view.h"
78#include "absl/time/time.h"
93 explicit Stat(absl::string_view name) : name_(name) {}
100 std::string
Name()
const {
return name_; }
113 virtual double Sum()
const {
return 0; }
125 const std::string name_;
137 : name_(name), stats_(), time_distributions_() {}
168 std::vector<Stat*> stats_;
169 absl::flat_hash_map<std::string, std::unique_ptr<TimeDistribution>>
182 void Reset()
override;
254 const double cycles =
static_cast<double>(timer_.GetCycles());
262 static std::string PrintCyclesAsTime(
double cycles);
274 void Add(
double value);
286 void Add(
double value);
298 void Add(int64_t value);
319 : stat_(stat), also_update_(nullptr) {
329 const double cycles = stat_->StopTimerAndAddElapsedTime();
330 if (also_update_ !=
nullptr) {
331 also_update_->AddTimeInCycles(cycles);
382 absl::string_view function_name)
384 stats->LookupOrCreateTimeDistribution(function_name)) {}
401#define IF_STATS_ENABLED(instructions) instructions
412#define IF_STATS_ENABLED(instructions) \
413 if constexpr (false) { \
419#define SCOPED_TIME_STAT(stats) \
420 operations_research::ScopedTimeStats scoped_time_stat(stats, __FUNCTION__);
422#define SCOPED_INSTRUCTION_COUNT(time_limit)
void AlsoUpdate(TimeDistribution *)
DisabledScopedTimeDistributionUpdater(const DisabledScopedTimeDistributionUpdater &)=delete
DisabledScopedTimeDistributionUpdater(TimeDistribution *)
DisabledScopedTimeDistributionUpdater & operator=(const DisabledScopedTimeDistributionUpdater &)=delete
DisabledScopedTimeStats(StatsGroup *, const char *)
DisabledScopedTimeStats & operator=(DisabledScopedTimeStats &&)=delete
DisabledScopedTimeStats(const DisabledScopedTimeStats &)=delete
DisabledScopedTimeStats(DisabledScopedTimeStats &&)=delete
DisabledScopedTimeStats & operator=(const DisabledScopedTimeStats &)=delete
bool WorthPrinting() const override
double Sum() const override
double StdDeviation() const
~DistributionStat() override
void AddToDistribution(double value)
double sum_squares_from_average_
std::string ValueAsString() const override=0
DistributionStat(absl::string_view name)
std::string ValueAsString() const override
DoubleDistribution(absl::string_view name, StatsGroup *group)
DoubleDistribution(absl::string_view name)
EnabledScopedTimeDistributionUpdater(TimeDistribution *stat)
EnabledScopedTimeDistributionUpdater(const EnabledScopedTimeDistributionUpdater &)=delete
void AlsoUpdate(TimeDistribution *also_update)
~EnabledScopedTimeDistributionUpdater()
EnabledScopedTimeDistributionUpdater & operator=(const EnabledScopedTimeDistributionUpdater &)=delete
EnabledScopedTimeStats & operator=(const EnabledScopedTimeStats &)=delete
EnabledScopedTimeStats(StatsGroup *stats, absl::string_view function_name)
EnabledScopedTimeStats(const EnabledScopedTimeStats &)=delete
EnabledScopedTimeStats & operator=(EnabledScopedTimeStats &&)=delete
EnabledScopedTimeStats(EnabledScopedTimeStats &&)=delete
IntegerDistribution(absl::string_view name, StatsGroup *group)
std::string ValueAsString() const override
IntegerDistribution(absl::string_view name)
std::string ValueAsString() const override
RatioDistribution(absl::string_view name, StatsGroup *group)
RatioDistribution(absl::string_view name)
virtual bool WorthPrinting() const =0
virtual int Priority() const
virtual std::string ValueAsString() const =0
Stat(absl::string_view name)
std::string StatString() const
virtual double Sum() const
StatsGroup(const StatsGroup &)=delete
void SetPrintOrder(PrintOrder print_order)
StatsGroup & operator=(const StatsGroup &)=delete
TimeDistribution * LookupOrCreateTimeDistribution(absl::string_view name)
StatsGroup(absl::string_view name)
@ SORT_BY_PRIORITY_THEN_VALUE
std::string StatString() const
void Register(Stat *stat)
std::string ValueAsString() const override
void AddTimeInSec(double seconds)
TimeDistribution(absl::string_view name)
TimeDistribution(absl::string_view name, StatsGroup *group)
static double CyclesToSeconds(double num_cycles)
double StopTimerAndAddElapsedTime()
void AddTime(absl::Duration duration)
int Priority() const override
void AddTimeInCycles(double cycles)
DisabledScopedTimeDistributionUpdater ScopedTimeDistributionUpdater
DisabledScopedTimeStats ScopedTimeStats
std::string MemoryUsage()