OLD | NEW |
---|---|
(Empty) | |
1 // Copyright 2015 The Crashpad Authors. All rights reserved. | |
2 // | |
3 // Licensed under the Apache License, Version 2.0 (the "License"); | |
4 // you may not use this file except in compliance with the License. | |
5 // You may obtain a copy of the License at | |
6 // | |
7 // http://www.apache.org/licenses/LICENSE-2.0 | |
8 // | |
9 // Unless required by applicable law or agreed to in writing, software | |
10 // distributed under the License is distributed on an "AS IS" BASIS, | |
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
12 // See the License for the specific language governing permissions and | |
13 // limitations under the License. | |
14 | |
15 #include "util/win/time.h" | |
16 | |
17 #include <inttypes.h> | |
18 #include <windows.h> | |
19 | |
20 namespace crashpad { | |
21 | |
22 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.
| |
23 FILETIME filetime; | |
24 GetSystemTimeAsFileTime(&filetime); | |
25 uint64_t t = (static_cast<uint64_t>(filetime.dwHighDateTime) << 32) | | |
26 filetime.dwLowDateTime; | |
27 t /= 10; // 100 nanosecond intervals to microseconds. | |
28 // Windows epoch is 1601-01-01, and FILETIME ticks are 100 nanoseconds. | |
29 // 1601 to 1970 is 369 years + 89 leap days = 134774 days * 86400 seconds per | |
30 // day. It's not entirely clear, but it appears that these are solar seconds, | |
31 // not SI seconds, so there are no leap seconds to be considered. | |
32 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.
| |
33 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.
| |
34 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.
| |
35 tv->tv_sec = static_cast<long>(t / kMicrosecondsPerSecond); | |
36 tv->tv_usec = static_cast<long>(t % kMicrosecondsPerSecond); | |
37 } | |
38 | |
39 } // namespace crashpad | |
OLD | NEW |