| Index: base/task_scheduler/task_tracker_unittest.cc
|
| diff --git a/base/task_scheduler/task_tracker_unittest.cc b/base/task_scheduler/task_tracker_unittest.cc
|
| index e1596f7b51fdb3d5df92f687c14656b5dbd398ff..4d3d94f4313f60233d505eb5535515697c221ce5 100644
|
| --- a/base/task_scheduler/task_tracker_unittest.cc
|
| +++ b/base/task_scheduler/task_tracker_unittest.cc
|
| @@ -27,6 +27,7 @@
|
| #include "base/task_scheduler/scheduler_lock.h"
|
| #include "base/task_scheduler/task.h"
|
| #include "base/task_scheduler/task_traits.h"
|
| +#include "base/task_scheduler/test_utils.h"
|
| #include "base/test/gtest_util.h"
|
| #include "base/test/histogram_tester.h"
|
| #include "base/test/test_simple_task_runner.h"
|
| @@ -149,7 +150,8 @@ class TaskSchedulerTaskTrackerTest
|
| return MakeUnique<Task>(
|
| FROM_HERE,
|
| Bind(&TaskSchedulerTaskTrackerTest::RunTaskCallback, Unretained(this)),
|
| - TaskTraits().WithShutdownBehavior(shutdown_behavior), TimeDelta());
|
| + test::CreateTaskTraits().WithShutdownBehavior(shutdown_behavior),
|
| + TimeDelta());
|
| }
|
|
|
| // Calls tracker_->Shutdown() on a new thread. When this returns, Shutdown()
|
| @@ -277,7 +279,8 @@ TEST_P(TaskSchedulerTaskTrackerTest, WillPostAndRunLongTaskBeforeShutdown) {
|
| task_barrier->Wait();
|
| },
|
| Unretained(&task_running), base::Unretained(&task_barrier)),
|
| - TaskTraits().WithBaseSyncPrimitives().WithShutdownBehavior(GetParam()),
|
| + test::CreateTaskTraits().WithBaseSyncPrimitives().WithShutdownBehavior(
|
| + GetParam()),
|
| TimeDelta());
|
|
|
| // Inform |task_tracker_| that |blocked_task| will be posted.
|
| @@ -427,9 +430,9 @@ TEST_P(TaskSchedulerTaskTrackerTest, SingletonAllowed) {
|
| (GetParam() != TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN);
|
|
|
| TaskTracker tracker;
|
| - std::unique_ptr<Task> task(
|
| - new Task(FROM_HERE, BindOnce(&ThreadRestrictions::AssertSingletonAllowed),
|
| - TaskTraits().WithShutdownBehavior(GetParam()), TimeDelta()));
|
| + std::unique_ptr<Task> task(new Task(
|
| + FROM_HERE, BindOnce(&ThreadRestrictions::AssertSingletonAllowed),
|
| + test::CreateTaskTraits().WithShutdownBehavior(GetParam()), TimeDelta()));
|
| EXPECT_TRUE(tracker.WillPostTask(task.get()));
|
|
|
| // Set the singleton allowed bit to the opposite of what it is expected to be
|
| @@ -458,7 +461,8 @@ TEST_P(TaskSchedulerTaskTrackerTest, IOAllowed) {
|
| // Shouldn't fail.
|
| ThreadRestrictions::AssertIOAllowed();
|
| }),
|
| - TaskTraits().MayBlock().WithShutdownBehavior(GetParam()), TimeDelta());
|
| + test::CreateTaskTraits().MayBlock().WithShutdownBehavior(GetParam()),
|
| + TimeDelta());
|
| EXPECT_TRUE(tracker.WillPostTask(task_with_may_block.get()));
|
| tracker.RunTask(std::move(task_with_may_block), SequenceToken::Create());
|
|
|
| @@ -469,7 +473,7 @@ TEST_P(TaskSchedulerTaskTrackerTest, IOAllowed) {
|
| FROM_HERE, Bind([]() {
|
| EXPECT_DCHECK_DEATH({ ThreadRestrictions::AssertIOAllowed(); });
|
| }),
|
| - TaskTraits().WithShutdownBehavior(GetParam()), TimeDelta());
|
| + test::CreateTaskTraits().WithShutdownBehavior(GetParam()), TimeDelta());
|
| EXPECT_TRUE(tracker.WillPostTask(task_without_may_block.get()));
|
| tracker.RunTask(std::move(task_without_may_block), SequenceToken::Create());
|
| }
|
| @@ -501,9 +505,9 @@ static void VerifyNoTaskRunnerHandle() {
|
| TEST_P(TaskSchedulerTaskTrackerTest, TaskRunnerHandleIsNotSetOnParallel) {
|
| // Create a task that will verify that TaskRunnerHandles are not set in its
|
| // scope per no TaskRunner ref being set to it.
|
| - std::unique_ptr<Task> verify_task(
|
| - new Task(FROM_HERE, BindOnce(&VerifyNoTaskRunnerHandle),
|
| - TaskTraits().WithShutdownBehavior(GetParam()), TimeDelta()));
|
| + std::unique_ptr<Task> verify_task(new Task(
|
| + FROM_HERE, BindOnce(&VerifyNoTaskRunnerHandle),
|
| + test::CreateTaskTraits().WithShutdownBehavior(GetParam()), TimeDelta()));
|
|
|
| RunTaskRunnerHandleVerificationTask(&tracker_, std::move(verify_task));
|
| }
|
| @@ -522,11 +526,11 @@ TEST_P(TaskSchedulerTaskTrackerTest,
|
| // Create a task that will verify that SequencedTaskRunnerHandle is properly
|
| // set to |test_task_runner| in its scope per |sequenced_task_runner_ref|
|
| // being set to it.
|
| - std::unique_ptr<Task> verify_task(
|
| - new Task(FROM_HERE,
|
| - BindOnce(&VerifySequencedTaskRunnerHandle,
|
| - base::Unretained(test_task_runner.get())),
|
| - TaskTraits().WithShutdownBehavior(GetParam()), TimeDelta()));
|
| + std::unique_ptr<Task> verify_task(new Task(
|
| + FROM_HERE,
|
| + BindOnce(&VerifySequencedTaskRunnerHandle,
|
| + base::Unretained(test_task_runner.get())),
|
| + test::CreateTaskTraits().WithShutdownBehavior(GetParam()), TimeDelta()));
|
| verify_task->sequenced_task_runner_ref = test_task_runner;
|
|
|
| RunTaskRunnerHandleVerificationTask(&tracker_, std::move(verify_task));
|
| @@ -548,20 +552,20 @@ TEST_P(TaskSchedulerTaskTrackerTest,
|
| // Create a task that will verify that ThreadTaskRunnerHandle is properly set
|
| // to |test_task_runner| in its scope per |single_thread_task_runner_ref|
|
| // being set on it.
|
| - std::unique_ptr<Task> verify_task(
|
| - new Task(FROM_HERE,
|
| - BindOnce(&VerifyThreadTaskRunnerHandle,
|
| - base::Unretained(test_task_runner.get())),
|
| - TaskTraits().WithShutdownBehavior(GetParam()), TimeDelta()));
|
| + std::unique_ptr<Task> verify_task(new Task(
|
| + FROM_HERE,
|
| + BindOnce(&VerifyThreadTaskRunnerHandle,
|
| + base::Unretained(test_task_runner.get())),
|
| + test::CreateTaskTraits().WithShutdownBehavior(GetParam()), TimeDelta()));
|
| verify_task->single_thread_task_runner_ref = test_task_runner;
|
|
|
| RunTaskRunnerHandleVerificationTask(&tracker_, std::move(verify_task));
|
| }
|
|
|
| TEST_P(TaskSchedulerTaskTrackerTest, FlushPendingDelayedTask) {
|
| - const Task delayed_task(FROM_HERE, BindOnce(&DoNothing),
|
| - TaskTraits().WithShutdownBehavior(GetParam()),
|
| - TimeDelta::FromDays(1));
|
| + Task delayed_task(FROM_HERE, BindOnce(&DoNothing),
|
| + test::CreateTaskTraits().WithShutdownBehavior(GetParam()),
|
| + TimeDelta::FromDays(1));
|
| tracker_.WillPostTask(&delayed_task);
|
| // Flush() should return even if the delayed task didn't run.
|
| tracker_.Flush();
|
| @@ -570,7 +574,7 @@ TEST_P(TaskSchedulerTaskTrackerTest, FlushPendingDelayedTask) {
|
| TEST_P(TaskSchedulerTaskTrackerTest, FlushPendingUndelayedTask) {
|
| auto undelayed_task = base::MakeUnique<Task>(
|
| FROM_HERE, Bind(&DoNothing),
|
| - TaskTraits().WithShutdownBehavior(GetParam()), TimeDelta());
|
| + test::CreateTaskTraits().WithShutdownBehavior(GetParam()), TimeDelta());
|
| tracker_.WillPostTask(undelayed_task.get());
|
|
|
| // Flush() shouldn't return before the undelayed task runs.
|
| @@ -586,7 +590,7 @@ TEST_P(TaskSchedulerTaskTrackerTest, FlushPendingUndelayedTask) {
|
| TEST_P(TaskSchedulerTaskTrackerTest, PostTaskDuringFlush) {
|
| auto undelayed_task = base::MakeUnique<Task>(
|
| FROM_HERE, Bind(&DoNothing),
|
| - TaskTraits().WithShutdownBehavior(GetParam()), TimeDelta());
|
| + test::CreateTaskTraits().WithShutdownBehavior(GetParam()), TimeDelta());
|
| tracker_.WillPostTask(undelayed_task.get());
|
|
|
| // Flush() shouldn't return before the undelayed task runs.
|
| @@ -597,7 +601,7 @@ TEST_P(TaskSchedulerTaskTrackerTest, PostTaskDuringFlush) {
|
| // Simulate posting another undelayed task.
|
| auto other_undelayed_task = base::MakeUnique<Task>(
|
| FROM_HERE, Bind(&DoNothing),
|
| - TaskTraits().WithShutdownBehavior(GetParam()), TimeDelta());
|
| + test::CreateTaskTraits().WithShutdownBehavior(GetParam()), TimeDelta());
|
| tracker_.WillPostTask(other_undelayed_task.get());
|
|
|
| // Run the first undelayed task.
|
| @@ -616,11 +620,12 @@ TEST_P(TaskSchedulerTaskTrackerTest, RunDelayedTaskDuringFlush) {
|
| // Simulate posting a delayed and an undelayed task.
|
| auto delayed_task = base::MakeUnique<Task>(
|
| FROM_HERE, Bind(&DoNothing),
|
| - TaskTraits().WithShutdownBehavior(GetParam()), TimeDelta::FromDays(1));
|
| + test::CreateTaskTraits().WithShutdownBehavior(GetParam()),
|
| + TimeDelta::FromDays(1));
|
| tracker_.WillPostTask(delayed_task.get());
|
| auto undelayed_task = base::MakeUnique<Task>(
|
| FROM_HERE, Bind(&DoNothing),
|
| - TaskTraits().WithShutdownBehavior(GetParam()), TimeDelta());
|
| + test::CreateTaskTraits().WithShutdownBehavior(GetParam()), TimeDelta());
|
| tracker_.WillPostTask(undelayed_task.get());
|
|
|
| // Flush() shouldn't return before the undelayed task runs.
|
| @@ -650,7 +655,7 @@ TEST_P(TaskSchedulerTaskTrackerTest, FlushAfterShutdown) {
|
| // Simulate posting a task.
|
| auto undelayed_task = base::MakeUnique<Task>(
|
| FROM_HERE, Bind(&DoNothing),
|
| - TaskTraits().WithShutdownBehavior(GetParam()), TimeDelta());
|
| + test::CreateTaskTraits().WithShutdownBehavior(GetParam()), TimeDelta());
|
| tracker_.WillPostTask(undelayed_task.get());
|
|
|
| // Shutdown() should return immediately since there are no pending
|
| @@ -669,7 +674,7 @@ TEST_P(TaskSchedulerTaskTrackerTest, ShutdownDuringFlush) {
|
| // Simulate posting a task.
|
| auto undelayed_task = base::MakeUnique<Task>(
|
| FROM_HERE, Bind(&DoNothing),
|
| - TaskTraits().WithShutdownBehavior(GetParam()), TimeDelta());
|
| + test::CreateTaskTraits().WithShutdownBehavior(GetParam()), TimeDelta());
|
| tracker_.WillPostTask(undelayed_task.get());
|
|
|
| // Flush() shouldn't return before the undelayed task runs or
|
| @@ -713,7 +718,7 @@ TEST_F(TaskSchedulerTaskTrackerTest, CurrentSequenceToken) {
|
| const SequenceToken sequence_token(SequenceToken::Create());
|
| auto task = base::MakeUnique<Task>(FROM_HERE,
|
| Bind(&ExpectSequenceToken, sequence_token),
|
| - TaskTraits(), TimeDelta());
|
| + test::CreateTaskTraits(), TimeDelta());
|
| tracker_.WillPostTask(task.get());
|
|
|
| EXPECT_FALSE(SequenceToken::GetForCurrentThread().IsValid());
|
| @@ -866,7 +871,7 @@ class WaitAllowedTestThread : public SimpleThread {
|
| FROM_HERE, Bind([]() {
|
| EXPECT_DCHECK_DEATH({ ThreadRestrictions::AssertWaitAllowed(); });
|
| }),
|
| - TaskTraits(), TimeDelta());
|
| + test::CreateTaskTraits(), TimeDelta());
|
| EXPECT_TRUE(tracker.WillPostTask(task_without_sync_primitives.get()));
|
| tracker.RunTask(std::move(task_without_sync_primitives),
|
| SequenceToken::Create());
|
| @@ -874,12 +879,12 @@ class WaitAllowedTestThread : public SimpleThread {
|
| // Disallow waiting. Expect TaskTracker to allow it before running a task
|
| // with the WithBaseSyncPrimitives() trait.
|
| ThreadRestrictions::DisallowWaiting();
|
| - auto task_with_sync_primitives =
|
| - MakeUnique<Task>(FROM_HERE, Bind([]() {
|
| - // Shouldn't fail.
|
| - ThreadRestrictions::AssertWaitAllowed();
|
| - }),
|
| - TaskTraits().WithBaseSyncPrimitives(), TimeDelta());
|
| + auto task_with_sync_primitives = MakeUnique<Task>(
|
| + FROM_HERE, Bind([]() {
|
| + // Shouldn't fail.
|
| + ThreadRestrictions::AssertWaitAllowed();
|
| + }),
|
| + test::CreateTaskTraits().WithBaseSyncPrimitives(), TimeDelta());
|
| EXPECT_TRUE(tracker.WillPostTask(task_with_sync_primitives.get()));
|
| tracker.RunTask(std::move(task_with_sync_primitives),
|
| SequenceToken::Create());
|
| @@ -909,30 +914,36 @@ TEST(TaskSchedulerTaskTrackerHistogramTest, TaskLatency) {
|
| TaskTracker tracker;
|
|
|
| struct {
|
| - const TaskTraits traits;
|
| + TaskTraits traits;
|
| const char* const expected_histogram;
|
| } tests[] = {
|
| - {TaskTraits().WithPriority(TaskPriority::BACKGROUND),
|
| + {test::CreateTaskTraits().WithPriority(TaskPriority::BACKGROUND),
|
| "TaskScheduler.TaskLatency.BackgroundTaskPriority"},
|
| - {TaskTraits().WithPriority(TaskPriority::BACKGROUND).MayBlock(),
|
| + {test::CreateTaskTraits()
|
| + .WithPriority(TaskPriority::BACKGROUND)
|
| + .MayBlock(),
|
| "TaskScheduler.TaskLatency.BackgroundTaskPriority.MayBlock"},
|
| - {TaskTraits()
|
| + {test::CreateTaskTraits()
|
| .WithPriority(TaskPriority::BACKGROUND)
|
| .WithBaseSyncPrimitives(),
|
| "TaskScheduler.TaskLatency.BackgroundTaskPriority.MayBlock"},
|
| - {TaskTraits().WithPriority(TaskPriority::USER_VISIBLE),
|
| + {test::CreateTaskTraits().WithPriority(TaskPriority::USER_VISIBLE),
|
| "TaskScheduler.TaskLatency.UserVisibleTaskPriority"},
|
| - {TaskTraits().WithPriority(TaskPriority::USER_VISIBLE).MayBlock(),
|
| + {test::CreateTaskTraits()
|
| + .WithPriority(TaskPriority::USER_VISIBLE)
|
| + .MayBlock(),
|
| "TaskScheduler.TaskLatency.UserVisibleTaskPriority.MayBlock"},
|
| - {TaskTraits()
|
| + {test::CreateTaskTraits()
|
| .WithPriority(TaskPriority::USER_VISIBLE)
|
| .WithBaseSyncPrimitives(),
|
| "TaskScheduler.TaskLatency.UserVisibleTaskPriority.MayBlock"},
|
| - {TaskTraits().WithPriority(TaskPriority::USER_BLOCKING),
|
| + {test::CreateTaskTraits().WithPriority(TaskPriority::USER_BLOCKING),
|
| "TaskScheduler.TaskLatency.UserBlockingTaskPriority"},
|
| - {TaskTraits().WithPriority(TaskPriority::USER_BLOCKING).MayBlock(),
|
| + {test::CreateTaskTraits()
|
| + .WithPriority(TaskPriority::USER_BLOCKING)
|
| + .MayBlock(),
|
| "TaskScheduler.TaskLatency.UserBlockingTaskPriority.MayBlock"},
|
| - {TaskTraits()
|
| + {test::CreateTaskTraits()
|
| .WithPriority(TaskPriority::USER_BLOCKING)
|
| .WithBaseSyncPrimitives(),
|
| "TaskScheduler.TaskLatency.UserBlockingTaskPriority.MayBlock"}};
|
|
|