20 #include "absl/base/attributes.h"
21 #include "absl/flags/flag.h"
22 #include "absl/time/time.h"
23 #include "benchmark/benchmark.h"
27 "Flag to use for benchmarking duration flag access speed.");
37 while (
state.KeepRunning()) {
42 BENCHMARK(BM_Duration_Factory_Nanoseconds);
46 while (
state.KeepRunning()) {
51 BENCHMARK(BM_Duration_Factory_Microseconds);
55 while (
state.KeepRunning()) {
60 BENCHMARK(BM_Duration_Factory_Milliseconds);
64 while (
state.KeepRunning()) {
73 while (
state.KeepRunning()) {
82 while (
state.KeepRunning()) {
91 while (
state.KeepRunning()) {
93 d =
d * 1.00000001 + 1;
96 BENCHMARK(BM_Duration_Factory_DoubleNanoseconds);
100 while (
state.KeepRunning()) {
102 d =
d * 1.00000001 + 1
e-3;
105 BENCHMARK(BM_Duration_Factory_DoubleMicroseconds);
109 while (
state.KeepRunning()) {
111 d =
d * 1.00000001 + 1
e-6;
114 BENCHMARK(BM_Duration_Factory_DoubleMilliseconds);
118 while (
state.KeepRunning()) {
120 d =
d * 1.00000001 + 1
e-9;
123 BENCHMARK(BM_Duration_Factory_DoubleSeconds);
127 while (
state.KeepRunning()) {
129 d =
d * 1.00000001 + 1
e-9;
132 BENCHMARK(BM_Duration_Factory_DoubleMinutes);
136 while (
state.KeepRunning()) {
138 d =
d * 1.00000001 + 1
e-9;
141 BENCHMARK(BM_Duration_Factory_DoubleHours);
150 while (
state.KeepRunning()) {
159 while (
state.KeepRunning()) {
169 while (
state.KeepRunning()) {
174 BENCHMARK(BM_Duration_Multiplication_Fixed);
180 while (
state.KeepRunning()) {
185 BENCHMARK(BM_Duration_Multiplication_Double);
190 while (
state.KeepRunning()) {
200 while (
state.KeepRunning()) {
210 while (
state.KeepRunning()) {
216 BENCHMARK(BM_Duration_FDivDuration_Nanoseconds);
222 while (
state.KeepRunning()) {
229 BENCHMARK(BM_Duration_IDivDuration_Nanoseconds);
235 while (
state.KeepRunning()) {
242 BENCHMARK(BM_Duration_IDivDuration_Microseconds);
248 while (
state.KeepRunning()) {
255 BENCHMARK(BM_Duration_IDivDuration_Milliseconds);
261 while (
state.KeepRunning()) {
267 BENCHMARK(BM_Duration_IDivDuration_Seconds);
273 while (
state.KeepRunning()) {
279 BENCHMARK(BM_Duration_IDivDuration_Minutes);
285 while (
state.KeepRunning()) {
291 BENCHMARK(BM_Duration_IDivDuration_Hours);
295 while (
state.KeepRunning()) {
299 BENCHMARK(BM_Duration_ToInt64Nanoseconds);
303 while (
state.KeepRunning()) {
307 BENCHMARK(BM_Duration_ToInt64Microseconds);
311 while (
state.KeepRunning()) {
315 BENCHMARK(BM_Duration_ToInt64Milliseconds);
319 while (
state.KeepRunning()) {
327 while (
state.KeepRunning()) {
335 while (
state.KeepRunning()) {
347 while (
state.KeepRunning()) {
351 BENCHMARK(BM_Duration_ToTimespec_AbslTime);
356 ts.tv_nsec = (
seconds - ts.tv_sec) * (1000 * 1000 * 1000);
361 while (
state.KeepRunning()) {
365 BENCHMARK(BM_Duration_ToTimespec_Double);
371 while (
state.KeepRunning()) {
372 if (++ts.tv_nsec == 1000 * 1000 * 1000) {
379 BENCHMARK(BM_Duration_FromTimespec_AbslTime);
382 return ts.tv_sec + (ts.tv_nsec / (1000 * 1000 * 1000));
389 while (
state.KeepRunning()) {
390 if (++ts.tv_nsec == 1000 * 1000 * 1000) {
397 BENCHMARK(BM_Duration_FromTimespec_Double);
403 const char*
const kDurations[] = {
408 "2562047788015215h30m7.99999999975s",
410 const int kNumDurations =
sizeof(kDurations) /
sizeof(kDurations[0]);
417 while (
state.KeepRunning()) {
421 BENCHMARK(BM_Duration_FormatDuration)->DenseRange(0, kNumDurations - 1);
427 while (
state.KeepRunning()) {
431 BENCHMARK(BM_Duration_ParseDuration)->DenseRange(0, kNumDurations - 1);
437 while (
state.KeepRunning()) {