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

Side by Side Diff: base/task_scheduler/scheduler_worker_pool_impl_unittest.cc

Issue 2480613002: Make SchedulerSingleThreadTaskRunner::RunsTasksOnCurrentThread sequence-affine. (Closed)
Patch Set: TaskSchedulerWorkerPoolImplSingleWorkerTest Created 4 years, 1 month 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
« no previous file with comments | « base/task_scheduler/scheduler_worker_pool_impl.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 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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 "base/task_scheduler/scheduler_worker_pool_impl.h" 5 #include "base/task_scheduler/scheduler_worker_pool_impl.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <memory> 9 #include <memory>
10 #include <unordered_set> 10 #include <unordered_set>
(...skipping 323 matching lines...) Expand 10 before | Expand all | Expand 10 after
334 334
335 // Expect the task to run after its delay expires, but not more than 250 ms 335 // Expect the task to run after its delay expires, but not more than 250 ms
336 // after that. 336 // after that.
337 const TimeDelta actual_delay = TimeTicks::Now() - start_time; 337 const TimeDelta actual_delay = TimeTicks::Now() - start_time;
338 EXPECT_GE(actual_delay, TestTimeouts::tiny_timeout()); 338 EXPECT_GE(actual_delay, TestTimeouts::tiny_timeout());
339 EXPECT_LT(actual_delay, 339 EXPECT_LT(actual_delay,
340 TimeDelta::FromMilliseconds(250) + TestTimeouts::tiny_timeout()); 340 TimeDelta::FromMilliseconds(250) + TestTimeouts::tiny_timeout());
341 } 341 }
342 342
343 // Verify that the RunsTasksOnCurrentThread() method of a SEQUENCED TaskRunner 343 // Verify that the RunsTasksOnCurrentThread() method of a SEQUENCED TaskRunner
344 // returns false when called from a task that isn't part of the sequence. 344 // returns false when called from a task that isn't part of the sequence. Note:
345 // Tests that use TestTaskFactory already verify that RunsTasksOnCurrentThread()
346 // returns true when appropriate so this method complements it to get full
347 // coverage of that method.
345 TEST_P(TaskSchedulerWorkerPoolImplTest, SequencedRunsTasksOnCurrentThread) { 348 TEST_P(TaskSchedulerWorkerPoolImplTest, SequencedRunsTasksOnCurrentThread) {
346 scoped_refptr<TaskRunner> task_runner( 349 scoped_refptr<TaskRunner> task_runner(
347 CreateTaskRunnerWithExecutionMode(worker_pool_.get(), GetParam())); 350 CreateTaskRunnerWithExecutionMode(worker_pool_.get(), GetParam()));
348 scoped_refptr<SequencedTaskRunner> sequenced_task_runner( 351 scoped_refptr<SequencedTaskRunner> sequenced_task_runner(
349 worker_pool_->CreateSequencedTaskRunnerWithTraits(TaskTraits())); 352 worker_pool_->CreateSequencedTaskRunnerWithTraits(TaskTraits()));
350 353
351 WaitableEvent task_ran(WaitableEvent::ResetPolicy::MANUAL, 354 WaitableEvent task_ran(WaitableEvent::ResetPolicy::MANUAL,
352 WaitableEvent::InitialState::NOT_SIGNALED); 355 WaitableEvent::InitialState::NOT_SIGNALED);
353 task_runner->PostTask( 356 task_runner->PostTask(
354 FROM_HERE, 357 FROM_HERE,
355 Bind( 358 Bind(
356 [](scoped_refptr<TaskRunner> sequenced_task_runner, 359 [](scoped_refptr<TaskRunner> sequenced_task_runner,
357 WaitableEvent* task_ran) { 360 WaitableEvent* task_ran) {
358 EXPECT_FALSE(sequenced_task_runner->RunsTasksOnCurrentThread()); 361 EXPECT_FALSE(sequenced_task_runner->RunsTasksOnCurrentThread());
359 // Tests that use TestTaskFactory already verify that
360 // RunsTasksOnCurrentThread() returns true when appropriate.
361 task_ran->Signal(); 362 task_ran->Signal();
362 }, 363 },
363 sequenced_task_runner, Unretained(&task_ran))); 364 sequenced_task_runner, Unretained(&task_ran)));
364 task_ran.Wait(); 365 task_ran.Wait();
365 } 366 }
366 367
367 INSTANTIATE_TEST_CASE_P(Parallel, 368 INSTANTIATE_TEST_CASE_P(Parallel,
368 TaskSchedulerWorkerPoolImplTest, 369 TaskSchedulerWorkerPoolImplTest,
369 ::testing::Values(test::ExecutionMode::PARALLEL)); 370 ::testing::Values(test::ExecutionMode::PARALLEL));
370 INSTANTIATE_TEST_CASE_P(Sequenced, 371 INSTANTIATE_TEST_CASE_P(Sequenced,
371 TaskSchedulerWorkerPoolImplTest, 372 TaskSchedulerWorkerPoolImplTest,
372 ::testing::Values(test::ExecutionMode::SEQUENCED)); 373 ::testing::Values(test::ExecutionMode::SEQUENCED));
373 INSTANTIATE_TEST_CASE_P( 374 INSTANTIATE_TEST_CASE_P(
374 SingleThreaded, 375 SingleThreaded,
375 TaskSchedulerWorkerPoolImplTest, 376 TaskSchedulerWorkerPoolImplTest,
376 ::testing::Values(test::ExecutionMode::SINGLE_THREADED)); 377 ::testing::Values(test::ExecutionMode::SINGLE_THREADED));
377 378
378 namespace { 379 namespace {
379 380
381 // Same as TaskSchedulerWorkerPoolImplTest but its SchedulerWorkerPoolImpl
382 // instance uses |max_threads == 1|.
383 class TaskSchedulerWorkerPoolImplSingleWorkerTest
384 : public TaskSchedulerWorkerPoolImplTest {
385 public:
386 TaskSchedulerWorkerPoolImplSingleWorkerTest() = default;
387
388 protected:
389 void SetUp() override {
390 InitializeWorkerPool(TimeDelta::Max(), 1);
391 }
392
393 private:
394 DISALLOW_COPY_AND_ASSIGN(TaskSchedulerWorkerPoolImplSingleWorkerTest);
395 };
396
397 } // namespace
398
399 // Verify that the RunsTasksOnCurrentThread() method of a
400 // SchedulerSingleThreadTaskRunner returns false when called from a task that
401 // isn't part of its sequence even though it's running on that
402 // SchedulerSingleThreadTaskRunner's assigned worker. Note: Tests that use
403 // TestTaskFactory already verify that RunsTasksOnCurrentThread() returns true
404 // when appropriate so this method complements it to get full coverage of that
405 // method.
406 TEST_P(TaskSchedulerWorkerPoolImplSingleWorkerTest,
407 SingleThreadRunsTasksOnCurrentThread) {
408 scoped_refptr<TaskRunner> task_runner(
409 CreateTaskRunnerWithExecutionMode(worker_pool_.get(), GetParam()));
410 scoped_refptr<SingleThreadTaskRunner> single_thread_task_runner(
411 worker_pool_->CreateSingleThreadTaskRunnerWithTraits(TaskTraits()));
412
413 WaitableEvent task_ran(WaitableEvent::ResetPolicy::MANUAL,
414 WaitableEvent::InitialState::NOT_SIGNALED);
415 task_runner->PostTask(
416 FROM_HERE,
417 Bind(
418 [](scoped_refptr<TaskRunner> single_thread_task_runner,
419 WaitableEvent* task_ran) {
420 EXPECT_FALSE(single_thread_task_runner->RunsTasksOnCurrentThread());
421 task_ran->Signal();
422 },
423 single_thread_task_runner, Unretained(&task_ran)));
424 task_ran.Wait();
425 }
426
427 INSTANTIATE_TEST_CASE_P(Parallel,
428 TaskSchedulerWorkerPoolImplSingleWorkerTest,
429 ::testing::Values(test::ExecutionMode::PARALLEL));
430 INSTANTIATE_TEST_CASE_P(Sequenced,
431 TaskSchedulerWorkerPoolImplSingleWorkerTest,
432 ::testing::Values(test::ExecutionMode::SEQUENCED));
433 INSTANTIATE_TEST_CASE_P(
434 SingleThreaded,
435 TaskSchedulerWorkerPoolImplSingleWorkerTest,
436 ::testing::Values(test::ExecutionMode::SINGLE_THREADED));
437
438 namespace {
439
380 void NotReachedReEnqueueSequenceCallback(scoped_refptr<Sequence> sequence) { 440 void NotReachedReEnqueueSequenceCallback(scoped_refptr<Sequence> sequence) {
381 ADD_FAILURE() 441 ADD_FAILURE()
382 << "Unexpected invocation of NotReachedReEnqueueSequenceCallback."; 442 << "Unexpected invocation of NotReachedReEnqueueSequenceCallback.";
383 } 443 }
384 444
385 // Verifies that the current thread allows I/O if |io_restriction| is ALLOWED 445 // Verifies that the current thread allows I/O if |io_restriction| is ALLOWED
386 // and disallows it otherwise. Signals |event| before returning. 446 // and disallows it otherwise. Signals |event| before returning.
387 void ExpectIORestriction(IORestriction io_restriction, WaitableEvent* event) { 447 void ExpectIORestriction(IORestriction io_restriction, WaitableEvent* event) {
388 DCHECK(event); 448 DCHECK(event);
389 449
(...skipping 370 matching lines...) Expand 10 before | Expand all | Expand 10 after
760 820
761 // Verify that counts were recorded to the histogram as expected. 821 // Verify that counts were recorded to the histogram as expected.
762 const auto* histogram = worker_pool_->num_tasks_before_detach_histogram(); 822 const auto* histogram = worker_pool_->num_tasks_before_detach_histogram();
763 EXPECT_EQ(0, histogram->SnapshotSamples()->GetCount(0)); 823 EXPECT_EQ(0, histogram->SnapshotSamples()->GetCount(0));
764 EXPECT_EQ(1, histogram->SnapshotSamples()->GetCount(3)); 824 EXPECT_EQ(1, histogram->SnapshotSamples()->GetCount(3));
765 EXPECT_EQ(0, histogram->SnapshotSamples()->GetCount(10)); 825 EXPECT_EQ(0, histogram->SnapshotSamples()->GetCount(10));
766 } 826 }
767 827
768 } // namespace internal 828 } // namespace internal
769 } // namespace base 829 } // namespace base
OLDNEW
« no previous file with comments | « base/task_scheduler/scheduler_worker_pool_impl.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698