| 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 |