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

Side by Side Diff: base/test/sequenced_task_runner_test_template.h

Issue 146833008: Threading: Remove TaskRunnerHandlesNonZeroDelays from TaskRunnerTestDelegate (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 10 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 | « no previous file | base/test/task_runner_test_template.h » ('j') | 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) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 // This class defines tests that implementations of SequencedTaskRunner should 5 // This class defines tests that implementations of SequencedTaskRunner should
6 // pass in order to be conformant. See task_runner_test_template.h for a 6 // pass in order to be conformant. See task_runner_test_template.h for a
7 // description of how to use the constructs in this file; these work the same. 7 // description of how to use the constructs in this file; these work the same.
8 8
9 #ifndef BASE_SEQUENCED_TASK_RUNNER_TEST_TEMPLATE_H_ 9 #ifndef BASE_SEQUENCED_TASK_RUNNER_TEST_TEMPLATE_H_
10 #define BASE_SEQUENCED_TASK_RUNNER_TEST_TEMPLATE_H_ 10 #define BASE_SEQUENCED_TASK_RUNNER_TEST_TEMPLATE_H_
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
171 this->delegate_.StopTaskRunner(); 171 this->delegate_.StopTaskRunner();
172 172
173 EXPECT_TRUE(CheckNonNestableInvariants(this->task_tracker_->GetTaskEvents(), 173 EXPECT_TRUE(CheckNonNestableInvariants(this->task_tracker_->GetTaskEvents(),
174 kTaskCount)); 174 kTaskCount));
175 } 175 }
176 176
177 // This test posts non-nestable tasks in order of increasing delay, and checks 177 // This test posts non-nestable tasks in order of increasing delay, and checks
178 // that that the tasks are run in FIFO order and that there is no execution 178 // that that the tasks are run in FIFO order and that there is no execution
179 // overlap whatsoever between any two tasks. 179 // overlap whatsoever between any two tasks.
180 TYPED_TEST_P(SequencedTaskRunnerTest, SequentialDelayedNonNestable) { 180 TYPED_TEST_P(SequencedTaskRunnerTest, SequentialDelayedNonNestable) {
181 // TODO(akalin): Remove this check (http://crbug.com/149144).
182 if (!this->delegate_.TaskRunnerHandlesNonZeroDelays()) {
183 DLOG(INFO) << "This SequencedTaskRunner doesn't handle "
184 "non-zero delays; skipping";
185 return;
186 }
187
188 const int kTaskCount = 20; 181 const int kTaskCount = 20;
189 const int kDelayIncrementMs = 50; 182 const int kDelayIncrementMs = 50;
190 183
191 this->delegate_.StartTaskRunner(); 184 this->delegate_.StartTaskRunner();
192 const scoped_refptr<SequencedTaskRunner> task_runner = 185 const scoped_refptr<SequencedTaskRunner> task_runner =
193 this->delegate_.GetTaskRunner(); 186 this->delegate_.GetTaskRunner();
194 187
195 for (int i = 0; i < kTaskCount; ++i) { 188 for (int i = 0; i < kTaskCount; ++i) {
196 this->task_tracker_->PostWrappedDelayedNonNestableTask( 189 this->task_tracker_->PostWrappedDelayedNonNestableTask(
197 task_runner, 190 task_runner,
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
229 this->delegate_.StopTaskRunner(); 222 this->delegate_.StopTaskRunner();
230 223
231 EXPECT_TRUE(CheckNonNestableInvariants( 224 EXPECT_TRUE(CheckNonNestableInvariants(
232 this->task_tracker_->GetTaskEvents(), 225 this->task_tracker_->GetTaskEvents(),
233 kParentCount * (kChildrenPerParent + 1))); 226 kParentCount * (kChildrenPerParent + 1)));
234 } 227 }
235 228
236 // This test posts a delayed task, and checks that the task is run later than 229 // This test posts a delayed task, and checks that the task is run later than
237 // the specified time. 230 // the specified time.
238 TYPED_TEST_P(SequencedTaskRunnerTest, DelayedTaskBasic) { 231 TYPED_TEST_P(SequencedTaskRunnerTest, DelayedTaskBasic) {
239 // TODO(akalin): Remove this check (http://crbug.com/149144).
240 if (!this->delegate_.TaskRunnerHandlesNonZeroDelays()) {
241 DLOG(INFO) << "This SequencedTaskRunner doesn't handle "
242 "non-zero delays; skipping";
243 return;
244 }
245
246 const int kTaskCount = 1; 232 const int kTaskCount = 1;
247 const TimeDelta kDelay = TimeDelta::FromMilliseconds(100); 233 const TimeDelta kDelay = TimeDelta::FromMilliseconds(100);
248 234
249 this->delegate_.StartTaskRunner(); 235 this->delegate_.StartTaskRunner();
250 const scoped_refptr<SequencedTaskRunner> task_runner = 236 const scoped_refptr<SequencedTaskRunner> task_runner =
251 this->delegate_.GetTaskRunner(); 237 this->delegate_.GetTaskRunner();
252 238
253 Time time_before_run = Time::Now(); 239 Time time_before_run = Time::Now();
254 this->task_tracker_->PostWrappedDelayedNonNestableTask( 240 this->task_tracker_->PostWrappedDelayedNonNestableTask(
255 task_runner, Closure(), kDelay); 241 task_runner, Closure(), kDelay);
256 this->task_tracker_->WaitForCompletedTasks(kTaskCount); 242 this->task_tracker_->WaitForCompletedTasks(kTaskCount);
257 this->delegate_.StopTaskRunner(); 243 this->delegate_.StopTaskRunner();
258 Time time_after_run = Time::Now(); 244 Time time_after_run = Time::Now();
259 245
260 EXPECT_TRUE(CheckNonNestableInvariants(this->task_tracker_->GetTaskEvents(), 246 EXPECT_TRUE(CheckNonNestableInvariants(this->task_tracker_->GetTaskEvents(),
261 kTaskCount)); 247 kTaskCount));
262 EXPECT_LE(kDelay, time_after_run - time_before_run); 248 EXPECT_LE(kDelay, time_after_run - time_before_run);
263 } 249 }
264 250
265 // This test posts two tasks with the same delay, and checks that the tasks are 251 // This test posts two tasks with the same delay, and checks that the tasks are
266 // run in the order in which they were posted. 252 // run in the order in which they were posted.
267 // 253 //
268 // NOTE: This is actually an approximate test since the API only takes a 254 // NOTE: This is actually an approximate test since the API only takes a
269 // "delay" parameter, so we are not exactly simulating two tasks that get 255 // "delay" parameter, so we are not exactly simulating two tasks that get
270 // posted at the exact same time. It would be nice if the API allowed us to 256 // posted at the exact same time. It would be nice if the API allowed us to
271 // specify the desired run time. 257 // specify the desired run time.
272 TYPED_TEST_P(SequencedTaskRunnerTest, DelayedTasksSameDelay) { 258 TYPED_TEST_P(SequencedTaskRunnerTest, DelayedTasksSameDelay) {
273 // TODO(akalin): Remove this check (http://crbug.com/149144).
274 if (!this->delegate_.TaskRunnerHandlesNonZeroDelays()) {
275 DLOG(INFO) << "This SequencedTaskRunner doesn't handle "
276 "non-zero delays; skipping";
277 return;
278 }
279
280 const int kTaskCount = 2; 259 const int kTaskCount = 2;
281 const TimeDelta kDelay = TimeDelta::FromMilliseconds(100); 260 const TimeDelta kDelay = TimeDelta::FromMilliseconds(100);
282 261
283 this->delegate_.StartTaskRunner(); 262 this->delegate_.StartTaskRunner();
284 const scoped_refptr<SequencedTaskRunner> task_runner = 263 const scoped_refptr<SequencedTaskRunner> task_runner =
285 this->delegate_.GetTaskRunner(); 264 this->delegate_.GetTaskRunner();
286 265
287 this->task_tracker_->PostWrappedDelayedNonNestableTask( 266 this->task_tracker_->PostWrappedDelayedNonNestableTask(
288 task_runner, Closure(), kDelay); 267 task_runner, Closure(), kDelay);
289 this->task_tracker_->PostWrappedDelayedNonNestableTask( 268 this->task_tracker_->PostWrappedDelayedNonNestableTask(
290 task_runner, Closure(), kDelay); 269 task_runner, Closure(), kDelay);
291 this->task_tracker_->WaitForCompletedTasks(kTaskCount); 270 this->task_tracker_->WaitForCompletedTasks(kTaskCount);
292 this->delegate_.StopTaskRunner(); 271 this->delegate_.StopTaskRunner();
293 272
294 EXPECT_TRUE(CheckNonNestableInvariants(this->task_tracker_->GetTaskEvents(), 273 EXPECT_TRUE(CheckNonNestableInvariants(this->task_tracker_->GetTaskEvents(),
295 kTaskCount)); 274 kTaskCount));
296 } 275 }
297 276
298 // This test posts a normal task and a delayed task, and checks that the 277 // This test posts a normal task and a delayed task, and checks that the
299 // delayed task runs after the normal task even if the normal task takes 278 // delayed task runs after the normal task even if the normal task takes
300 // a long time to run. 279 // a long time to run.
301 TYPED_TEST_P(SequencedTaskRunnerTest, DelayedTaskAfterLongTask) { 280 TYPED_TEST_P(SequencedTaskRunnerTest, DelayedTaskAfterLongTask) {
302 // TODO(akalin): Remove this check (http://crbug.com/149144).
303 if (!this->delegate_.TaskRunnerHandlesNonZeroDelays()) {
304 DLOG(INFO) << "This SequencedTaskRunner doesn't handle "
305 "non-zero delays; skipping";
306 return;
307 }
308
309 const int kTaskCount = 2; 281 const int kTaskCount = 2;
310 282
311 this->delegate_.StartTaskRunner(); 283 this->delegate_.StartTaskRunner();
312 const scoped_refptr<SequencedTaskRunner> task_runner = 284 const scoped_refptr<SequencedTaskRunner> task_runner =
313 this->delegate_.GetTaskRunner(); 285 this->delegate_.GetTaskRunner();
314 286
315 this->task_tracker_->PostWrappedNonNestableTask( 287 this->task_tracker_->PostWrappedNonNestableTask(
316 task_runner, base::Bind(&PlatformThread::Sleep, 288 task_runner, base::Bind(&PlatformThread::Sleep,
317 TimeDelta::FromMilliseconds(50))); 289 TimeDelta::FromMilliseconds(50)));
318 this->task_tracker_->PostWrappedDelayedNonNestableTask( 290 this->task_tracker_->PostWrappedDelayedNonNestableTask(
319 task_runner, Closure(), TimeDelta::FromMilliseconds(10)); 291 task_runner, Closure(), TimeDelta::FromMilliseconds(10));
320 this->task_tracker_->WaitForCompletedTasks(kTaskCount); 292 this->task_tracker_->WaitForCompletedTasks(kTaskCount);
321 this->delegate_.StopTaskRunner(); 293 this->delegate_.StopTaskRunner();
322 294
323 EXPECT_TRUE(CheckNonNestableInvariants(this->task_tracker_->GetTaskEvents(), 295 EXPECT_TRUE(CheckNonNestableInvariants(this->task_tracker_->GetTaskEvents(),
324 kTaskCount)); 296 kTaskCount));
325 } 297 }
326 298
327 // Test that a pile of normal tasks and a delayed task run in the 299 // Test that a pile of normal tasks and a delayed task run in the
328 // time-to-run order. 300 // time-to-run order.
329 TYPED_TEST_P(SequencedTaskRunnerTest, DelayedTaskAfterManyLongTasks) { 301 TYPED_TEST_P(SequencedTaskRunnerTest, DelayedTaskAfterManyLongTasks) {
330 // TODO(akalin): Remove this check (http://crbug.com/149144).
331 if (!this->delegate_.TaskRunnerHandlesNonZeroDelays()) {
332 DLOG(INFO) << "This SequencedTaskRunner doesn't handle "
333 "non-zero delays; skipping";
334 return;
335 }
336
337 const int kTaskCount = 11; 302 const int kTaskCount = 11;
338 303
339 this->delegate_.StartTaskRunner(); 304 this->delegate_.StartTaskRunner();
340 const scoped_refptr<SequencedTaskRunner> task_runner = 305 const scoped_refptr<SequencedTaskRunner> task_runner =
341 this->delegate_.GetTaskRunner(); 306 this->delegate_.GetTaskRunner();
342 307
343 for (int i = 0; i < kTaskCount - 1; i++) { 308 for (int i = 0; i < kTaskCount - 1; i++) {
344 this->task_tracker_->PostWrappedNonNestableTask( 309 this->task_tracker_->PostWrappedNonNestableTask(
345 task_runner, base::Bind(&PlatformThread::Sleep, 310 task_runner, base::Bind(&PlatformThread::Sleep,
346 TimeDelta::FromMilliseconds(50))); 311 TimeDelta::FromMilliseconds(50)));
(...skipping 20 matching lines...) Expand all
367 SequentialDelayedNonNestable, 332 SequentialDelayedNonNestable,
368 NonNestablePostFromNonNestableTask, 333 NonNestablePostFromNonNestableTask,
369 DelayedTaskBasic, 334 DelayedTaskBasic,
370 DelayedTasksSameDelay, 335 DelayedTasksSameDelay,
371 DelayedTaskAfterLongTask, 336 DelayedTaskAfterLongTask,
372 DelayedTaskAfterManyLongTasks); 337 DelayedTaskAfterManyLongTasks);
373 338
374 } // namespace base 339 } // namespace base
375 340
376 #endif // BASE_TASK_RUNNER_TEST_TEMPLATE_H_ 341 #endif // BASE_TASK_RUNNER_TEST_TEMPLATE_H_
OLDNEW
« no previous file with comments | « no previous file | base/test/task_runner_test_template.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698