Go to the documentation of this file.
17 #ifndef BENCHMARK_OS_WINDOWS
18 #ifndef BENCHMARK_OS_FUCHSIA
19 #include <sys/resource.h>
28 #include <condition_variable>
39 #include "benchmark/benchmark.h"
56 static const int kRangeMultiplier = 8;
59 static const size_t kMaxFamilySize = 100;
113 std::ostream* ErrStream) {
115 auto& Err = *ErrStream;
119 bool isNegativeFilter =
false;
120 if (
spec[0] ==
'-') {
121 spec.replace(0, 1,
"");
122 isNegativeFilter =
true;
125 Err <<
"Could not compile benchmark re: " << error_msg << std::endl;
130 const std::vector<int> one_thread = {1};
132 int next_family_index = 0;
135 for (std::unique_ptr<Benchmark>& family :
families_) {
136 int family_index = next_family_index;
137 int per_family_instance_index = 0;
140 if (!family)
continue;
142 if (family->ArgsCnt() == -1) {
145 const std::vector<int>* thread_counts =
146 (family->thread_counts_.empty()
148 : &
static_cast<const std::vector<int>&
>(family->thread_counts_));
149 const size_t family_size = family->args_.size() * thread_counts->size();
152 if (family_size > kMaxFamilySize) {
153 Err <<
"The number of inputs is very large. " << family->name_
154 <<
" will be repeated at least " << family_size <<
" times.\n";
160 for (
auto const&
args : family->args_) {
163 per_family_instance_index,
args,
166 const auto full_name =
instance.name().str();
167 if ((re.
Match(full_name) && !isNegativeFilter) ||
168 (!re.
Match(full_name) && isNegativeFilter)) {
171 ++per_family_instance_index;
175 if (next_family_index == family_index) ++next_family_index;
184 std::unique_ptr<Benchmark> bench_ptr(bench);
206 range_multiplier_(kRangeMultiplier),
210 measure_process_cpu_time_(
false),
211 use_real_time_(
false),
212 use_manual_time_(
false),
214 complexity_lambda_(nullptr) {
241 std::vector<int64_t> arglist;
251 const std::vector<std::pair<int64_t, int64_t>>& ranges) {
253 std::vector<std::vector<int64_t>> arglists(ranges.size());
254 for (std::size_t i = 0;
i < ranges.size();
i++) {
265 const std::vector<std::vector<int64_t>>& arglists) {
268 std::vector<std::size_t> indices(arglists.size());
271 [](
const std::size_t res,
const std::vector<int64_t>& arglist) {
272 return res * arglist.size();
274 std::vector<int64_t>
args;
275 args.reserve(arglists.size());
276 for (std::size_t
i = 0;
i <
total;
i++) {
277 for (std::size_t
arg = 0;
arg < arglists.size();
arg++) {
286 }
while (indices[
arg++] == 0 &&
arg < arglists.size());
320 custom_arguments(
this);
379 <<
"Cannot set UseRealTime and UseManualTime simultaneously.";
386 <<
"Cannot set UseRealTime and UseManualTime simultaneously.";
429 for (
auto i = min_threads;
i < max_threads;
i += stride) {
448 return static_cast<int>(
args_.front().size());
464 std::vector<int64_t>
args;
472 std::vector<int64_t>
args;
#define BM_CHECK_LE(a, b)
BigOFunc * complexity_lambda_
Benchmark * Iterations(IterationCount n)
Benchmark * ThreadRange(int min_threads, int max_threads)
Benchmark * DenseRange(int64_t start, int64_t limit, int step=1)
AggregationReportMode aggregation_report_mode_
RefCountedPtr< grpc_tls_certificate_provider > instance
Benchmark * Threads(int t)
Benchmark * Repetitions(int n)
std::vector< std::unique_ptr< Benchmark > > families_
Benchmark * Complexity(BigO complexity=benchmark::oAuto)
@ ARM_DisplayReportAggregatesOnly
Benchmark * Args(const std::vector< int64_t > &args)
Benchmark * RegisterBenchmarkInternal(Benchmark *)
std::vector< Statistics > statistics_
Benchmark * ArgNames(const std::vector< std::string > &names)
Benchmark * ComputeStatistics(std::string name, StatisticsFunc *statistics, StatisticUnit unit=kTime)
void SetName(const char *name)
std::vector< int > families
Benchmark * UseManualTime()
bool FindBenchmarks(std::string re, std::vector< BenchmarkInstance > *benchmarks, std::ostream *Err)
double StatisticsStdDev(const std::vector< double > &v)
void AddRange(std::vector< T > *dst, T lo, T hi, int mult)
std::vector< int64_t > CreateDenseRange(int64_t start, int64_t limit, int step)
Benchmark * RangeMultiplier(int multiplier)
constexpr absl::remove_reference_t< T > && move(T &&t) noexcept
static BenchmarkFamilies * GetInstance()
static ABSL_CONST_INIT int num_cpus
Benchmark * Unit(TimeUnit unit)
Benchmark * DisplayAggregatesOnly(bool value=true)
static void AddRange(std::vector< int > *dst, int lo, int hi, int mult)
Benchmark * ThreadPerCpu()
Benchmark * DenseThreadRange(int min_threads, int max_threads, int stride=1)
void ClearRegisteredBenchmarks()
#define BM_CHECK_GE(a, b)
Benchmark * Apply(void(*func)(Benchmark *benchmark))
bool measure_process_cpu_time_
static const CPUInfo & Get()
std::vector< std::vector< int64_t > > args_
#define BM_CHECK_GT(a, b)
Benchmark * Arg(int64_t x)
double() StatisticsFunc(const std::vector< double > &)
Benchmark * MinTime(double t)
Benchmark(const char *name)
bool Init(const std::string &spec, std::string *error)
Benchmark * MeasureProcessCPUTime()
std::vector< int > thread_counts_
size_t AddBenchmark(std::unique_ptr< Benchmark > family)
std::vector< int64_t > CreateRange(int64_t lo, int64_t hi, int multi)
double StatisticsCV(const std::vector< double > &v)
static void accumulate(upb_pb_encoder *e)
static volatile int num_threads
Benchmark * ReportAggregatesOnly(bool value=true)
IterationCount iterations_
Benchmark * Range(int64_t start, int64_t limit)
std::vector< std::string > arg_names_
Benchmark * ArgName(const std::string &name)
double StatisticsMean(const std::vector< double > &v)
Benchmark * UseRealTime()
Benchmark * Ranges(const std::vector< std::pair< int64_t, int64_t > > &ranges)
bool Match(const std::string &str)
bool FindBenchmarksInternal(const std::string &re, std::vector< BenchmarkInstance > *benchmarks, std::ostream *Err)
Benchmark * Name(const std::string &name)
virtual void Run(State &st) BENCHMARK_OVERRIDE
double() BigOFunc(IterationCount)
double StatisticsMedian(const std::vector< double > &v)
Benchmark * ArgsProduct(const std::vector< std::vector< int64_t > > &arglists)
@ ARM_ReportAggregatesOnly
grpc
Author(s):
autogenerated on Fri May 16 2025 02:57:46