summaryrefslogtreecommitdiffstats
path: root/base/time_win_unittest.cc
diff options
context:
space:
mode:
authormbelshe@chromium.org <mbelshe@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-09-23 15:54:48 +0000
committermbelshe@chromium.org <mbelshe@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-09-23 15:54:48 +0000
commit8af6f3346e40353c78ed6b787aa128f934432689 (patch)
tree54fdeca3410be1e8f8c6317ebdb1693843d40a27 /base/time_win_unittest.cc
parentef7511d1b5cfa9645970a16ff5636827121f15b8 (diff)
downloadchromium_src-8af6f3346e40353c78ed6b787aa128f934432689.zip
chromium_src-8af6f3346e40353c78ed6b787aa128f934432689.tar.gz
chromium_src-8af6f3346e40353c78ed6b787aa128f934432689.tar.bz2
The submillisecond test was broken in at least two ways. First, the
high resolution clock is intentionally disabled on some systems (old AMDs). If QueryPerformanceCounter doesn't work on this system, we shouldn't run the test. Second, however, if the time between two HighResNow() calls is *always* 0us, then this test would fail. Due to speedstep technology with intentionally underclocked QPC (at the windows level), this is quite possible. BUG=42850 TEST=TimeTicks.SubMillisecondTimers Review URL: http://codereview.chromium.org/3387011 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@60293 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/time_win_unittest.cc')
-rw-r--r--base/time_win_unittest.cc34
1 files changed, 18 insertions, 16 deletions
diff --git a/base/time_win_unittest.cc b/base/time_win_unittest.cc
index 26a9784..4389e7a 100644
--- a/base/time_win_unittest.cc
+++ b/base/time_win_unittest.cc
@@ -108,27 +108,29 @@ TEST(TimeTicks, WinRollover) {
}
}
-// Flaky, http://crbug.com/42850.
-TEST(TimeTicks, FLAKY_SubMillisecondTimers) {
- // Loop for a bit getting timers quickly. We want to
- // see at least one case where we get a new sample in
- // less than one millisecond.
+TEST(TimeTicks, SubMillisecondTimers) {
+ // HighResNow doesn't work on some systems. Since the product still works
+ // even if it doesn't work, it makes this entire test questionable.
+ if (!TimeTicks::IsHighResClockWorking())
+ return;
+
+ const int kRetries = 1000;
bool saw_submillisecond_timer = false;
- int64 min_timer = 1000;
- TimeTicks last_time = TimeTicks::HighResNow();
+
+ // Run kRetries attempts to see a sub-millisecond timer.
for (int index = 0; index < 1000; index++) {
- TimeTicks now = TimeTicks::HighResNow();
- TimeDelta delta = now - last_time;
- if (delta.InMicroseconds() > 0 &&
- delta.InMicroseconds() < 1000) {
- if (min_timer > delta.InMicroseconds())
- min_timer = delta.InMicroseconds();
+ TimeTicks last_time = TimeTicks::HighResNow();
+ TimeDelta delta;
+ // Spin until the clock has detected a change.
+ do {
+ delta = TimeTicks::HighResNow() - last_time;
+ } while (delta.InMicroseconds() == 0);
+ if (delta.InMicroseconds() < 1000) {
saw_submillisecond_timer = true;
+ break;
}
- last_time = now;
}
EXPECT_TRUE(saw_submillisecond_timer);
- printf("Min timer is: %ldus\n", static_cast<long>(min_timer));
}
TEST(TimeTicks, TimeGetTimeCaps) {
@@ -230,4 +232,4 @@ TEST(TimeTicks, Drift) {
printf("average time drift in microseconds: %lld\n",
total_drift / kIterations);
-} \ No newline at end of file
+}