OLD | NEW |
---|---|
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 | 5 |
6 // Windows Timer Primer | 6 // Windows Timer Primer |
7 // | 7 // |
8 // A good article: http://www.ddj.com/windows/184416651 | 8 // A good article: http://www.ddj.com/windows/184416651 |
9 // A good mozilla bug: http://bugzilla.mozilla.org/show_bug.cgi?id=363258 | 9 // A good mozilla bug: http://bugzilla.mozilla.org/show_bug.cgi?id=363258 |
10 // | 10 // |
(...skipping 345 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
356 return TimeDelta::FromMicroseconds(UnreliableNow()); | 356 return TimeDelta::FromMicroseconds(UnreliableNow()); |
357 | 357 |
358 // Just fallback to the slower clock. | 358 // Just fallback to the slower clock. |
359 return RolloverProtectedNow(); | 359 return RolloverProtectedNow(); |
360 } | 360 } |
361 | 361 |
362 int64 GetQPCDriftMicroseconds() { | 362 int64 GetQPCDriftMicroseconds() { |
363 if (!IsUsingHighResClock()) | 363 if (!IsUsingHighResClock()) |
364 return 0; | 364 return 0; |
365 | 365 |
366 #if defined(OS_WIN) | |
367 // The static_cast<long> is needed as a hint to VS 2008 to tell it | |
368 // which version of abs() to use. Other compilers don't seem to | |
369 // need it, including VS 2010, but to keep code identical between | |
370 // VS 2008 and 2010 we use the hint for all Windows builds. | |
371 return abs(static_cast<long>((UnreliableNow() - ReliableNow()) - skew_)); | |
brettw
2011/09/15 18:03:15
Is it possible to use this on all platforms and sk
| |
372 #else | |
366 return abs((UnreliableNow() - ReliableNow()) - skew_); | 373 return abs((UnreliableNow() - ReliableNow()) - skew_); |
374 #endif | |
367 } | 375 } |
368 | 376 |
369 private: | 377 private: |
370 HighResNowSingleton() | 378 HighResNowSingleton() |
371 : ticks_per_microsecond_(0.0), | 379 : ticks_per_microsecond_(0.0), |
372 skew_(0) { | 380 skew_(0) { |
373 InitializeClock(); | 381 InitializeClock(); |
374 | 382 |
375 // On Athlon X2 CPUs (e.g. model 15) QueryPerformanceCounter is | 383 // On Athlon X2 CPUs (e.g. model 15) QueryPerformanceCounter is |
376 // unreliable. Fallback to low-res clock. | 384 // unreliable. Fallback to low-res clock. |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
432 | 440 |
433 // static | 441 // static |
434 int64 TimeTicks::GetQPCDriftMicroseconds() { | 442 int64 TimeTicks::GetQPCDriftMicroseconds() { |
435 return HighResNowSingleton::GetInstance()->GetQPCDriftMicroseconds(); | 443 return HighResNowSingleton::GetInstance()->GetQPCDriftMicroseconds(); |
436 } | 444 } |
437 | 445 |
438 // static | 446 // static |
439 bool TimeTicks::IsHighResClockWorking() { | 447 bool TimeTicks::IsHighResClockWorking() { |
440 return HighResNowSingleton::GetInstance()->IsUsingHighResClock(); | 448 return HighResNowSingleton::GetInstance()->IsUsingHighResClock(); |
441 } | 449 } |
OLD | NEW |