mirror of
https://github.com/chromium/crashpad.git
synced 2025-03-09 14:06:33 +00:00
util/win/time.cc: Add and use FiletimeToMicroseconds().
R=scottmg@chromium.org Review URL: https://codereview.chromium.org/1137503002
This commit is contained in:
parent
919715bda8
commit
e8e19ac29d
@ -24,34 +24,36 @@ namespace {
|
||||
|
||||
const uint64_t kMicrosecondsPerSecond = static_cast<uint64_t>(1E6);
|
||||
|
||||
timeval MicrosecondsToTimeval(uint64_t t) {
|
||||
uint64_t FiletimeToMicroseconds(const FILETIME& filetime) {
|
||||
uint64_t t = (static_cast<uint64_t>(filetime.dwHighDateTime) << 32) |
|
||||
filetime.dwLowDateTime;
|
||||
return t / 10; // 100 nanosecond intervals to microseconds.
|
||||
}
|
||||
|
||||
timeval MicrosecondsToTimeval(uint64_t microseconds) {
|
||||
timeval tv;
|
||||
tv.tv_sec = static_cast<long>(t / kMicrosecondsPerSecond);
|
||||
tv.tv_usec = static_cast<long>(t % kMicrosecondsPerSecond);
|
||||
tv.tv_sec = static_cast<long>(microseconds / kMicrosecondsPerSecond);
|
||||
tv.tv_usec = static_cast<long>(microseconds % kMicrosecondsPerSecond);
|
||||
return tv;
|
||||
}
|
||||
|
||||
} // 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.
|
||||
uint64_t microseconds = FiletimeToMicroseconds(filetime);
|
||||
|
||||
// Windows epoch is 1601-01-01, and FILETIME ticks are 100 nanoseconds.
|
||||
// 1601 to 1970 is 369 years + 89 leap days = 134774 days * 86400 seconds per
|
||||
// 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;
|
||||
DCHECK_GE(t, kNumSecondsFrom1601To1970 * kMicrosecondsPerSecond);
|
||||
t -= kNumSecondsFrom1601To1970 * kMicrosecondsPerSecond;
|
||||
return MicrosecondsToTimeval(t);
|
||||
DCHECK_GE(microseconds, kNumSecondsFrom1601To1970 * kMicrosecondsPerSecond);
|
||||
microseconds -= kNumSecondsFrom1601To1970 * kMicrosecondsPerSecond;
|
||||
return MicrosecondsToTimeval(microseconds);
|
||||
}
|
||||
|
||||
timeval FiletimeToTimevalInterval(const FILETIME& filetime) {
|
||||
uint64_t t = (static_cast<uint64_t>(filetime.dwHighDateTime) << 32) |
|
||||
filetime.dwLowDateTime;
|
||||
t /= 10; // 100 nanosecond intervals to microseconds.
|
||||
return MicrosecondsToTimeval(t);
|
||||
return MicrosecondsToTimeval(FiletimeToMicroseconds(filetime));
|
||||
}
|
||||
|
||||
void GetTimeOfDay(timeval* tv) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user