Commit 725f1f06 by Eric Fiselier

add walltime benchmark and fix unused variable.

parent be993acb
...@@ -145,6 +145,21 @@ WallTimeImp::WallTimeImp() ...@@ -145,6 +145,21 @@ WallTimeImp::WallTimeImp()
} // end anonymous namespace } // end anonymous namespace
WallTime CPUWalltimeNow() {
static WallTimeImp& imp = WallTimeImp::GetWallTimeImp();
return imp.Now();
}
WallTime ChronoWalltimeNow() {
typedef std::chrono::system_clock Clock;
typedef std::chrono::duration<WallTime, std::chrono::seconds::period>
FPSeconds;
static_assert(std::chrono::treat_as_floating_point<WallTime>::value,
"This type must be treated as a floating point type.");
auto now = Clock::now().time_since_epoch();
return std::chrono::duration_cast<FPSeconds>(now).count();
}
// WallTimeImp doesn't work when CPU Scaling is enabled. If CPU Scaling is // WallTimeImp doesn't work when CPU Scaling is enabled. If CPU Scaling is
// enabled at the start of the program then std::chrono::system_clock is used // enabled at the start of the program then std::chrono::system_clock is used
// instead. // instead.
...@@ -152,16 +167,9 @@ WallTime Now() ...@@ -152,16 +167,9 @@ WallTime Now()
{ {
static bool useWallTime = !CpuScalingEnabled(); static bool useWallTime = !CpuScalingEnabled();
if (useWallTime) { if (useWallTime) {
static WallTimeImp& imp = WallTimeImp::GetWallTimeImp(); return CPUWalltimeNow();
return imp.Now();
} else { } else {
typedef std::chrono::system_clock Clock; return ChronoWalltimeNow();
typedef std::chrono::duration<WallTime, std::chrono::seconds::period>
FPSeconds;
static_assert(std::chrono::treat_as_floating_point<WallTime>::value,
"This type must be treated as a floating point type.");
auto now = Clock::now().time_since_epoch();
return std::chrono::duration_cast<FPSeconds>(now).count();
} }
} }
...@@ -185,6 +193,7 @@ std::string DateTimeString(bool local) { ...@@ -185,6 +193,7 @@ std::string DateTimeString(bool local) {
} }
std::size_t written = std::strftime(storage, sizeof(storage), "%F %T", &timeinfo); std::size_t written = std::strftime(storage, sizeof(storage), "%F %T", &timeinfo);
CHECK(written < arraysize(storage)); CHECK(written < arraysize(storage));
((void)written); // prevent unused variable in optimized mode.
return std::string(storage); return std::string(storage);
} }
......
...@@ -7,6 +7,8 @@ namespace benchmark { ...@@ -7,6 +7,8 @@ namespace benchmark {
typedef double WallTime; typedef double WallTime;
namespace walltime { namespace walltime {
WallTime CPUWalltimeNow();
WallTime ChronoWalltimeNow();
WallTime Now(); WallTime Now();
} // end namespace walltime } // end namespace walltime
......
...@@ -32,3 +32,5 @@ compile_benchmark_test(cxx03_test) ...@@ -32,3 +32,5 @@ compile_benchmark_test(cxx03_test)
set_target_properties(cxx03_test set_target_properties(cxx03_test
PROPERTIES COMPILE_FLAGS "${CXX03_FLAGS}") PROPERTIES COMPILE_FLAGS "${CXX03_FLAGS}")
add_test(cxx03 cxx03_test) add_test(cxx03 cxx03_test)
compile_benchmark_test(walltime_test)
...@@ -65,8 +65,8 @@ void BM_pause_during(benchmark::State& state) { ...@@ -65,8 +65,8 @@ void BM_pause_during(benchmark::State& state) {
state.ResumeTiming(); state.ResumeTiming();
} }
} }
BENCHMARK_TEST(BM_pause_during); BENCHMARK(BM_pause_during);
BENCHMARK_TEST(BM_pause_during)->ThreadPerCpu(); BENCHMARK(BM_pause_during)->ThreadPerCpu();
void BM_pause_during_realtime(benchmark::State& state) { void BM_pause_during_realtime(benchmark::State& state) {
state.UseRealTime(); state.UseRealTime();
...@@ -75,8 +75,8 @@ void BM_pause_during_realtime(benchmark::State& state) { ...@@ -75,8 +75,8 @@ void BM_pause_during_realtime(benchmark::State& state) {
state.ResumeTiming(); state.ResumeTiming();
} }
} }
BENCHMARK_TEST(BM_pause_during_realtime); BENCHMARK(BM_pause_during_realtime);
BENCHMARK_TEST(BM_pause_during_realtime)->ThreadPerCpu(); BENCHMARK(BM_pause_during_realtime)->ThreadPerCpu();
void BM_spin_pause_after(benchmark::State& state) { void BM_spin_pause_after(benchmark::State& state) {
while(state.KeepRunning()) { while(state.KeepRunning()) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment