Chromium Code Reviews| Index: util/win/time.cc |
| diff --git a/util/win/time.cc b/util/win/time.cc |
| index 1957b6c929607b793c2a8b54bbce8927f4ea2cd2..3b56feeaf5ab9e166825bfcc5c1380f15d95ac93 100644 |
| --- a/util/win/time.cc |
| +++ b/util/win/time.cc |
| @@ -15,15 +15,16 @@ |
| #include "util/win/time.h" |
| #include <inttypes.h> |
| -#include <windows.h> |
| #include "base/logging.h" |
| namespace crashpad { |
| -void GetTimeOfDay(timeval* tv) { |
| - FILETIME filetime; |
| - GetSystemTimeAsFileTime(&filetime); |
| +namespace { |
| +const uint64_t kMicrosecondsPerSecond = static_cast<uint64_t>(1E6); |
| +} // namespace |
| + |
| +timeval FiletimeToTimevalEpoch(const FILETIME& filetime) { |
| uint64_t t = (static_cast<uint64_t>(filetime.dwHighDateTime) << 32) | |
| filetime.dwLowDateTime; |
| t /= 10; // 100 nanosecond intervals to microseconds. |
| @@ -32,11 +33,28 @@ void GetTimeOfDay(timeval* tv) { |
| // day. It's not entirely clear, but it appears that these are solar seconds, |
| // not SI seconds, so there are no leap seconds to be considered. |
| const uint64_t kNumSecondsFrom1601To1970 = (369 * 365 + 89) * 86400ULL; |
| - const uint64_t kMicrosecondsPerSecond = static_cast<uint64_t>(1E6); |
| DCHECK_GE(t, kNumSecondsFrom1601To1970 * kMicrosecondsPerSecond); |
| t -= kNumSecondsFrom1601To1970 * kMicrosecondsPerSecond; |
| - tv->tv_sec = static_cast<long>(t / kMicrosecondsPerSecond); |
| - tv->tv_usec = static_cast<long>(t % kMicrosecondsPerSecond); |
| + timeval tv; |
| + tv.tv_sec = static_cast<long>(t / kMicrosecondsPerSecond); |
| + tv.tv_usec = static_cast<long>(t % kMicrosecondsPerSecond); |
| + return tv; |
| +} |
| + |
| +timeval FiletimeToTimevalAmount(const FILETIME& filetime) { |
|
Mark Mentovai
2015/05/04 21:29:24
I’m on the fence about having these two functions
scottmg
2015/05/05 16:45:48
I was too. I made a MicrosecondsToTimeval helper.
|
| + uint64_t t = (static_cast<uint64_t>(filetime.dwHighDateTime) << 32) | |
| + filetime.dwLowDateTime; |
| + t /= 10; // 100 nanosecond intervals to microseconds. |
| + timeval tv; |
| + tv.tv_sec = static_cast<long>(t / kMicrosecondsPerSecond); |
| + tv.tv_usec = static_cast<long>(t % kMicrosecondsPerSecond); |
| + return tv; |
| +} |
| + |
| +void GetTimeOfDay(timeval* tv) { |
| + FILETIME filetime; |
| + GetSystemTimeAsFileTime(&filetime); |
| + *tv = FiletimeToTimevalEpoch(filetime); |
| } |
| } // namespace crashpad |