OLD | NEW |
---|---|
(Empty) | |
1 // Copyright 2014 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/misc/clock.h" | |
16 | |
17 #include <sys/types.h> | |
18 #include <windows.h> | |
19 | |
20 namespace { | |
21 | |
22 LARGE_INTEGER QpcFrequencyInternal() { | |
23 LARGE_INTEGER frequency; | |
24 QueryPerformanceFrequency(&frequency); | |
25 return frequency; | |
26 } | |
27 | |
28 int64_t QpcFrequency() { | |
29 static LARGE_INTEGER frequency = QpcFrequencyInternal(); | |
30 return frequency.QuadPart; | |
31 } | |
32 | |
33 } // namespace | |
34 | |
35 namespace crashpad { | |
36 | |
37 uint64_t ClockMonotonicNanoseconds() { | |
38 LARGE_INTEGER time; | |
39 QueryPerformanceCounter(&time); | |
40 int64_t frequency = QpcFrequency(); | |
41 int64_t whole_seconds = time.QuadPart / frequency; | |
42 int64_t leftover_ticks = time.QuadPart / (whole_seconds * frequency); | |
43 const int64_t kNanosecondsPerSecond = static_cast<const int64_t>(1E9); | |
44 return (whole_seconds * kNanosecondsPerSecond) + | |
45 ((leftover_ticks * kNanosecondsPerSecond) / frequency); | |
46 } | |
47 | |
48 void SleepNanoseconds(uint64_t nanoseconds) { | |
49 // This is both inaccurate (will be way too long for short sleeps) and | |
50 // incorrect (can sleep for less than requested). But it's what's available | |
51 // without implementing a busy loop. | |
Mark Mentovai
2014/12/17 01:12:23
Probably should do the loop until ClockMonotonicNa
scottmg
2014/12/17 01:58:11
Done. I look forward to deleting it!
| |
52 const uint64_t kNanosecondsPerMillisecond = static_cast<const uint64_t>(1E6); | |
53 Sleep(static_cast<DWORD>(nanoseconds / kNanosecondsPerMillisecond)); | |
54 } | |
55 | |
56 } // namespace crashpad | |
OLD | NEW |