OLD | NEW |
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/task_tracker.h" | 5 #include "base/task_scheduler/task_tracker.h" |
6 | 6 |
7 #include <stdint.h> | 7 #include <stdint.h> |
8 | 8 |
9 #include <memory> | 9 #include <memory> |
10 #include <utility> | 10 #include <utility> |
(...skipping 410 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
421 } | 421 } |
422 | 422 |
423 // Verify that BLOCK_SHUTDOWN and SKIP_ON_SHUTDOWN tasks can | 423 // Verify that BLOCK_SHUTDOWN and SKIP_ON_SHUTDOWN tasks can |
424 // AssertSingletonAllowed() but CONTINUE_ON_SHUTDOWN tasks can't. | 424 // AssertSingletonAllowed() but CONTINUE_ON_SHUTDOWN tasks can't. |
425 TEST_P(TaskSchedulerTaskTrackerTest, SingletonAllowed) { | 425 TEST_P(TaskSchedulerTaskTrackerTest, SingletonAllowed) { |
426 const bool can_use_singletons = | 426 const bool can_use_singletons = |
427 (GetParam() != TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN); | 427 (GetParam() != TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN); |
428 | 428 |
429 TaskTracker tracker; | 429 TaskTracker tracker; |
430 std::unique_ptr<Task> task( | 430 std::unique_ptr<Task> task( |
431 new Task(FROM_HERE, Bind(&ThreadRestrictions::AssertSingletonAllowed), | 431 new Task(FROM_HERE, BindOnce(&ThreadRestrictions::AssertSingletonAllowed), |
432 TaskTraits().WithShutdownBehavior(GetParam()), TimeDelta())); | 432 TaskTraits().WithShutdownBehavior(GetParam()), TimeDelta())); |
433 EXPECT_TRUE(tracker.WillPostTask(task.get())); | 433 EXPECT_TRUE(tracker.WillPostTask(task.get())); |
434 | 434 |
435 // Set the singleton allowed bit to the opposite of what it is expected to be | 435 // Set the singleton allowed bit to the opposite of what it is expected to be |
436 // when |tracker| runs |task| to verify that |tracker| actually sets the | 436 // when |tracker| runs |task| to verify that |tracker| actually sets the |
437 // correct value. | 437 // correct value. |
438 ScopedSetSingletonAllowed scoped_singleton_allowed(!can_use_singletons); | 438 ScopedSetSingletonAllowed scoped_singleton_allowed(!can_use_singletons); |
439 | 439 |
440 // Running the task should fail iff the task isn't allowed to use singletons. | 440 // Running the task should fail iff the task isn't allowed to use singletons. |
441 if (can_use_singletons) { | 441 if (can_use_singletons) { |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
495 | 495 |
496 static void VerifyNoTaskRunnerHandle() { | 496 static void VerifyNoTaskRunnerHandle() { |
497 EXPECT_FALSE(ThreadTaskRunnerHandle::IsSet()); | 497 EXPECT_FALSE(ThreadTaskRunnerHandle::IsSet()); |
498 EXPECT_FALSE(SequencedTaskRunnerHandle::IsSet()); | 498 EXPECT_FALSE(SequencedTaskRunnerHandle::IsSet()); |
499 } | 499 } |
500 | 500 |
501 TEST_P(TaskSchedulerTaskTrackerTest, TaskRunnerHandleIsNotSetOnParallel) { | 501 TEST_P(TaskSchedulerTaskTrackerTest, TaskRunnerHandleIsNotSetOnParallel) { |
502 // Create a task that will verify that TaskRunnerHandles are not set in its | 502 // Create a task that will verify that TaskRunnerHandles are not set in its |
503 // scope per no TaskRunner ref being set to it. | 503 // scope per no TaskRunner ref being set to it. |
504 std::unique_ptr<Task> verify_task( | 504 std::unique_ptr<Task> verify_task( |
505 new Task(FROM_HERE, Bind(&VerifyNoTaskRunnerHandle), | 505 new Task(FROM_HERE, BindOnce(&VerifyNoTaskRunnerHandle), |
506 TaskTraits().WithShutdownBehavior(GetParam()), TimeDelta())); | 506 TaskTraits().WithShutdownBehavior(GetParam()), TimeDelta())); |
507 | 507 |
508 RunTaskRunnerHandleVerificationTask(&tracker_, std::move(verify_task)); | 508 RunTaskRunnerHandleVerificationTask(&tracker_, std::move(verify_task)); |
509 } | 509 } |
510 | 510 |
511 static void VerifySequencedTaskRunnerHandle( | 511 static void VerifySequencedTaskRunnerHandle( |
512 const SequencedTaskRunner* expected_task_runner) { | 512 const SequencedTaskRunner* expected_task_runner) { |
513 EXPECT_FALSE(ThreadTaskRunnerHandle::IsSet()); | 513 EXPECT_FALSE(ThreadTaskRunnerHandle::IsSet()); |
514 EXPECT_TRUE(SequencedTaskRunnerHandle::IsSet()); | 514 EXPECT_TRUE(SequencedTaskRunnerHandle::IsSet()); |
515 EXPECT_EQ(expected_task_runner, SequencedTaskRunnerHandle::Get()); | 515 EXPECT_EQ(expected_task_runner, SequencedTaskRunnerHandle::Get()); |
516 } | 516 } |
517 | 517 |
518 TEST_P(TaskSchedulerTaskTrackerTest, | 518 TEST_P(TaskSchedulerTaskTrackerTest, |
519 SequencedTaskRunnerHandleIsSetOnSequenced) { | 519 SequencedTaskRunnerHandleIsSetOnSequenced) { |
520 scoped_refptr<SequencedTaskRunner> test_task_runner(new TestSimpleTaskRunner); | 520 scoped_refptr<SequencedTaskRunner> test_task_runner(new TestSimpleTaskRunner); |
521 | 521 |
522 // Create a task that will verify that SequencedTaskRunnerHandle is properly | 522 // Create a task that will verify that SequencedTaskRunnerHandle is properly |
523 // set to |test_task_runner| in its scope per |sequenced_task_runner_ref| | 523 // set to |test_task_runner| in its scope per |sequenced_task_runner_ref| |
524 // being set to it. | 524 // being set to it. |
525 std::unique_ptr<Task> verify_task( | 525 std::unique_ptr<Task> verify_task( |
526 new Task(FROM_HERE, Bind(&VerifySequencedTaskRunnerHandle, | 526 new Task(FROM_HERE, |
527 base::Unretained(test_task_runner.get())), | 527 BindOnce(&VerifySequencedTaskRunnerHandle, |
| 528 base::Unretained(test_task_runner.get())), |
528 TaskTraits().WithShutdownBehavior(GetParam()), TimeDelta())); | 529 TaskTraits().WithShutdownBehavior(GetParam()), TimeDelta())); |
529 verify_task->sequenced_task_runner_ref = test_task_runner; | 530 verify_task->sequenced_task_runner_ref = test_task_runner; |
530 | 531 |
531 RunTaskRunnerHandleVerificationTask(&tracker_, std::move(verify_task)); | 532 RunTaskRunnerHandleVerificationTask(&tracker_, std::move(verify_task)); |
532 } | 533 } |
533 | 534 |
534 static void VerifyThreadTaskRunnerHandle( | 535 static void VerifyThreadTaskRunnerHandle( |
535 const SingleThreadTaskRunner* expected_task_runner) { | 536 const SingleThreadTaskRunner* expected_task_runner) { |
536 EXPECT_TRUE(ThreadTaskRunnerHandle::IsSet()); | 537 EXPECT_TRUE(ThreadTaskRunnerHandle::IsSet()); |
537 // SequencedTaskRunnerHandle inherits ThreadTaskRunnerHandle for thread. | 538 // SequencedTaskRunnerHandle inherits ThreadTaskRunnerHandle for thread. |
538 EXPECT_TRUE(SequencedTaskRunnerHandle::IsSet()); | 539 EXPECT_TRUE(SequencedTaskRunnerHandle::IsSet()); |
539 EXPECT_EQ(expected_task_runner, ThreadTaskRunnerHandle::Get()); | 540 EXPECT_EQ(expected_task_runner, ThreadTaskRunnerHandle::Get()); |
540 } | 541 } |
541 | 542 |
542 TEST_P(TaskSchedulerTaskTrackerTest, | 543 TEST_P(TaskSchedulerTaskTrackerTest, |
543 ThreadTaskRunnerHandleIsSetOnSingleThreaded) { | 544 ThreadTaskRunnerHandleIsSetOnSingleThreaded) { |
544 scoped_refptr<SingleThreadTaskRunner> test_task_runner( | 545 scoped_refptr<SingleThreadTaskRunner> test_task_runner( |
545 new TestSimpleTaskRunner); | 546 new TestSimpleTaskRunner); |
546 | 547 |
547 // Create a task that will verify that ThreadTaskRunnerHandle is properly set | 548 // Create a task that will verify that ThreadTaskRunnerHandle is properly set |
548 // to |test_task_runner| in its scope per |single_thread_task_runner_ref| | 549 // to |test_task_runner| in its scope per |single_thread_task_runner_ref| |
549 // being set on it. | 550 // being set on it. |
550 std::unique_ptr<Task> verify_task( | 551 std::unique_ptr<Task> verify_task( |
551 new Task(FROM_HERE, Bind(&VerifyThreadTaskRunnerHandle, | 552 new Task(FROM_HERE, |
552 base::Unretained(test_task_runner.get())), | 553 BindOnce(&VerifyThreadTaskRunnerHandle, |
| 554 base::Unretained(test_task_runner.get())), |
553 TaskTraits().WithShutdownBehavior(GetParam()), TimeDelta())); | 555 TaskTraits().WithShutdownBehavior(GetParam()), TimeDelta())); |
554 verify_task->single_thread_task_runner_ref = test_task_runner; | 556 verify_task->single_thread_task_runner_ref = test_task_runner; |
555 | 557 |
556 RunTaskRunnerHandleVerificationTask(&tracker_, std::move(verify_task)); | 558 RunTaskRunnerHandleVerificationTask(&tracker_, std::move(verify_task)); |
557 } | 559 } |
558 | 560 |
559 TEST_P(TaskSchedulerTaskTrackerTest, FlushPendingDelayedTask) { | 561 TEST_P(TaskSchedulerTaskTrackerTest, FlushPendingDelayedTask) { |
560 const Task delayed_task(FROM_HERE, Bind(&DoNothing), | 562 const Task delayed_task(FROM_HERE, BindOnce(&DoNothing), |
561 TaskTraits().WithShutdownBehavior(GetParam()), | 563 TaskTraits().WithShutdownBehavior(GetParam()), |
562 TimeDelta::FromDays(1)); | 564 TimeDelta::FromDays(1)); |
563 tracker_.WillPostTask(&delayed_task); | 565 tracker_.WillPostTask(&delayed_task); |
564 // Flush() should return even if the delayed task didn't run. | 566 // Flush() should return even if the delayed task didn't run. |
565 tracker_.Flush(); | 567 tracker_.Flush(); |
566 } | 568 } |
567 | 569 |
568 TEST_P(TaskSchedulerTaskTrackerTest, FlushPendingUndelayedTask) { | 570 TEST_P(TaskSchedulerTaskTrackerTest, FlushPendingUndelayedTask) { |
569 auto undelayed_task = base::MakeUnique<Task>( | 571 auto undelayed_task = base::MakeUnique<Task>( |
570 FROM_HERE, Bind(&DoNothing), | 572 FROM_HERE, Bind(&DoNothing), |
(...skipping 370 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
941 ASSERT_TRUE(tracker.WillPostTask(task.get())); | 943 ASSERT_TRUE(tracker.WillPostTask(task.get())); |
942 | 944 |
943 HistogramTester tester; | 945 HistogramTester tester; |
944 EXPECT_TRUE(tracker.RunTask(std::move(task), SequenceToken::Create())); | 946 EXPECT_TRUE(tracker.RunTask(std::move(task), SequenceToken::Create())); |
945 tester.ExpectTotalCount(test.expected_histogram, 1); | 947 tester.ExpectTotalCount(test.expected_histogram, 1); |
946 } | 948 } |
947 } | 949 } |
948 | 950 |
949 } // namespace internal | 951 } // namespace internal |
950 } // namespace base | 952 } // namespace base |
OLD | NEW |