xref: /aosp_15_r20/external/google-benchmark/src/benchmark_api_internal.h (revision dbb99499c3810fa1611fa2242a2fc446be01a57c)
1*dbb99499SAndroid Build Coastguard Worker #ifndef BENCHMARK_API_INTERNAL_H
2*dbb99499SAndroid Build Coastguard Worker #define BENCHMARK_API_INTERNAL_H
3*dbb99499SAndroid Build Coastguard Worker 
4*dbb99499SAndroid Build Coastguard Worker #include <cmath>
5*dbb99499SAndroid Build Coastguard Worker #include <iosfwd>
6*dbb99499SAndroid Build Coastguard Worker #include <limits>
7*dbb99499SAndroid Build Coastguard Worker #include <memory>
8*dbb99499SAndroid Build Coastguard Worker #include <string>
9*dbb99499SAndroid Build Coastguard Worker #include <vector>
10*dbb99499SAndroid Build Coastguard Worker 
11*dbb99499SAndroid Build Coastguard Worker #include "benchmark/benchmark.h"
12*dbb99499SAndroid Build Coastguard Worker #include "commandlineflags.h"
13*dbb99499SAndroid Build Coastguard Worker 
14*dbb99499SAndroid Build Coastguard Worker namespace benchmark {
15*dbb99499SAndroid Build Coastguard Worker namespace internal {
16*dbb99499SAndroid Build Coastguard Worker 
17*dbb99499SAndroid Build Coastguard Worker // Information kept per benchmark we may want to run
18*dbb99499SAndroid Build Coastguard Worker class BenchmarkInstance {
19*dbb99499SAndroid Build Coastguard Worker  public:
20*dbb99499SAndroid Build Coastguard Worker   BenchmarkInstance(Benchmark* benchmark, int family_index,
21*dbb99499SAndroid Build Coastguard Worker                     int per_family_instance_index,
22*dbb99499SAndroid Build Coastguard Worker                     const std::vector<int64_t>& args, int threads);
23*dbb99499SAndroid Build Coastguard Worker 
name()24*dbb99499SAndroid Build Coastguard Worker   const BenchmarkName& name() const { return name_; }
family_index()25*dbb99499SAndroid Build Coastguard Worker   int family_index() const { return family_index_; }
per_family_instance_index()26*dbb99499SAndroid Build Coastguard Worker   int per_family_instance_index() const { return per_family_instance_index_; }
aggregation_report_mode()27*dbb99499SAndroid Build Coastguard Worker   AggregationReportMode aggregation_report_mode() const {
28*dbb99499SAndroid Build Coastguard Worker     return aggregation_report_mode_;
29*dbb99499SAndroid Build Coastguard Worker   }
time_unit()30*dbb99499SAndroid Build Coastguard Worker   TimeUnit time_unit() const { return time_unit_; }
measure_process_cpu_time()31*dbb99499SAndroid Build Coastguard Worker   bool measure_process_cpu_time() const { return measure_process_cpu_time_; }
use_real_time()32*dbb99499SAndroid Build Coastguard Worker   bool use_real_time() const { return use_real_time_; }
use_manual_time()33*dbb99499SAndroid Build Coastguard Worker   bool use_manual_time() const { return use_manual_time_; }
complexity()34*dbb99499SAndroid Build Coastguard Worker   BigO complexity() const { return complexity_; }
complexity_lambda()35*dbb99499SAndroid Build Coastguard Worker   BigOFunc* complexity_lambda() const { return complexity_lambda_; }
statistics()36*dbb99499SAndroid Build Coastguard Worker   const std::vector<Statistics>& statistics() const { return statistics_; }
repetitions()37*dbb99499SAndroid Build Coastguard Worker   int repetitions() const { return repetitions_; }
min_time()38*dbb99499SAndroid Build Coastguard Worker   double min_time() const { return min_time_; }
min_warmup_time()39*dbb99499SAndroid Build Coastguard Worker   double min_warmup_time() const { return min_warmup_time_; }
iterations()40*dbb99499SAndroid Build Coastguard Worker   IterationCount iterations() const { return iterations_; }
threads()41*dbb99499SAndroid Build Coastguard Worker   int threads() const { return threads_; }
42*dbb99499SAndroid Build Coastguard Worker   void Setup() const;
43*dbb99499SAndroid Build Coastguard Worker   void Teardown() const;
44*dbb99499SAndroid Build Coastguard Worker 
45*dbb99499SAndroid Build Coastguard Worker   State Run(IterationCount iters, int thread_id, internal::ThreadTimer* timer,
46*dbb99499SAndroid Build Coastguard Worker             internal::ThreadManager* manager,
47*dbb99499SAndroid Build Coastguard Worker             internal::PerfCountersMeasurement* perf_counters_measurement,
48*dbb99499SAndroid Build Coastguard Worker             ProfilerManager* profiler_manager) const;
49*dbb99499SAndroid Build Coastguard Worker 
50*dbb99499SAndroid Build Coastguard Worker  private:
51*dbb99499SAndroid Build Coastguard Worker   BenchmarkName name_;
52*dbb99499SAndroid Build Coastguard Worker   Benchmark& benchmark_;
53*dbb99499SAndroid Build Coastguard Worker   const int family_index_;
54*dbb99499SAndroid Build Coastguard Worker   const int per_family_instance_index_;
55*dbb99499SAndroid Build Coastguard Worker   AggregationReportMode aggregation_report_mode_;
56*dbb99499SAndroid Build Coastguard Worker   const std::vector<int64_t>& args_;
57*dbb99499SAndroid Build Coastguard Worker   TimeUnit time_unit_;
58*dbb99499SAndroid Build Coastguard Worker   bool measure_process_cpu_time_;
59*dbb99499SAndroid Build Coastguard Worker   bool use_real_time_;
60*dbb99499SAndroid Build Coastguard Worker   bool use_manual_time_;
61*dbb99499SAndroid Build Coastguard Worker   BigO complexity_;
62*dbb99499SAndroid Build Coastguard Worker   BigOFunc* complexity_lambda_;
63*dbb99499SAndroid Build Coastguard Worker   UserCounters counters_;
64*dbb99499SAndroid Build Coastguard Worker   const std::vector<Statistics>& statistics_;
65*dbb99499SAndroid Build Coastguard Worker   int repetitions_;
66*dbb99499SAndroid Build Coastguard Worker   double min_time_;
67*dbb99499SAndroid Build Coastguard Worker   double min_warmup_time_;
68*dbb99499SAndroid Build Coastguard Worker   IterationCount iterations_;
69*dbb99499SAndroid Build Coastguard Worker   int threads_;  // Number of concurrent threads to us
70*dbb99499SAndroid Build Coastguard Worker 
71*dbb99499SAndroid Build Coastguard Worker   typedef void (*callback_function)(const benchmark::State&);
72*dbb99499SAndroid Build Coastguard Worker   callback_function setup_ = nullptr;
73*dbb99499SAndroid Build Coastguard Worker   callback_function teardown_ = nullptr;
74*dbb99499SAndroid Build Coastguard Worker };
75*dbb99499SAndroid Build Coastguard Worker 
76*dbb99499SAndroid Build Coastguard Worker bool FindBenchmarksInternal(const std::string& re,
77*dbb99499SAndroid Build Coastguard Worker                             std::vector<BenchmarkInstance>* benchmarks,
78*dbb99499SAndroid Build Coastguard Worker                             std::ostream* Err);
79*dbb99499SAndroid Build Coastguard Worker 
80*dbb99499SAndroid Build Coastguard Worker bool IsZero(double n);
81*dbb99499SAndroid Build Coastguard Worker 
82*dbb99499SAndroid Build Coastguard Worker BENCHMARK_EXPORT
83*dbb99499SAndroid Build Coastguard Worker ConsoleReporter::OutputOptions GetOutputOptions(bool force_no_color = false);
84*dbb99499SAndroid Build Coastguard Worker 
85*dbb99499SAndroid Build Coastguard Worker }  // end namespace internal
86*dbb99499SAndroid Build Coastguard Worker }  // end namespace benchmark
87*dbb99499SAndroid Build Coastguard Worker 
88*dbb99499SAndroid Build Coastguard Worker #endif  // BENCHMARK_API_INTERNAL_H
89