Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
B
benchmark
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Chen Yisong
benchmark
Commits
9fa66eb1
Commit
9fa66eb1
authored
May 02, 2016
by
Dominic Hamon
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'NewProggie-feature/add-ms-time-report'
parents
0500ec0a
fb733897
Show whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
113 additions
and
13 deletions
+113
-13
CONTRIBUTORS
CONTRIBUTORS
+1
-0
README.md
README.md
+9
-0
benchmark_api.h
include/benchmark/benchmark_api.h
+18
-0
reporter.h
include/benchmark/reporter.h
+7
-1
benchmark.cc
src/benchmark.cc
+16
-1
console_reporter.cc
src/console_reporter.cc
+15
-7
csv_reporter.cc
src/csv_reporter.cc
+7
-2
json_reporter.cc
src/json_reporter.cc
+9
-2
reporter.cc
src/reporter.cc
+12
-0
options_test.cc
test/options_test.cc
+19
-0
No files found.
CONTRIBUTORS
View file @
9fa66eb1
...
@@ -32,6 +32,7 @@ Evgeny Safronov <division494@gmail.com>
...
@@ -32,6 +32,7 @@ Evgeny Safronov <division494@gmail.com>
Felix Homann <linuxaudio@showlabor.de>
Felix Homann <linuxaudio@showlabor.de>
JianXiong Zhou <zhoujianxiong2@gmail.com>
JianXiong Zhou <zhoujianxiong2@gmail.com>
Kaito Udagawa <umireon@gmail.com>
Kaito Udagawa <umireon@gmail.com>
Kai Wolf <kai.wolf@gmail.com>
Lei Xu <eddyxu@gmail.com>
Lei Xu <eddyxu@gmail.com>
Matt Clarkson <mattyclarkson@gmail.com>
Matt Clarkson <mattyclarkson@gmail.com>
Oleksandr Sochka <sasha.sochka@gmail.com>
Oleksandr Sochka <sasha.sochka@gmail.com>
...
...
README.md
View file @
9fa66eb1
...
@@ -190,6 +190,15 @@ static void BM_test(benchmark::State& state) {
...
@@ -190,6 +190,15 @@ static void BM_test(benchmark::State& state) {
}
}
```
```
### Set time unit manually
If a benchmark runs a few milliseconds it may be hard to visually compare the
measured times, since the output data is given in nanoseconds per default. In
order to manually set the time unit, you can specify it manually:
```
c++
BENCHMARK
(
BM_test
)
->
Unit
(
benchmark
::
kMillisecond
);
```
## Controlling number of iterations
## Controlling number of iterations
In all cases, the number of iterations for which the benchmark is run is
In all cases, the number of iterations for which the benchmark is run is
governed by the amount of time the benchmark takes. Concretely, the number of
governed by the amount of time the benchmark takes. Concretely, the number of
...
...
include/benchmark/benchmark_api.h
View file @
9fa66eb1
...
@@ -137,6 +137,13 @@ static void BM_MultiThreaded(benchmark::State& state) {
...
@@ -137,6 +137,13 @@ static void BM_MultiThreaded(benchmark::State& state) {
}
}
}
}
BENCHMARK(BM_MultiThreaded)->Threads(4);
BENCHMARK(BM_MultiThreaded)->Threads(4);
If a benchmark runs a few milliseconds it may be hard to visually compare the
measured times, since the output data is given in nanoseconds per default. In
order to manually set the time unit, you can specify it manually:
BENCHMARK(BM_test)->Unit(benchmark::kMillisecond);
*/
*/
#ifndef BENCHMARK_BENCHMARK_API_H_
#ifndef BENCHMARK_BENCHMARK_API_H_
...
@@ -216,6 +223,13 @@ inline BENCHMARK_ALWAYS_INLINE void DoNotOptimize(Tp const& value) {
...
@@ -216,6 +223,13 @@ inline BENCHMARK_ALWAYS_INLINE void DoNotOptimize(Tp const& value) {
}
}
#endif
#endif
// TimeUnit is passed to a benchmark in order to specify the order of magnitude
// for the measured time.
enum
TimeUnit
{
kNanosecond
,
kMicrosecond
,
kMillisecond
};
// State is passed to a running Benchmark and contains state for the
// State is passed to a running Benchmark and contains state for the
// benchmark to use.
// benchmark to use.
...
@@ -390,6 +404,9 @@ public:
...
@@ -390,6 +404,9 @@ public:
// REQUIRES: The function passed to the constructor must accept an arg1.
// REQUIRES: The function passed to the constructor must accept an arg1.
Benchmark
*
Arg
(
int
x
);
Benchmark
*
Arg
(
int
x
);
// Run this benchmark with the given time unit for the generated output report
Benchmark
*
Unit
(
TimeUnit
unit
);
// Run this benchmark once for a number of values picked from the
// Run this benchmark once for a number of values picked from the
// range [start..limit]. (start and limit are always picked.)
// range [start..limit]. (start and limit are always picked.)
// REQUIRES: The function passed to the constructor must accept an arg1.
// REQUIRES: The function passed to the constructor must accept an arg1.
...
@@ -534,6 +551,7 @@ protected:
...
@@ -534,6 +551,7 @@ protected:
// Old-style macros
// Old-style macros
#define BENCHMARK_WITH_ARG(n, a) BENCHMARK(n)->Arg((a))
#define BENCHMARK_WITH_ARG(n, a) BENCHMARK(n)->Arg((a))
#define BENCHMARK_WITH_ARG2(n, a1, a2) BENCHMARK(n)->ArgPair((a1), (a2))
#define BENCHMARK_WITH_ARG2(n, a1, a2) BENCHMARK(n)->ArgPair((a1), (a2))
#define BENCHMARK_WITH_UNIT(n, t) BENCHMARK(n)->Unit((t))
#define BENCHMARK_RANGE(n, lo, hi) BENCHMARK(n)->Range((lo), (hi))
#define BENCHMARK_RANGE(n, lo, hi) BENCHMARK(n)->Range((lo), (hi))
#define BENCHMARK_RANGE2(n, l1, h1, l2, h2) \
#define BENCHMARK_RANGE2(n, l1, h1, l2, h2) \
BENCHMARK(n)->RangePair((l1), (h1), (l2), (h2))
BENCHMARK(n)->RangePair((l1), (h1), (l2), (h2))
...
...
include/benchmark/reporter.h
View file @
9fa66eb1
...
@@ -22,6 +22,8 @@
...
@@ -22,6 +22,8 @@
namespace
benchmark
{
namespace
benchmark
{
typedef
std
::
pair
<
const
char
*
,
double
>
TimeUnitMultiplier
;
// Interface for custom benchmark result printers.
// Interface for custom benchmark result printers.
// By default, benchmark reports are printed to stdout. However an application
// By default, benchmark reports are printed to stdout. However an application
// can control the destination of the reports by calling
// can control the destination of the reports by calling
...
@@ -41,6 +43,7 @@ class BenchmarkReporter {
...
@@ -41,6 +43,7 @@ class BenchmarkReporter {
struct
Run
{
struct
Run
{
Run
()
:
Run
()
:
iterations
(
1
),
iterations
(
1
),
time_unit
(
kNanosecond
),
real_accumulated_time
(
0
),
real_accumulated_time
(
0
),
cpu_accumulated_time
(
0
),
cpu_accumulated_time
(
0
),
bytes_per_second
(
0
),
bytes_per_second
(
0
),
...
@@ -50,6 +53,7 @@ class BenchmarkReporter {
...
@@ -50,6 +53,7 @@ class BenchmarkReporter {
std
::
string
benchmark_name
;
std
::
string
benchmark_name
;
std
::
string
report_label
;
// Empty if not set by benchmark.
std
::
string
report_label
;
// Empty if not set by benchmark.
int64_t
iterations
;
int64_t
iterations
;
TimeUnit
time_unit
;
double
real_accumulated_time
;
double
real_accumulated_time
;
double
cpu_accumulated_time
;
double
cpu_accumulated_time
;
...
@@ -82,6 +86,7 @@ class BenchmarkReporter {
...
@@ -82,6 +86,7 @@ class BenchmarkReporter {
virtual
~
BenchmarkReporter
();
virtual
~
BenchmarkReporter
();
protected
:
protected
:
static
void
ComputeStats
(
std
::
vector
<
Run
>
const
&
reports
,
Run
*
mean
,
Run
*
stddev
);
static
void
ComputeStats
(
std
::
vector
<
Run
>
const
&
reports
,
Run
*
mean
,
Run
*
stddev
);
static
TimeUnitMultiplier
GetTimeUnitAndMultiplier
(
TimeUnit
unit
);
};
};
// Simple reporter that outputs benchmark data to the console. This is the
// Simple reporter that outputs benchmark data to the console. This is the
...
@@ -90,7 +95,8 @@ class ConsoleReporter : public BenchmarkReporter {
...
@@ -90,7 +95,8 @@ class ConsoleReporter : public BenchmarkReporter {
public
:
public
:
virtual
bool
ReportContext
(
const
Context
&
context
);
virtual
bool
ReportContext
(
const
Context
&
context
);
virtual
void
ReportRuns
(
const
std
::
vector
<
Run
>&
reports
);
virtual
void
ReportRuns
(
const
std
::
vector
<
Run
>&
reports
);
protected
:
protected
:
virtual
void
PrintRunData
(
const
Run
&
report
);
virtual
void
PrintRunData
(
const
Run
&
report
);
size_t
name_field_width_
;
size_t
name_field_width_
;
...
...
src/benchmark.cc
View file @
9fa66eb1
...
@@ -261,6 +261,7 @@ struct Benchmark::Instance {
...
@@ -261,6 +261,7 @@ struct Benchmark::Instance {
int
arg1
;
int
arg1
;
bool
has_arg2
;
bool
has_arg2
;
int
arg2
;
int
arg2
;
TimeUnit
time_unit
;
bool
use_real_time
;
bool
use_real_time
;
double
min_time
;
double
min_time
;
int
threads
;
// Number of concurrent threads to use
int
threads
;
// Number of concurrent threads to use
...
@@ -294,6 +295,7 @@ public:
...
@@ -294,6 +295,7 @@ public:
~
BenchmarkImp
();
~
BenchmarkImp
();
void
Arg
(
int
x
);
void
Arg
(
int
x
);
void
Unit
(
TimeUnit
unit
);
void
Range
(
int
start
,
int
limit
);
void
Range
(
int
start
,
int
limit
);
void
DenseRange
(
int
start
,
int
limit
);
void
DenseRange
(
int
start
,
int
limit
);
void
ArgPair
(
int
start
,
int
limit
);
void
ArgPair
(
int
start
,
int
limit
);
...
@@ -313,6 +315,7 @@ private:
...
@@ -313,6 +315,7 @@ private:
std
::
string
name_
;
std
::
string
name_
;
int
arg_count_
;
int
arg_count_
;
std
::
vector
<
std
::
pair
<
int
,
int
>
>
args_
;
// Args for all benchmark runs
std
::
vector
<
std
::
pair
<
int
,
int
>
>
args_
;
// Args for all benchmark runs
TimeUnit
time_unit_
;
double
min_time_
;
double
min_time_
;
bool
use_real_time_
;
bool
use_real_time_
;
std
::
vector
<
int
>
thread_counts_
;
std
::
vector
<
int
>
thread_counts_
;
...
@@ -372,6 +375,7 @@ bool BenchmarkFamilies::FindBenchmarks(
...
@@ -372,6 +375,7 @@ bool BenchmarkFamilies::FindBenchmarks(
instance
.
arg1
=
args
.
first
;
instance
.
arg1
=
args
.
first
;
instance
.
has_arg2
=
family
->
arg_count_
==
2
;
instance
.
has_arg2
=
family
->
arg_count_
==
2
;
instance
.
arg2
=
args
.
second
;
instance
.
arg2
=
args
.
second
;
instance
.
time_unit
=
family
->
time_unit_
;
instance
.
min_time
=
family
->
min_time_
;
instance
.
min_time
=
family
->
min_time_
;
instance
.
use_real_time
=
family
->
use_real_time_
;
instance
.
use_real_time
=
family
->
use_real_time_
;
instance
.
threads
=
num_threads
;
instance
.
threads
=
num_threads
;
...
@@ -406,7 +410,7 @@ bool BenchmarkFamilies::FindBenchmarks(
...
@@ -406,7 +410,7 @@ bool BenchmarkFamilies::FindBenchmarks(
}
}
BenchmarkImp
::
BenchmarkImp
(
const
char
*
name
)
BenchmarkImp
::
BenchmarkImp
(
const
char
*
name
)
:
name_
(
name
),
arg_count_
(
-
1
),
:
name_
(
name
),
arg_count_
(
-
1
),
time_unit_
(
kNanosecond
),
min_time_
(
0.0
),
use_real_time_
(
false
)
{
min_time_
(
0.0
),
use_real_time_
(
false
)
{
}
}
...
@@ -419,6 +423,10 @@ void BenchmarkImp::Arg(int x) {
...
@@ -419,6 +423,10 @@ void BenchmarkImp::Arg(int x) {
args_
.
emplace_back
(
x
,
-
1
);
args_
.
emplace_back
(
x
,
-
1
);
}
}
void
BenchmarkImp
::
Unit
(
TimeUnit
unit
)
{
time_unit_
=
unit
;
}
void
BenchmarkImp
::
Range
(
int
start
,
int
limit
)
{
void
BenchmarkImp
::
Range
(
int
start
,
int
limit
)
{
CHECK
(
arg_count_
==
-
1
||
arg_count_
==
1
);
CHECK
(
arg_count_
==
-
1
||
arg_count_
==
1
);
arg_count_
=
1
;
arg_count_
=
1
;
...
@@ -531,6 +539,11 @@ Benchmark* Benchmark::Arg(int x) {
...
@@ -531,6 +539,11 @@ Benchmark* Benchmark::Arg(int x) {
return
this
;
return
this
;
}
}
Benchmark
*
Benchmark
::
Unit
(
TimeUnit
unit
)
{
imp_
->
Unit
(
unit
);
return
this
;
}
Benchmark
*
Benchmark
::
Range
(
int
start
,
int
limit
)
{
Benchmark
*
Benchmark
::
Range
(
int
start
,
int
limit
)
{
imp_
->
Range
(
start
,
limit
);
imp_
->
Range
(
start
,
limit
);
return
this
;
return
this
;
...
@@ -699,6 +712,7 @@ void RunBenchmark(const benchmark::internal::Benchmark::Instance& b,
...
@@ -699,6 +712,7 @@ void RunBenchmark(const benchmark::internal::Benchmark::Instance& b,
report
.
report_label
=
label
;
report
.
report_label
=
label
;
// Report the total iterations across all threads.
// Report the total iterations across all threads.
report
.
iterations
=
static_cast
<
int64_t
>
(
iters
)
*
b
.
threads
;
report
.
iterations
=
static_cast
<
int64_t
>
(
iters
)
*
b
.
threads
;
report
.
time_unit
=
b
.
time_unit
;
report
.
real_accumulated_time
=
real_accumulated_time
;
report
.
real_accumulated_time
=
real_accumulated_time
;
report
.
cpu_accumulated_time
=
cpu_accumulated_time
;
report
.
cpu_accumulated_time
=
cpu_accumulated_time
;
report
.
bytes_per_second
=
bytes_per_second
;
report
.
bytes_per_second
=
bytes_per_second
;
...
@@ -891,6 +905,7 @@ void ParseCommandLineFlags(int* argc, char** argv) {
...
@@ -891,6 +905,7 @@ void ParseCommandLineFlags(int* argc, char** argv) {
PrintUsageAndExit
();
PrintUsageAndExit
();
}
}
}
}
if
(
FLAGS_benchmark_format
!=
"tabular"
&&
if
(
FLAGS_benchmark_format
!=
"tabular"
&&
FLAGS_benchmark_format
!=
"json"
&&
FLAGS_benchmark_format
!=
"json"
&&
FLAGS_benchmark_format
!=
"csv"
)
{
FLAGS_benchmark_format
!=
"csv"
)
{
...
...
src/console_reporter.cc
View file @
9fa66eb1
...
@@ -18,6 +18,7 @@
...
@@ -18,6 +18,7 @@
#include <cstdio>
#include <cstdio>
#include <iostream>
#include <iostream>
#include <string>
#include <string>
#include <tuple>
#include <vector>
#include <vector>
#include "check.h"
#include "check.h"
...
@@ -46,9 +47,9 @@ bool ConsoleReporter::ReportContext(const Context& context) {
...
@@ -46,9 +47,9 @@ bool ConsoleReporter::ReportContext(const Context& context) {
"affected.
\n
"
;
"affected.
\n
"
;
#endif
#endif
int
output_width
=
fprintf
(
stdout
,
"%-*s %1
0s %10
s %10s
\n
"
,
int
output_width
=
fprintf
(
stdout
,
"%-*s %1
3s %13
s %10s
\n
"
,
static_cast
<
int
>
(
name_field_width_
),
"Benchmark"
,
static_cast
<
int
>
(
name_field_width_
),
"Benchmark"
,
"Time
(ns)"
,
"CPU(ns)
"
,
"Iterations"
);
"Time
"
,
"CPU
"
,
"Iterations"
);
std
::
cout
<<
std
::
string
(
output_width
-
1
,
'-'
)
<<
"
\n
"
;
std
::
cout
<<
std
::
string
(
output_width
-
1
,
'-'
)
<<
"
\n
"
;
return
true
;
return
true
;
...
@@ -92,19 +93,26 @@ void ConsoleReporter::PrintRunData(const Run& result) {
...
@@ -92,19 +93,26 @@ void ConsoleReporter::PrintRunData(const Run& result) {
" items/s"
);
" items/s"
);
}
}
double
const
multiplier
=
1e9
;
// nano second multiplier
double
multiplier
;
const
char
*
timeLabel
;
std
::
tie
(
timeLabel
,
multiplier
)
=
GetTimeUnitAndMultiplier
(
result
.
time_unit
);
ColorPrintf
(
COLOR_GREEN
,
"%-*s "
,
ColorPrintf
(
COLOR_GREEN
,
"%-*s "
,
name_field_width_
,
result
.
benchmark_name
.
c_str
());
name_field_width_
,
result
.
benchmark_name
.
c_str
());
if
(
result
.
iterations
==
0
)
{
if
(
result
.
iterations
==
0
)
{
ColorPrintf
(
COLOR_YELLOW
,
"%10.0f %
10.0f
"
,
ColorPrintf
(
COLOR_YELLOW
,
"%10.0f %
s %10.0f %s
"
,
result
.
real_accumulated_time
*
multiplier
,
result
.
real_accumulated_time
*
multiplier
,
result
.
cpu_accumulated_time
*
multiplier
);
timeLabel
,
result
.
cpu_accumulated_time
*
multiplier
,
timeLabel
);
}
else
{
}
else
{
ColorPrintf
(
COLOR_YELLOW
,
"%10.0f %
10.0f
"
,
ColorPrintf
(
COLOR_YELLOW
,
"%10.0f %
s %10.0f %s
"
,
(
result
.
real_accumulated_time
*
multiplier
)
/
(
result
.
real_accumulated_time
*
multiplier
)
/
(
static_cast
<
double
>
(
result
.
iterations
)),
(
static_cast
<
double
>
(
result
.
iterations
)),
timeLabel
,
(
result
.
cpu_accumulated_time
*
multiplier
)
/
(
result
.
cpu_accumulated_time
*
multiplier
)
/
(
static_cast
<
double
>
(
result
.
iterations
)));
(
static_cast
<
double
>
(
result
.
iterations
)),
timeLabel
);
}
}
ColorPrintf
(
COLOR_CYAN
,
"%10lld"
,
result
.
iterations
);
ColorPrintf
(
COLOR_CYAN
,
"%10lld"
,
result
.
iterations
);
ColorPrintf
(
COLOR_DEFAULT
,
"%*s %*s %s
\n
"
,
ColorPrintf
(
COLOR_DEFAULT
,
"%*s %*s %s
\n
"
,
...
...
src/csv_reporter.cc
View file @
9fa66eb1
...
@@ -17,6 +17,7 @@
...
@@ -17,6 +17,7 @@
#include <cstdint>
#include <cstdint>
#include <iostream>
#include <iostream>
#include <string>
#include <string>
#include <tuple>
#include <vector>
#include <vector>
#include "string_util.h"
#include "string_util.h"
...
@@ -42,7 +43,7 @@ bool CSVReporter::ReportContext(const Context& context) {
...
@@ -42,7 +43,7 @@ bool CSVReporter::ReportContext(const Context& context) {
std
::
cerr
<<
"***WARNING*** Library was built as DEBUG. Timings may be "
std
::
cerr
<<
"***WARNING*** Library was built as DEBUG. Timings may be "
"affected.
\n
"
;
"affected.
\n
"
;
#endif
#endif
std
::
cout
<<
"name,iterations,real_time,cpu_time,bytes_per_second,"
std
::
cout
<<
"name,iterations,real_time,cpu_time,
time_unit,
bytes_per_second,"
"items_per_second,label
\n
"
;
"items_per_second,label
\n
"
;
return
true
;
return
true
;
}
}
...
@@ -66,7 +67,10 @@ void CSVReporter::ReportRuns(std::vector<Run> const& reports) {
...
@@ -66,7 +67,10 @@ void CSVReporter::ReportRuns(std::vector<Run> const& reports) {
}
}
void
CSVReporter
::
PrintRunData
(
Run
const
&
run
)
{
void
CSVReporter
::
PrintRunData
(
Run
const
&
run
)
{
double
const
multiplier
=
1e9
;
// nano second multiplier
double
multiplier
;
const
char
*
timeLabel
;
std
::
tie
(
timeLabel
,
multiplier
)
=
GetTimeUnitAndMultiplier
(
run
.
time_unit
);
double
cpu_time
=
run
.
cpu_accumulated_time
*
multiplier
;
double
cpu_time
=
run
.
cpu_accumulated_time
*
multiplier
;
double
real_time
=
run
.
real_accumulated_time
*
multiplier
;
double
real_time
=
run
.
real_accumulated_time
*
multiplier
;
if
(
run
.
iterations
!=
0
)
{
if
(
run
.
iterations
!=
0
)
{
...
@@ -83,6 +87,7 @@ void CSVReporter::PrintRunData(Run const& run) {
...
@@ -83,6 +87,7 @@ void CSVReporter::PrintRunData(Run const& run) {
std
::
cout
<<
run
.
iterations
<<
","
;
std
::
cout
<<
run
.
iterations
<<
","
;
std
::
cout
<<
real_time
<<
","
;
std
::
cout
<<
real_time
<<
","
;
std
::
cout
<<
cpu_time
<<
","
;
std
::
cout
<<
cpu_time
<<
","
;
std
::
cout
<<
timeLabel
<<
","
;
if
(
run
.
bytes_per_second
>
0.0
)
{
if
(
run
.
bytes_per_second
>
0.0
)
{
std
::
cout
<<
run
.
bytes_per_second
;
std
::
cout
<<
run
.
bytes_per_second
;
...
...
src/json_reporter.cc
View file @
9fa66eb1
...
@@ -17,6 +17,7 @@
...
@@ -17,6 +17,7 @@
#include <cstdint>
#include <cstdint>
#include <iostream>
#include <iostream>
#include <string>
#include <string>
#include <tuple>
#include <vector>
#include <vector>
#include "string_util.h"
#include "string_util.h"
...
@@ -120,7 +121,10 @@ void JSONReporter::Finalize() {
...
@@ -120,7 +121,10 @@ void JSONReporter::Finalize() {
}
}
void
JSONReporter
::
PrintRunData
(
Run
const
&
run
)
{
void
JSONReporter
::
PrintRunData
(
Run
const
&
run
)
{
double
const
multiplier
=
1e9
;
// nano second multiplier
double
multiplier
;
const
char
*
timeLabel
;
std
::
tie
(
timeLabel
,
multiplier
)
=
GetTimeUnitAndMultiplier
(
run
.
time_unit
);
double
cpu_time
=
run
.
cpu_accumulated_time
*
multiplier
;
double
cpu_time
=
run
.
cpu_accumulated_time
*
multiplier
;
double
real_time
=
run
.
real_accumulated_time
*
multiplier
;
double
real_time
=
run
.
real_accumulated_time
*
multiplier
;
if
(
run
.
iterations
!=
0
)
{
if
(
run
.
iterations
!=
0
)
{
...
@@ -140,7 +144,10 @@ void JSONReporter::PrintRunData(Run const& run) {
...
@@ -140,7 +144,10 @@ void JSONReporter::PrintRunData(Run const& run) {
<<
FormatKV
(
"real_time"
,
RoundDouble
(
real_time
))
<<
FormatKV
(
"real_time"
,
RoundDouble
(
real_time
))
<<
",
\n
"
;
<<
",
\n
"
;
out
<<
indent
out
<<
indent
<<
FormatKV
(
"cpu_time"
,
RoundDouble
(
cpu_time
));
<<
FormatKV
(
"cpu_time"
,
RoundDouble
(
cpu_time
))
<<
",
\n
"
;
out
<<
indent
<<
FormatKV
(
"time_unit"
,
timeLabel
);
if
(
run
.
bytes_per_second
>
0.0
)
{
if
(
run
.
bytes_per_second
>
0.0
)
{
out
<<
",
\n
"
<<
indent
out
<<
",
\n
"
<<
indent
<<
FormatKV
(
"bytes_per_second"
,
RoundDouble
(
run
.
bytes_per_second
));
<<
FormatKV
(
"bytes_per_second"
,
RoundDouble
(
run
.
bytes_per_second
));
...
...
src/reporter.cc
View file @
9fa66eb1
...
@@ -77,6 +77,18 @@ void BenchmarkReporter::ComputeStats(
...
@@ -77,6 +77,18 @@ void BenchmarkReporter::ComputeStats(
stddev_data
->
items_per_second
=
items_per_second_stat
.
StdDev
();
stddev_data
->
items_per_second
=
items_per_second_stat
.
StdDev
();
}
}
TimeUnitMultiplier
BenchmarkReporter
::
GetTimeUnitAndMultiplier
(
TimeUnit
unit
)
{
switch
(
unit
)
{
case
kMillisecond
:
return
std
::
make_pair
(
"ms"
,
1e3
);
case
kMicrosecond
:
return
std
::
make_pair
(
"us"
,
1e6
);
case
kNanosecond
:
default
:
return
std
::
make_pair
(
"ns"
,
1e9
);
}
}
void
BenchmarkReporter
::
Finalize
()
{
void
BenchmarkReporter
::
Finalize
()
{
}
}
...
...
test/options_test.cc
View file @
9fa66eb1
#include "benchmark/benchmark_api.h"
#include "benchmark/benchmark_api.h"
#include <chrono>
#include <thread>
void
BM_basic
(
benchmark
::
State
&
state
)
{
void
BM_basic
(
benchmark
::
State
&
state
)
{
while
(
state
.
KeepRunning
())
{
while
(
state
.
KeepRunning
())
{
}
}
}
}
void
BM_basic_slow
(
benchmark
::
State
&
state
)
{
int
milliseconds
=
state
.
range_x
();
std
::
chrono
::
duration
<
double
,
std
::
milli
>
sleep_duration
{
static_cast
<
double
>
(
milliseconds
)
};
while
(
state
.
KeepRunning
())
{
std
::
this_thread
::
sleep_for
(
sleep_duration
);
}
}
BENCHMARK
(
BM_basic
);
BENCHMARK
(
BM_basic
);
BENCHMARK
(
BM_basic
)
->
Arg
(
42
);
BENCHMARK
(
BM_basic
)
->
Arg
(
42
);
BENCHMARK
(
BM_basic_slow
)
->
Arg
(
10
)
->
Unit
(
benchmark
::
kNanosecond
);
BENCHMARK
(
BM_basic_slow
)
->
Arg
(
100
)
->
Unit
(
benchmark
::
kMicrosecond
);
BENCHMARK
(
BM_basic_slow
)
->
Arg
(
1000
)
->
Unit
(
benchmark
::
kMillisecond
);
BENCHMARK
(
BM_basic
)
->
Range
(
1
,
8
);
BENCHMARK
(
BM_basic
)
->
Range
(
1
,
8
);
BENCHMARK
(
BM_basic
)
->
DenseRange
(
10
,
15
);
BENCHMARK
(
BM_basic
)
->
DenseRange
(
10
,
15
);
BENCHMARK
(
BM_basic
)
->
ArgPair
(
42
,
42
);
BENCHMARK
(
BM_basic
)
->
ArgPair
(
42
,
42
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment