diff options
author | snappy.mirrorbot@gmail.com <snappy.mirrorbot@gmail.com@03e5f5b5-db94-4691-08a0-1a8bf15f6143> | 2011-04-11 09:07:01 +0000 |
---|---|---|
committer | snappy.mirrorbot@gmail.com <snappy.mirrorbot@gmail.com@03e5f5b5-db94-4691-08a0-1a8bf15f6143> | 2011-04-11 09:07:01 +0000 |
commit | bbe6defd5fb1df14578ddc389475fd1a64077eb5 (patch) | |
tree | 0d0d66cbb62e0ed0e4af59378652cb43e1d9ded5 /snappy-test.cc | |
parent | 69e3b45891cafc6f56be8cdaf398253b946d1015 (diff) | |
download | snappy-bbe6defd5fb1df14578ddc389475fd1a64077eb5.tar.gz |
Fix public issue #29: Write CPU timing code for Windows, based on GetProcessTimes()
instead of getursage().
I thought I'd already committed this patch, so that the 1.0.1 release already
would have a Windows-compatible snappy_unittest, but I'd seemingly deleted it
instead, so this is a reconstruction.
R=csilvers
DELTA=43 (39 added, 3 deleted, 1 changed)
Revision created by MOE tool push_codebase.
MOE_MIGRATION=1295
git-svn-id: http://snappy.googlecode.com/svn/trunk@28 03e5f5b5-db94-4691-08a0-1a8bf15f6143
Diffstat (limited to 'snappy-test.cc')
-rw-r--r-- | snappy-test.cc | 39 |
1 files changed, 36 insertions, 3 deletions
diff --git a/snappy-test.cc b/snappy-test.cc index 4fb3cf4..e43a556 100644 --- a/snappy-test.cc +++ b/snappy-test.cc @@ -30,6 +30,10 @@ #include "snappy-test.h" +#ifdef HAVE_WINDOWS_H +#include <windows.h> +#endif + #include <algorithm> DEFINE_bool(run_microbenchmarks, true, @@ -64,20 +68,31 @@ int64 benchmark_cpu_time_us = 0; string *benchmark_label = NULL; int64 benchmark_bytes_processed = 0; -struct timeval benchmark_start_real; -struct rusage benchmark_start_cpu; - void ResetBenchmarkTiming() { benchmark_real_time_us = 0; benchmark_cpu_time_us = 0; } +struct timeval benchmark_start_real; + +#ifdef WIN32 +FILETIME benchmark_start_cpu; +#else // WIN32 +struct rusage benchmark_start_cpu; +#endif // WIN32 + void StartBenchmarkTiming() { gettimeofday(&benchmark_start_real, NULL); +#ifdef WIN32 + FILETIME dummy; + CHECK(GetProcessTimes( + GetCurrentProcess(), &dummy, &dummy, &dummy, &benchmark_start_cpu)); +#else if (getrusage(RUSAGE_SELF, &benchmark_start_cpu) == -1) { perror("getrusage(RUSAGE_SELF)"); exit(1); } +#endif benchmark_running = true; } @@ -92,6 +107,22 @@ void StopBenchmarkTiming() { benchmark_real_time_us += (benchmark_stop_real.tv_usec - benchmark_start_real.tv_usec); +#ifdef WIN32 + FILETIME benchmark_stop_cpu, dummy; + CHECK(GetProcessTimes( + GetCurrentProcess(), &dummy, &dummy, &dummy, &benchmark_stop_cpu)); + + ULARGE_INTEGER start_ulargeint; + start_ulargeint.LowPart = benchmark_start_cpu.dwLowDateTime; + start_ulargeint.HighPart = benchmark_start_cpu.dwHighDateTime; + + ULARGE_INTEGER stop_ulargeint; + stop_ulargeint.LowPart = benchmark_stop_cpu.dwLowDateTime; + stop_ulargeint.HighPart = benchmark_stop_cpu.dwHighDateTime; + + benchmark_cpu_time_us += + (stop_ulargeint.QuadPart - start_ulargeint.QuadPart + 5) / 10; +#else // WIN32 struct rusage benchmark_stop_cpu; if (getrusage(RUSAGE_SELF, &benchmark_stop_cpu) == -1) { perror("getrusage(RUSAGE_SELF)"); @@ -101,6 +132,8 @@ void StopBenchmarkTiming() { benchmark_start_cpu.ru_utime.tv_sec); benchmark_cpu_time_us += (benchmark_stop_cpu.ru_utime.tv_usec - benchmark_start_cpu.ru_utime.tv_usec); +#endif // WIN32 + benchmark_running = false; } |