Index: base/time/time_win_unittest.cc |
diff --git a/base/time/time_win_unittest.cc b/base/time/time_win_unittest.cc |
index 46e256ead0cd6c84c571230ad8e7f0b8820b2cc3..c6bb66cffa53d741182596b6038722fb5446b18c 100644 |
--- a/base/time/time_win_unittest.cc |
+++ b/base/time/time_win_unittest.cc |
@@ -241,3 +241,34 @@ TEST(TimeTicks, DISABLED_Drift) { |
printf("average time drift in microseconds: %lld\n", |
total_drift / kIterations); |
} |
+ |
+int64 QPCValueToMicrosecondsSafely(LONGLONG qpc_value, |
+ int64 ticks_per_second) { |
+ int64 whole_seconds = qpc_value / ticks_per_second; |
+ int64 leftover_ticks = qpc_value % ticks_per_second; |
+ int64 microseconds = (whole_seconds * Time::kMicrosecondsPerSecond) + |
+ ((leftover_ticks * Time::kMicrosecondsPerSecond) / |
+ ticks_per_second); |
+ return microseconds; |
+} |
+ |
+TEST(TimeTicks, FromQPCValue) { |
+ if (!TimeTicks::IsHighResClockWorking()) |
+ return; |
+ LARGE_INTEGER frequency; |
+ QueryPerformanceFrequency(&frequency); |
+ int64 ticks_per_second = frequency.QuadPart; |
+ LONGLONG qpc_value = Time::kQPCOverflowThreshold; |
+ TimeTicks expected_value = TimeTicks::FromInternalValue( |
+ QPCValueToMicrosecondsSafely(qpc_value + 1, ticks_per_second)); |
+ EXPECT_EQ(expected_value, |
+ TimeTicks::FromQPCValue(qpc_value + 1)); |
+ expected_value = TimeTicks::FromInternalValue( |
+ QPCValueToMicrosecondsSafely(qpc_value, ticks_per_second)); |
+ EXPECT_EQ(expected_value, |
+ TimeTicks::FromQPCValue(qpc_value)); |
+ expected_value = TimeTicks::FromInternalValue( |
+ QPCValueToMicrosecondsSafely(qpc_value - 1, ticks_per_second)); |
+ EXPECT_EQ(expected_value, |
+ TimeTicks::FromQPCValue(qpc_value - 1)); |
+} |