diff options
Diffstat (limited to 'base/time/time_win_unittest.cc')
-rw-r--r-- | base/time/time_win_unittest.cc | 31 |
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 |