Chromium Code Reviews| Index: util/win/time.cc |
| diff --git a/util/win/time.cc b/util/win/time.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..9dd9d4ccb14992d48b6d27abce79fe50ea75eb44 |
| --- /dev/null |
| +++ b/util/win/time.cc |
| @@ -0,0 +1,39 @@ |
| +// Copyright 2015 The Crashpad Authors. All rights reserved. |
| +// |
| +// Licensed under the Apache License, Version 2.0 (the "License"); |
| +// you may not use this file except in compliance with the License. |
| +// You may obtain a copy of the License at |
| +// |
| +// http://www.apache.org/licenses/LICENSE-2.0 |
| +// |
| +// Unless required by applicable law or agreed to in writing, software |
| +// distributed under the License is distributed on an "AS IS" BASIS, |
| +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| +// See the License for the specific language governing permissions and |
| +// limitations under the License. |
| + |
| +#include "util/win/time.h" |
| + |
| +#include <inttypes.h> |
| +#include <windows.h> |
| + |
| +namespace crashpad { |
| + |
| +void GetTimeOfDay(timeval* tv) { |
|
Mark Mentovai
2015/02/20 18:15:33
Maybe we want to do this in compat as gettimeofday
scottmg
2015/02/20 19:27:56
There isn't at the moment, so I'll leave it here.
|
| + FILETIME filetime; |
| + GetSystemTimeAsFileTime(&filetime); |
| + uint64_t t = (static_cast<uint64_t>(filetime.dwHighDateTime) << 32) | |
| + filetime.dwLowDateTime; |
| + t /= 10; // 100 nanosecond intervals to microseconds. |
| + // 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 = 11644473600; |
|
Mark Mentovai
2015/02/20 18:15:33
This would be more convincing if it did the math i
scottmg
2015/02/20 19:27:56
Done.
|
| + const uint64_t kMicrosecondsPerSecond = 1000000; |
|
Mark Mentovai
2015/02/20 18:15:33
Counting zeroes is hard, use 1E6.
scottmg
2015/02/20 19:27:56
Done.
|
| + t -= kNumSecondsFrom1601To1970 * kMicrosecondsPerSecond; |
|
Mark Mentovai
2015/02/20 18:15:33
DCHECK_GE(t, kNumSecondsFrom1601To1970) before sub
scottmg
2015/02/20 19:27:56
Done.
|
| + tv->tv_sec = static_cast<long>(t / kMicrosecondsPerSecond); |
| + tv->tv_usec = static_cast<long>(t % kMicrosecondsPerSecond); |
| +} |
| + |
| +} // namespace crashpad |