summaryrefslogtreecommitdiffstats
path: root/base/time/time_win_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'base/time/time_win_unittest.cc')
-rw-r--r--base/time/time_win_unittest.cc31
1 files changed, 31 insertions, 0 deletions
diff --git a/base/time/time_win_unittest.cc b/base/time/time_win_unittest.cc
index 46e256e..c6bb66c 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));
+} \ No newline at end of file