Go to the documentation of this file.
163 #ifndef BENCHMARK_BENCHMARK_H_
164 #define BENCHMARK_BENCHMARK_H_
167 #if __cplusplus >= 201103L || (defined(_MSVC_LANG) && _MSVC_LANG >= 201103L)
168 #define BENCHMARK_HAS_CXX11
172 #if __cplusplus >= 201703L || \
173 (defined(_MSC_VER) && _MSC_VER >= 1911 && _MSVC_LANG >= 201703L)
174 #define BENCHMARK_HAS_CXX17
189 #if defined(BENCHMARK_HAS_CXX11)
191 #include <initializer_list>
192 #include <type_traits>
196 #if defined(_MSC_VER)
200 #ifndef BENCHMARK_HAS_CXX11
201 #define BENCHMARK_DISALLOW_COPY_AND_ASSIGN(TypeName) \
202 TypeName(const TypeName&); \
203 TypeName& operator=(const TypeName&)
205 #define BENCHMARK_DISALLOW_COPY_AND_ASSIGN(TypeName) \
206 TypeName(const TypeName&) = delete; \
207 TypeName& operator=(const TypeName&) = delete
210 #ifdef BENCHMARK_HAS_CXX17
211 #define BENCHMARK_UNUSED [[maybe_unused]]
212 #elif defined(__GNUC__) || defined(__clang__)
213 #define BENCHMARK_UNUSED __attribute__((unused))
215 #define BENCHMARK_UNUSED
218 #if defined(__GNUC__) || defined(__clang__)
219 #define BENCHMARK_ALWAYS_INLINE __attribute__((always_inline))
220 #define BENCHMARK_NOEXCEPT noexcept
221 #define BENCHMARK_NOEXCEPT_OP(x) noexcept(x)
222 #elif defined(_MSC_VER) && !defined(__clang__)
223 #define BENCHMARK_ALWAYS_INLINE __forceinline
225 #define BENCHMARK_NOEXCEPT noexcept
226 #define BENCHMARK_NOEXCEPT_OP(x) noexcept(x)
228 #define BENCHMARK_NOEXCEPT
229 #define BENCHMARK_NOEXCEPT_OP(x)
231 #define __func__ __FUNCTION__
233 #define BENCHMARK_ALWAYS_INLINE
234 #define BENCHMARK_NOEXCEPT
235 #define BENCHMARK_NOEXCEPT_OP(x)
238 #define BENCHMARK_INTERNAL_TOSTRING2(x) #x
239 #define BENCHMARK_INTERNAL_TOSTRING(x) BENCHMARK_INTERNAL_TOSTRING2(x)
241 #if defined(__GNUC__) || defined(__clang__)
242 #define BENCHMARK_BUILTIN_EXPECT(x, y) __builtin_expect(x, y)
243 #define BENCHMARK_DEPRECATED_MSG(msg) __attribute__((deprecated(msg)))
245 #define BENCHMARK_BUILTIN_EXPECT(x, y) x
246 #define BENCHMARK_DEPRECATED_MSG(msg)
247 #define BENCHMARK_WARNING_MSG(msg) \
248 __pragma(message(__FILE__ "(" BENCHMARK_INTERNAL_TOSTRING( \
249 __LINE__) ") : warning note: " msg))
252 #if defined(__GNUC__) && !defined(__clang__)
253 #define BENCHMARK_GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__)
256 #ifndef __has_builtin
257 #define __has_builtin(x) 0
260 #if defined(__GNUC__) || __has_builtin(__builtin_unreachable)
261 #define BENCHMARK_UNREACHABLE() __builtin_unreachable()
262 #elif defined(_MSC_VER)
263 #define BENCHMARK_UNREACHABLE() __assume(false)
265 #define BENCHMARK_UNREACHABLE() ((void)0)
268 #ifdef BENCHMARK_HAS_CXX11
269 #define BENCHMARK_OVERRIDE override
271 #define BENCHMARK_OVERRIDE
275 class BenchmarkReporter;
300 BenchmarkReporter* file_reporter);
326 #if (!defined(__GNUC__) && !defined(__clang__)) || defined(__pnacl__) || \
327 defined(__EMSCRIPTEN__)
328 #define BENCHMARK_HAS_NO_INLINE_ASSEMBLY
333 #ifdef BENCHMARK_HAS_CXX11
335 std::atomic_signal_fence(std::memory_order_acq_rel);
343 #ifndef BENCHMARK_HAS_NO_INLINE_ASSEMBLY
346 asm volatile(
"" : :
"r,m"(
value) :
"memory");
351 #if defined(__clang__)
352 asm volatile(
"" :
"+r,m"(
value) : :
"memory");
354 asm volatile(
"" :
"+m,r"(
value) : :
"memory");
358 #ifndef BENCHMARK_HAS_CXX11
360 asm volatile(
"" : : :
"memory");
363 #elif defined(_MSC_VER)
370 #ifndef BENCHMARK_HAS_CXX11
435 static_cast<int>(RHS));
474 class BenchmarkInstance;
477 class PerfCountersMeasurement;
480 #if defined(BENCHMARK_HAS_CXX11)
754 assert(is_batch ||
n == 1);
871 std::vector<int64_t>
args;
880 Benchmark*
Ranges(
const std::vector<std::pair<int64_t, int64_t> >& ranges);
898 std::vector<std::pair<int64_t, int64_t> > ranges;
899 ranges.push_back(std::make_pair(lo1, hi1));
900 ranges.push_back(std::make_pair(lo2, hi2));
1021 std::vector<std::vector<int64_t> >
args_;
1047 #if defined(BENCHMARK_HAS_CXX11)
1048 template <
class Lambda>
1070 #ifdef BENCHMARK_HAS_CXX11
1071 template <
class Lambda>
1072 class LambdaBenchmark :
public Benchmark {
1077 template <
class OLambda>
1078 LambdaBenchmark(
const char*
name, OLambda&& lam)
1081 LambdaBenchmark(LambdaBenchmark
const&) =
delete;
1084 template <
class Lam>
1099 #ifdef BENCHMARK_HAS_CXX11
1100 template <
class Lambda>
1105 ::
new BenchType(
name, std::forward<Lambda>(
fn)));
1109 #if defined(BENCHMARK_HAS_CXX11) && \
1110 (!defined(BENCHMARK_GCC_VERSION) || BENCHMARK_GCC_VERSION >= 409)
1111 template <
class Lambda,
class...
Args>
1118 #define BENCHMARK_HAS_NO_VARIADIC_REGISTER_BENCHMARK
1151 #if defined(__COUNTER__) && (__COUNTER__ + 1 == __COUNTER__ + 0)
1152 #define BENCHMARK_PRIVATE_UNIQUE_ID __COUNTER__
1154 #define BENCHMARK_PRIVATE_UNIQUE_ID __LINE__
1158 #define BENCHMARK_PRIVATE_NAME(n) \
1159 BENCHMARK_PRIVATE_CONCAT(benchmark_uniq_, BENCHMARK_PRIVATE_UNIQUE_ID, n)
1160 #define BENCHMARK_PRIVATE_CONCAT(a, b, c) BENCHMARK_PRIVATE_CONCAT2(a, b, c)
1161 #define BENCHMARK_PRIVATE_CONCAT2(a, b, c) a##b##c
1163 #define BENCHMARK_PRIVATE_CONCAT_NAME(BaseClass, Method) \
1164 BaseClass##_##Method##_Benchmark
1166 #define BENCHMARK_PRIVATE_DECLARE(n) \
1167 static ::benchmark::internal::Benchmark* BENCHMARK_PRIVATE_NAME(n) \
1170 #define BENCHMARK(n) \
1171 BENCHMARK_PRIVATE_DECLARE(n) = \
1172 (::benchmark::internal::RegisterBenchmarkInternal( \
1173 new ::benchmark::internal::FunctionBenchmark(#n, n)))
1176 #define BENCHMARK_WITH_ARG(n, a) BENCHMARK(n)->Arg((a))
1177 #define BENCHMARK_WITH_ARG2(n, a1, a2) BENCHMARK(n)->Args({(a1), (a2)})
1178 #define BENCHMARK_WITH_UNIT(n, t) BENCHMARK(n)->Unit((t))
1179 #define BENCHMARK_RANGE(n, lo, hi) BENCHMARK(n)->Range((lo), (hi))
1180 #define BENCHMARK_RANGE2(n, l1, h1, l2, h2) \
1181 BENCHMARK(n)->RangePair({{(l1), (h1)}, {(l2), (h2)}})
1183 #ifdef BENCHMARK_HAS_CXX11
1196 #define BENCHMARK_CAPTURE(func, test_case_name, ...) \
1197 BENCHMARK_PRIVATE_DECLARE(func) = \
1198 (::benchmark::internal::RegisterBenchmarkInternal( \
1199 new ::benchmark::internal::FunctionBenchmark( \
1200 #func "/" #test_case_name, \
1201 [](::benchmark::State& st) { func(st, __VA_ARGS__); })))
1203 #endif // BENCHMARK_HAS_CXX11
1213 #define BENCHMARK_TEMPLATE1(n, a) \
1214 BENCHMARK_PRIVATE_DECLARE(n) = \
1215 (::benchmark::internal::RegisterBenchmarkInternal( \
1216 new ::benchmark::internal::FunctionBenchmark(#n "<" #a ">", n<a>)))
1218 #define BENCHMARK_TEMPLATE2(n, a, b) \
1219 BENCHMARK_PRIVATE_DECLARE(n) = \
1220 (::benchmark::internal::RegisterBenchmarkInternal( \
1221 new ::benchmark::internal::FunctionBenchmark(#n "<" #a "," #b ">", \
1224 #ifdef BENCHMARK_HAS_CXX11
1225 #define BENCHMARK_TEMPLATE(n, ...) \
1226 BENCHMARK_PRIVATE_DECLARE(n) = \
1227 (::benchmark::internal::RegisterBenchmarkInternal( \
1228 new ::benchmark::internal::FunctionBenchmark( \
1229 #n "<" #__VA_ARGS__ ">", n<__VA_ARGS__>)))
1231 #define BENCHMARK_TEMPLATE(n, a) BENCHMARK_TEMPLATE1(n, a)
1234 #define BENCHMARK_PRIVATE_DECLARE_F(BaseClass, Method) \
1235 class BaseClass##_##Method##_Benchmark : public BaseClass { \
1237 BaseClass##_##Method##_Benchmark() : BaseClass() { \
1238 this->SetName(#BaseClass "/" #Method); \
1242 virtual void BenchmarkCase(::benchmark::State&) BENCHMARK_OVERRIDE; \
1245 #define BENCHMARK_TEMPLATE1_PRIVATE_DECLARE_F(BaseClass, Method, a) \
1246 class BaseClass##_##Method##_Benchmark : public BaseClass<a> { \
1248 BaseClass##_##Method##_Benchmark() : BaseClass<a>() { \
1249 this->SetName(#BaseClass "<" #a ">/" #Method); \
1253 virtual void BenchmarkCase(::benchmark::State&) BENCHMARK_OVERRIDE; \
1256 #define BENCHMARK_TEMPLATE2_PRIVATE_DECLARE_F(BaseClass, Method, a, b) \
1257 class BaseClass##_##Method##_Benchmark : public BaseClass<a, b> { \
1259 BaseClass##_##Method##_Benchmark() : BaseClass<a, b>() { \
1260 this->SetName(#BaseClass "<" #a "," #b ">/" #Method); \
1264 virtual void BenchmarkCase(::benchmark::State&) BENCHMARK_OVERRIDE; \
1267 #ifdef BENCHMARK_HAS_CXX11
1268 #define BENCHMARK_TEMPLATE_PRIVATE_DECLARE_F(BaseClass, Method, ...) \
1269 class BaseClass##_##Method##_Benchmark : public BaseClass<__VA_ARGS__> { \
1271 BaseClass##_##Method##_Benchmark() : BaseClass<__VA_ARGS__>() { \
1272 this->SetName(#BaseClass "<" #__VA_ARGS__ ">/" #Method); \
1276 virtual void BenchmarkCase(::benchmark::State&) BENCHMARK_OVERRIDE; \
1279 #define BENCHMARK_TEMPLATE_PRIVATE_DECLARE_F(n, a) \
1280 BENCHMARK_TEMPLATE1_PRIVATE_DECLARE_F(n, a)
1283 #define BENCHMARK_DEFINE_F(BaseClass, Method) \
1284 BENCHMARK_PRIVATE_DECLARE_F(BaseClass, Method) \
1285 void BENCHMARK_PRIVATE_CONCAT_NAME(BaseClass, Method)::BenchmarkCase
1287 #define BENCHMARK_TEMPLATE1_DEFINE_F(BaseClass, Method, a) \
1288 BENCHMARK_TEMPLATE1_PRIVATE_DECLARE_F(BaseClass, Method, a) \
1289 void BENCHMARK_PRIVATE_CONCAT_NAME(BaseClass, Method)::BenchmarkCase
1291 #define BENCHMARK_TEMPLATE2_DEFINE_F(BaseClass, Method, a, b) \
1292 BENCHMARK_TEMPLATE2_PRIVATE_DECLARE_F(BaseClass, Method, a, b) \
1293 void BENCHMARK_PRIVATE_CONCAT_NAME(BaseClass, Method)::BenchmarkCase
1295 #ifdef BENCHMARK_HAS_CXX11
1296 #define BENCHMARK_TEMPLATE_DEFINE_F(BaseClass, Method, ...) \
1297 BENCHMARK_TEMPLATE_PRIVATE_DECLARE_F(BaseClass, Method, __VA_ARGS__) \
1298 void BENCHMARK_PRIVATE_CONCAT_NAME(BaseClass, Method)::BenchmarkCase
1300 #define BENCHMARK_TEMPLATE_DEFINE_F(BaseClass, Method, a) \
1301 BENCHMARK_TEMPLATE1_DEFINE_F(BaseClass, Method, a)
1304 #define BENCHMARK_REGISTER_F(BaseClass, Method) \
1305 BENCHMARK_PRIVATE_REGISTER_F(BENCHMARK_PRIVATE_CONCAT_NAME(BaseClass, Method))
1307 #define BENCHMARK_PRIVATE_REGISTER_F(TestName) \
1308 BENCHMARK_PRIVATE_DECLARE(TestName) = \
1309 (::benchmark::internal::RegisterBenchmarkInternal(new TestName()))
1312 #define BENCHMARK_F(BaseClass, Method) \
1313 BENCHMARK_PRIVATE_DECLARE_F(BaseClass, Method) \
1314 BENCHMARK_REGISTER_F(BaseClass, Method); \
1315 void BENCHMARK_PRIVATE_CONCAT_NAME(BaseClass, Method)::BenchmarkCase
1317 #define BENCHMARK_TEMPLATE1_F(BaseClass, Method, a) \
1318 BENCHMARK_TEMPLATE1_PRIVATE_DECLARE_F(BaseClass, Method, a) \
1319 BENCHMARK_REGISTER_F(BaseClass, Method); \
1320 void BENCHMARK_PRIVATE_CONCAT_NAME(BaseClass, Method)::BenchmarkCase
1322 #define BENCHMARK_TEMPLATE2_F(BaseClass, Method, a, b) \
1323 BENCHMARK_TEMPLATE2_PRIVATE_DECLARE_F(BaseClass, Method, a, b) \
1324 BENCHMARK_REGISTER_F(BaseClass, Method); \
1325 void BENCHMARK_PRIVATE_CONCAT_NAME(BaseClass, Method)::BenchmarkCase
1327 #ifdef BENCHMARK_HAS_CXX11
1328 #define BENCHMARK_TEMPLATE_F(BaseClass, Method, ...) \
1329 BENCHMARK_TEMPLATE_PRIVATE_DECLARE_F(BaseClass, Method, __VA_ARGS__) \
1330 BENCHMARK_REGISTER_F(BaseClass, Method); \
1331 void BENCHMARK_PRIVATE_CONCAT_NAME(BaseClass, Method)::BenchmarkCase
1333 #define BENCHMARK_TEMPLATE_F(BaseClass, Method, a) \
1334 BENCHMARK_TEMPLATE1_F(BaseClass, Method, a)
1338 #define BENCHMARK_MAIN() \
1339 int main(int argc, char** argv) { \
1340 ::benchmark::Initialize(&argc, argv); \
1341 if (::benchmark::ReportUnrecognizedArguments(argc, argv)) return 1; \
1342 ::benchmark::RunSpecifiedBenchmarks(); \
1343 ::benchmark::Shutdown(); \
1346 int main(int, char**)
1511 std::vector<BenchmarkReporter::Run>
Runs;
1533 virtual void ReportRuns(
const std::vector<Run>& report) = 0;
1623 bool printed_header_;
1624 std::set<std::string> user_counter_names_;
1644 virtual void Start() = 0;
1695 #endif // BENCHMARK_BENCHMARK_H_
std::ostream & GetErrorStream() const
BigOFunc * complexity_lambda_
std::chrono::duration< std::int_fast64_t > seconds
std::string aggregate_name
#define BENCHMARK_DEPRECATED_MSG(msg)
BENCHMARK_ALWAYS_INLINE StateIterator(State *st)
internal::ThreadManager *const manager_
Benchmark * RangePair(int64_t lo1, int64_t hi1, int64_t lo2, int64_t hi2)
BENCHMARK_ALWAYS_INLINE void SetItemsProcessed(int64_t items)
void SetErrorStream(std::ostream *err)
std::vector< double > load_avg
Benchmark * Iterations(IterationCount n)
void PrintRunData(const Run &report)
const IterationCount max_iterations
StatisticsFunc * compute_
Benchmark * ArgPair(int64_t x, int64_t y)
static const SystemInfo & Get()
std::forward_iterator_tag iterator_category
void RegisterMemoryManager(MemoryManager *memory_manager)
bool error_occurred() const
Benchmark * ThreadRange(int min_threads, int max_threads)
BENCHMARK_DISALLOW_COPY_AND_ASSIGN(CPUInfo)
#define BENCHMARK_UNREACHABLE()
virtual void SetUp(const State &)
BENCHMARK_DISALLOW_COPY_AND_ASSIGN(SystemInfo)
Benchmark * DenseRange(int64_t start, int64_t limit, int step=1)
virtual ~BenchmarkReporter()
OutputOptions output_options_
AggregationReportMode aggregation_report_mode_
@ ARM_FileReportAggregatesOnly
virtual void TearDown(State &st)
void SkipWithError(const char *msg)
Benchmark * Threads(int t)
BENCHMARK_ALWAYS_INLINE void DoNotOptimize(Tp const &value)
static const char * executable_name
void BENCHMARK_ALWAYS_INLINE SetLabel(const std::string &str)
IterationCount total_iterations_
Benchmark * Repetitions(int n)
virtual void Finalize() BENCHMARK_OVERRIDE
Benchmark * Complexity(BigO complexity=benchmark::oAuto)
@ kIsIterationInvariantRate
@ ARM_DisplayReportAggregatesOnly
virtual void ReportRuns(const std::vector< Run > &reports) BENCHMARK_OVERRIDE
void SetLabel(const char *label)
Benchmark * Args(const std::vector< int64_t > &args)
internal::Benchmark * RegisterBenchmark(const char *name, internal::Function *fn)
Benchmark * RegisterBenchmarkInternal(Benchmark *)
virtual void PrintHeader(const Run &report)
const char * GetTimeUnitString(TimeUnit unit)
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)
Benchmark * UseManualTime()
UserCounters prev_counters_
double GetAdjustedCPUTime() const
internal::ThreadTimer *const timer_
static void PrintBasicContext(std::ostream *out, Context const &context)
virtual void TearDown(const State &)
static const int64_t no_repetition_index
StatisticUnit aggregate_unit
BENCHMARK_ALWAYS_INLINE StateIterator end()
size_t RunSpecifiedBenchmarks()
virtual void BenchmarkCase(State &)=0
virtual bool ReportContext(const Context &context) BENCHMARK_OVERRIDE
Benchmark & operator=(Benchmark const &)
std::vector< int64_t > CreateDenseRange(int64_t start, int64_t limit, int step)
Benchmark * RangeMultiplier(int multiplier)
BENCHMARK_ALWAYS_INLINE int64_t bytes_processed() const
virtual void PrintRunData(const Run &report)
BENCHMARK_ALWAYS_INLINE StateIterator begin()
TestInstance::Result Result
#define BENCHMARK_OVERRIDE
Benchmark * Unit(TimeUnit unit)
Benchmark * DisplayAggregatesOnly(bool value=true)
std::string error_message
std::vector< BenchmarkReporter::Run > Runs
BENCHMARK_ALWAYS_INLINE int thread_index() const
double cpu_accumulated_time
std::ostream * output_stream_
Benchmark * ThreadPerCpu()
Benchmark * DenseThreadRange(int min_threads, int max_threads, int stride=1)
unsigned __int64 uint64_t
BENCHMARK_ALWAYS_INLINE void SetBytesProcessed(int64_t bytes)
std::string benchmark_name
Statistics(const std::string &name, StatisticsFunc *compute, StatisticUnit unit=kTime)
BENCHMARK_ALWAYS_INLINE int threads() const
void ClearRegisteredBenchmarks()
std::string function_name
virtual void Run(State &state)=0
int64_t per_family_instance_index
BENCHMARK_ALWAYS_INLINE bool operator!=(StateIterator const &) const
void Initialize(int *argc, char **argv)
std::ostream * error_stream_
Benchmark * Apply(void(*func)(Benchmark *benchmark))
bool measure_process_cpu_time_
static const CPUInfo & Get()
std::vector< std::vector< int64_t > > args_
bool ReportUnrecognizedArguments(int argc, char **argv)
virtual void SetUp(State &st)
virtual void ReportRuns(const std::vector< Run > &reports) BENCHMARK_OVERRIDE
internal::PerfCountersMeasurement *const perf_counters_measurement_
Benchmark * Arg(int64_t x)
virtual bool ReportContext(const Context &context)=0
double() StatisticsFunc(const std::vector< double > &)
Benchmark * MinTime(double t)
virtual void ReportRuns(const std::vector< Run > &report)=0
#define BENCHMARK_ALWAYS_INLINE
std::vector< int64_t > range_
std::map< std::string, Counter > UserCounters
Benchmark(const char *name)
Benchmark * MeasureProcessCPUTime()
std::vector< int > thread_counts_
void SetOutputStream(std::ostream *out)
virtual bool ReportContext(const Context &context) BENCHMARK_OVERRIDE
MemoryManager * memory_manager
bool KeepRunningInternal(IterationCount n, bool is_batch)
std::vector< int64_t > CreateRange(int64_t lo, int64_t hi, int multi)
Counter::Flags operator|(const Counter::Flags &LHS, const Counter::Flags &RHS)
IterationCount batch_leftover_
double real_accumulated_time
BENCHMARK_ALWAYS_INLINE Counter(double v=0., Flags f=kDefaults, OneK k=kIs1000)
BigOFunc * complexity_lambda
SystemInfo const & sys_info
BENCHMARK_ALWAYS_INLINE StateIterator()
friend struct StateIterator
BENCHMARK_ALWAYS_INLINE IterationCount iterations() const
Benchmark * ReportAggregatesOnly(bool value=true)
State(IterationCount max_iters, const std::vector< int64_t > &ranges, int thread_i, int n_threads, internal::ThreadTimer *timer, internal::ThreadManager *manager, internal::PerfCountersMeasurement *perf_counters_measurement)
double GetAdjustedRealTime() const
ConsoleReporter(OutputOptions opts_=OO_Defaults)
BENCHMARK_ALWAYS_INLINE int64_t items_processed() const
IterationCount iterations_
Benchmark * Range(int64_t start, int64_t limit)
std::ptrdiff_t difference_type
grpc::ClientContext context
std::vector< std::string > arg_names_
Benchmark * ArgName(const std::string &name)
bool KeepRunningBatch(IterationCount n)
BENCHMARK_ALWAYS_INLINE StateIterator & operator++()
constexpr T && forward(absl::remove_reference_t< T > &t) noexcept
double GetTimeUnitMultiplier(TimeUnit unit)
void SetIterationTime(double seconds)
Benchmark * UseRealTime()
Benchmark * Ranges(const std::vector< std::pair< int64_t, int64_t > > &ranges)
FunctionBenchmark(const char *name, Function *func)
BENCHMARK_ALWAYS_INLINE int64_t complexity_length_n() const
static BENCHMARK_UNUSED int stream_init_anchor
def Benchmark(outbase, bench_cpu=True, runs=12, fasttable=False)
std::ostream & GetOutputStream() const
Benchmark * Name(const std::string &name)
#define BENCHMARK_BUILTIN_EXPECT(x, y)
virtual void Run(State &st) BENCHMARK_OVERRIDE
void AddCustomContext(const std::string &key, const std::string &value)
BENCHMARK_ALWAYS_INLINE int64_t range(std::size_t pos=0) const
virtual void Run(State &st) BENCHMARK_OVERRIDE
IterationCount iterations
BENCHMARK_ALWAYS_INLINE Value operator*() const
void UseCharPointer(char const volatile *)
double() BigOFunc(IterationCount)
const std::vector< internal::Statistics > * statistics
std::vector< CacheInfo > caches
Benchmark * ArgsProduct(const std::vector< std::vector< int64_t > > &arglists)
@ ARM_ReportAggregatesOnly
double max_heapbytes_used
BENCHMARK_ALWAYS_INLINE void SetComplexityN(int64_t complexity_n)
grpc
Author(s):
autogenerated on Fri May 16 2025 02:57:46