| Index: base/time/time_win.cc | 
| diff --git a/base/time/time_win.cc b/base/time/time_win.cc | 
| index 27bcd1876da0d414ad14764c96b88d98561da722..5fa899d1f97f69be69d1df65ba854565d7240b53 100644 | 
| --- a/base/time/time_win.cc | 
| +++ b/base/time/time_win.cc | 
| @@ -359,24 +359,21 @@ | 
| class HighResNowSingleton { | 
| public: | 
| HighResNowSingleton() | 
| -      : ticks_per_second_(0), | 
| -        skew_(0) { | 
| +    : ticks_per_second_(0), | 
| +      skew_(0) { | 
| +    InitializeClock(); | 
|  | 
| base::CPU cpu; | 
| if (IsBuggyAthlon(cpu)) | 
| -      return; | 
| - | 
| -    // Synchronize the QPC clock with GetSystemTimeAsFileTime. | 
| -    LARGE_INTEGER ticks_per_sec = {0}; | 
| -    if (!QueryPerformanceFrequency(&ticks_per_sec)) | 
| -      return; // QPC is not available. | 
| -    ticks_per_second_ = ticks_per_sec.QuadPart; | 
| - | 
| -    skew_ = UnreliableNow() - ReliableNow(); | 
| +      DisableHighResClock(); | 
| } | 
|  | 
| bool IsUsingHighResClock() { | 
| -    return ticks_per_second_ != 0; | 
| +    return ticks_per_second_ != 0.0; | 
| +  } | 
| + | 
| +  void DisableHighResClock() { | 
| +    ticks_per_second_ = 0.0; | 
| } | 
|  | 
| TimeDelta Now() { | 
| @@ -411,6 +408,16 @@ | 
| } | 
|  | 
| private: | 
| +  // Synchronize the QPC clock with GetSystemTimeAsFileTime. | 
| +  void InitializeClock() { | 
| +    LARGE_INTEGER ticks_per_sec = {0}; | 
| +    if (!QueryPerformanceFrequency(&ticks_per_sec)) | 
| +      return;  // Broken, we don't guarantee this function works. | 
| +    ticks_per_second_ = ticks_per_sec.QuadPart; | 
| + | 
| +    skew_ = UnreliableNow() - ReliableNow(); | 
| +  } | 
| + | 
| // Get the number of microseconds since boot in an unreliable fashion. | 
| int64 UnreliableNow() { | 
| LARGE_INTEGER now; | 
| @@ -439,6 +446,7 @@ | 
| } | 
|  | 
| typedef TimeDelta (*NowFunction)(void); | 
| +NowFunction now_function = RolloverProtectedNow; | 
|  | 
| bool CPUReliablySupportsHighResTime() { | 
| base::CPU cpu; | 
| @@ -451,14 +459,6 @@ | 
|  | 
| return true; | 
| } | 
| - | 
| -NowFunction GetNowFunction() { | 
| -  if (!CPUReliablySupportsHighResTime()) | 
| -    return RolloverProtectedNow; | 
| -  return HighResNowWrapper; | 
| -} | 
| - | 
| -NowFunction now_function = GetNowFunction(); | 
|  | 
| }  // namespace | 
|  | 
| @@ -474,6 +474,16 @@ | 
| } | 
|  | 
| // static | 
| +bool TimeTicks::SetNowIsHighResNowIfSupported() { | 
| +  if (!CPUReliablySupportsHighResTime()) { | 
| +    return false; | 
| +  } | 
| + | 
| +  now_function = HighResNowWrapper; | 
| +  return true; | 
| +} | 
| + | 
| +// static | 
| TimeTicks TimeTicks::Now() { | 
| return TimeTicks() + now_function(); | 
| } | 
|  |