| Index: cc/test/ordered_simple_task_runner.cc
|
| diff --git a/cc/test/ordered_simple_task_runner.cc b/cc/test/ordered_simple_task_runner.cc
|
| index 9dc4bbcd2dacb680d586699576a632e286aab037..b0598faef74dda6fe64a7c4179313e1db289a3de 100644
|
| --- a/cc/test/ordered_simple_task_runner.cc
|
| +++ b/cc/test/ordered_simple_task_runner.cc
|
| @@ -43,6 +43,12 @@ TestOrderablePendingTask::TestOrderablePendingTask(
|
| task_id_(TestOrderablePendingTask::task_id_counter++) {
|
| }
|
|
|
| +TestOrderablePendingTask::TestOrderablePendingTask(TestOrderablePendingTask&&) =
|
| + default;
|
| +
|
| +TestOrderablePendingTask& TestOrderablePendingTask::operator=(
|
| + TestOrderablePendingTask&&) = default;
|
| +
|
| size_t TestOrderablePendingTask::task_id_counter = 0;
|
|
|
| TestOrderablePendingTask::~TestOrderablePendingTask() {
|
| @@ -106,7 +112,7 @@ bool OrderedSimpleTaskRunner::PostDelayedTask(
|
| base::TestPendingTask::NESTABLE);
|
|
|
| TRACE_TASK("OrderedSimpleTaskRunner::PostDelayedTask", pt);
|
| - pending_tasks_.insert(pt);
|
| + pending_tasks_.insert(std::move(pt));
|
| return true;
|
| }
|
|
|
| @@ -119,7 +125,7 @@ bool OrderedSimpleTaskRunner::PostNonNestableDelayedTask(
|
| base::TestPendingTask::NON_NESTABLE);
|
|
|
| TRACE_TASK("OrderedSimpleTaskRunner::PostNonNestableDelayedTask", pt);
|
| - pending_tasks_.insert(pt);
|
| + pending_tasks_.insert(std::move(pt));
|
| return true;
|
| }
|
|
|
| @@ -222,7 +228,11 @@ bool OrderedSimpleTaskRunner::RunTasksWhile(
|
| "OrderedSimpleTaskRunner::RunPendingTasks running",
|
| "task",
|
| task_to_run->AsValue());
|
| - task_to_run->task.Run();
|
| + // It's safe to remove const and consume |task| here, since |task| is not
|
| + // used for ordering the item.
|
| + base::OnceClosure& task =
|
| + const_cast<base::OnceClosure&>(task_to_run->task);
|
| + std::move(task).Run();
|
| }
|
|
|
| pending_tasks_.erase(task_to_run);
|
| @@ -310,15 +320,18 @@ bool OrderedSimpleTaskRunner::TaskRunCountBelowCallback(size_t max_tasks,
|
| }
|
|
|
| base::Callback<bool(void)> OrderedSimpleTaskRunner::TaskExistedInitially() {
|
| - // base::Bind takes a copy of pending_tasks_
|
| + std::set<size_t> task_ids;
|
| + for (const auto& task : pending_tasks_)
|
| + task_ids.insert(task.task_id());
|
| +
|
| return base::Bind(&OrderedSimpleTaskRunner::TaskExistedInitiallyCallback,
|
| - base::Unretained(this),
|
| - pending_tasks_);
|
| + base::Unretained(this), std::move(task_ids));
|
| }
|
|
|
| bool OrderedSimpleTaskRunner::TaskExistedInitiallyCallback(
|
| - const std::set<TestOrderablePendingTask>& existing_tasks) {
|
| - return existing_tasks.find(*pending_tasks_.begin()) != existing_tasks.end();
|
| + const std::set<size_t>& existing_tasks) {
|
| + return existing_tasks.find(pending_tasks_.begin()->task_id()) !=
|
| + existing_tasks.end();
|
| }
|
|
|
| base::Callback<bool(void)> OrderedSimpleTaskRunner::NowBefore(
|
|
|