Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1777)

Side by Side Diff: base/time_win_unittest.cc

Issue 3387011: The submillisecond test was broken in at least two ways. First, the... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 10 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « base/time_win.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <windows.h> 5 #include <windows.h>
6 #include <mmsystem.h> 6 #include <mmsystem.h>
7 #include <process.h> 7 #include <process.h>
8 8
9 #include "base/platform_thread.h" 9 #include "base/platform_thread.h"
10 #include "base/time.h" 10 #include "base/time.h"
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
101 EXPECT_EQ(rv, WAIT_OBJECT_0); 101 EXPECT_EQ(rv, WAIT_OBJECT_0);
102 } 102 }
103 103
104 CloseHandle(g_rollover_test_start); 104 CloseHandle(g_rollover_test_start);
105 105
106 // Teardown 106 // Teardown
107 MockTimeTicks::UninstallTicker(); 107 MockTimeTicks::UninstallTicker();
108 } 108 }
109 } 109 }
110 110
111 // Flaky, http://crbug.com/42850. 111 TEST(TimeTicks, SubMillisecondTimers) {
112 TEST(TimeTicks, FLAKY_SubMillisecondTimers) { 112 // HighResNow doesn't work on some systems. Since the product still works
113 // Loop for a bit getting timers quickly. We want to 113 // even if it doesn't work, it makes this entire test questionable.
114 // see at least one case where we get a new sample in 114 if (!TimeTicks::IsHighResClockWorking())
115 // less than one millisecond. 115 return;
116
117 const int kRetries = 1000;
116 bool saw_submillisecond_timer = false; 118 bool saw_submillisecond_timer = false;
117 int64 min_timer = 1000; 119
118 TimeTicks last_time = TimeTicks::HighResNow(); 120 // Run kRetries attempts to see a sub-millisecond timer.
Paweł Hajdan Jr. 2010/09/22 09:35:32 This test has still potential for flakiness. What
Mike Belshe 2010/09/22 21:58:48 Unfortunately, I don't think it helps. In this ca
119 for (int index = 0; index < 1000; index++) { 121 for (int index = 0; index < 1000; index++) {
120 TimeTicks now = TimeTicks::HighResNow(); 122 TimeTicks last_time = TimeTicks::HighResNow();
121 TimeDelta delta = now - last_time; 123 TimeDelta delta;
122 if (delta.InMicroseconds() > 0 && 124 // Spin until the clock changes a little
Paweł Hajdan Jr. 2010/09/22 09:35:32 nit: Dot at the end, and explain why.
Mike Belshe 2010/09/22 21:58:48 Done.
123 delta.InMicroseconds() < 1000) { 125 do {
124 if (min_timer > delta.InMicroseconds()) 126 delta = TimeTicks::HighResNow() - last_time;
125 min_timer = delta.InMicroseconds(); 127 } while (delta.InMicroseconds() == 0);
128 if (delta.InMicroseconds() < 1000) {
126 saw_submillisecond_timer = true; 129 saw_submillisecond_timer = true;
130 break;
127 } 131 }
128 last_time = now;
129 } 132 }
130 EXPECT_TRUE(saw_submillisecond_timer); 133 EXPECT_TRUE(saw_submillisecond_timer);
131 printf("Min timer is: %ldus\n", static_cast<long>(min_timer));
132 } 134 }
133 135
134 TEST(TimeTicks, TimeGetTimeCaps) { 136 TEST(TimeTicks, TimeGetTimeCaps) {
135 // Test some basic assumptions that we expect about how timeGetDevCaps works. 137 // Test some basic assumptions that we expect about how timeGetDevCaps works.
136 138
137 TIMECAPS caps; 139 TIMECAPS caps;
138 MMRESULT status = timeGetDevCaps(&caps, sizeof(caps)); 140 MMRESULT status = timeGetDevCaps(&caps, sizeof(caps));
139 EXPECT_EQ(TIMERR_NOERROR, status); 141 EXPECT_EQ(TIMERR_NOERROR, status);
140 if (status != TIMERR_NOERROR) { 142 if (status != TIMERR_NOERROR) {
141 printf("Could not get timeGetDevCaps\n"); 143 printf("Could not get timeGetDevCaps\n");
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
223 total_drift += drift_microseconds; 225 total_drift += drift_microseconds;
224 } 226 }
225 227
226 // Sanity check. We expect some time drift to occur, especially across 228 // Sanity check. We expect some time drift to occur, especially across
227 // the number of iterations we do. However, if the QPC is disabled, this 229 // the number of iterations we do. However, if the QPC is disabled, this
228 // is not measuring anything (drift is zero in that case). 230 // is not measuring anything (drift is zero in that case).
229 EXPECT_LT(0, total_drift); 231 EXPECT_LT(0, total_drift);
230 232
231 printf("average time drift in microseconds: %lld\n", 233 printf("average time drift in microseconds: %lld\n",
232 total_drift / kIterations); 234 total_drift / kIterations);
233 } 235 }
OLDNEW
« no previous file with comments | « base/time_win.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698