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