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