diff options
Diffstat (limited to 'third_party/re2/util/benchmark.cc')
-rw-r--r-- | third_party/re2/util/benchmark.cc | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/third_party/re2/util/benchmark.cc b/third_party/re2/util/benchmark.cc index c3aad7e..b77e22d 100644 --- a/third_party/re2/util/benchmark.cc +++ b/third_party/re2/util/benchmark.cc @@ -25,10 +25,29 @@ void Benchmark::Register() { } static int64 nsec() { +#if defined(__APPLE__) struct timeval tv; if(gettimeofday(&tv, 0) < 0) return -1; return (int64)tv.tv_sec*1000*1000*1000 + tv.tv_usec*1000; +#elif defined(_WIN32) + // https://msdn.microsoft.com/en-us/library/windows/desktop/dn553408.aspx + // describes how to query ticks and convert to microseconds. Of course, + // what we want in this case are nanoseconds. Also, note that .QuadPart + // is a signed 64-bit integer, so casting to int64 shouldn't be needed. + LARGE_INTEGER freq; + QueryPerformanceFrequency(&freq); + LARGE_INTEGER ticks; + QueryPerformanceCounter(&ticks); + ticks.QuadPart *= 1000*1000*1000; + ticks.QuadPart /= freq.QuadPart; + return ticks.QuadPart; +#else + struct timespec tp; + if(clock_gettime(CLOCK_REALTIME, &tp) < 0) + return -1; + return (int64)tp.tv_sec*1000*1000*1000 + tp.tv_nsec; +#endif } static int64 bytes; @@ -105,9 +124,9 @@ void RunBench(Benchmark* b, int nthread, int siz) { while(ns < (int)1e9 && n < (int)1e9) { last = n; if(ns/n == 0) - n = 1e9; + n = (int)1e9; else - n = 1e9 / (ns/n); + n = (int)1e9 / static_cast<int>(ns/n); n = max(last+1, min(n+n/2, 100*last)); n = round(n); |