Index: base/time/time_win.cc |
diff --git a/base/time/time_win.cc b/base/time/time_win.cc |
index ef8d29a92cbdcb9152ae503a4b02a28eba9d6f39..93f0c25e2c4e2227c86d156cefd716a96fe3a4ff 100644 |
--- a/base/time/time_win.cc |
+++ b/base/time/time_win.cc |
@@ -42,8 +42,8 @@ |
#include "base/basictypes.h" |
#include "base/cpu.h" |
+#include "base/lazy_instance.h" |
#include "base/logging.h" |
-#include "base/memory/singleton.h" |
#include "base/synchronization/lock.h" |
using base::Time; |
@@ -358,8 +358,14 @@ bool IsBuggyAthlon(const base::CPU& cpu) { |
// retrieve and more reliable. |
class HighResNowSingleton { |
public: |
- static HighResNowSingleton* GetInstance() { |
- return Singleton<HighResNowSingleton>::get(); |
+ HighResNowSingleton() |
+ : ticks_per_second_(0), |
+ skew_(0) { |
+ InitializeClock(); |
+ |
+ base::CPU cpu; |
+ if (IsBuggyAthlon(cpu)) |
+ DisableHighResClock(); |
} |
bool IsUsingHighResClock() { |
@@ -399,16 +405,6 @@ class HighResNowSingleton { |
} |
private: |
- HighResNowSingleton() |
- : ticks_per_second_(0), |
- skew_(0) { |
- InitializeClock(); |
- |
- base::CPU cpu; |
- if (IsBuggyAthlon(cpu)) |
- DisableHighResClock(); |
- } |
- |
// Synchronize the QPC clock with GetSystemTimeAsFileTime. |
void InitializeClock() { |
LARGE_INTEGER ticks_per_sec = {0}; |
@@ -433,12 +429,17 @@ class HighResNowSingleton { |
int64 ticks_per_second_; // 0 indicates QPF failed and we're broken. |
int64 skew_; // Skew between lo-res and hi-res clocks (for debugging). |
- |
- friend struct DefaultSingletonTraits<HighResNowSingleton>; |
}; |
+static base::LazyInstance<HighResNowSingleton>::Leaky |
+ leaky_high_res_now_singleton = LAZY_INSTANCE_INITIALIZER; |
+ |
+HighResNowSingleton* GetHighResNowSingleton() { |
+ return leaky_high_res_now_singleton.Pointer(); |
+} |
+ |
TimeDelta HighResNowWrapper() { |
- return HighResNowSingleton::GetInstance()->Now(); |
+ return GetHighResNowSingleton()->Now(); |
} |
typedef TimeDelta (*NowFunction)(void); |
@@ -485,7 +486,7 @@ TimeTicks TimeTicks::Now() { |
// static |
TimeTicks TimeTicks::HighResNow() { |
- return TimeTicks() + HighResNowSingleton::GetInstance()->Now(); |
+ return TimeTicks() + HighResNowWrapper(); |
} |
// static |
@@ -506,18 +507,17 @@ TimeTicks TimeTicks::NowFromSystemTraceTime() { |
// static |
int64 TimeTicks::GetQPCDriftMicroseconds() { |
- return HighResNowSingleton::GetInstance()->GetQPCDriftMicroseconds(); |
+ return GetHighResNowSingleton()->GetQPCDriftMicroseconds(); |
} |
// static |
TimeTicks TimeTicks::FromQPCValue(LONGLONG qpc_value) { |
- return TimeTicks( |
- HighResNowSingleton::GetInstance()->QPCValueToMicroseconds(qpc_value)); |
+ return TimeTicks(GetHighResNowSingleton()->QPCValueToMicroseconds(qpc_value)); |
} |
// static |
bool TimeTicks::IsHighResClockWorking() { |
- return HighResNowSingleton::GetInstance()->IsUsingHighResClock(); |
+ return GetHighResNowSingleton()->IsUsingHighResClock(); |
} |
TimeTicks TimeTicks::UnprotectedNow() { |
@@ -532,6 +532,5 @@ TimeTicks TimeTicks::UnprotectedNow() { |
// static |
TimeDelta TimeDelta::FromQPCValue(LONGLONG qpc_value) { |
- return TimeDelta( |
- HighResNowSingleton::GetInstance()->QPCValueToMicroseconds(qpc_value)); |
+ return TimeDelta(GetHighResNowSingleton()->QPCValueToMicroseconds(qpc_value)); |
} |