Chromium Code Reviews| 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 a3d66ee6d3a58510e49557842b0498955f17fc83..e6ac1ed6fc8507dd9abd57211d5346da8f6e4a0d 100644 |
| --- a/cc/test/ordered_simple_task_runner.cc |
| +++ b/cc/test/ordered_simple_task_runner.cc |
| @@ -43,6 +43,9 @@ TestOrderablePendingTask::TestOrderablePendingTask( |
| task_id_(TestOrderablePendingTask::task_id_counter++) { |
| } |
| +TestOrderablePendingTask::TestOrderablePendingTask(TestOrderablePendingTask&&) = |
| + default; |
| + |
| size_t TestOrderablePendingTask::task_id_counter = 0; |
| TestOrderablePendingTask::~TestOrderablePendingTask() { |
| @@ -106,7 +109,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 +122,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 +225,9 @@ bool OrderedSimpleTaskRunner::RunTasksWhile( |
| "OrderedSimpleTaskRunner::RunPendingTasks running", |
| "task", |
| task_to_run->AsValue()); |
| - task_to_run->task.Run(); |
| + base::OnceClosure& task = |
| + const_cast<base::OnceClosure&>(task_to_run->task); |
| + std::move(task).Run(); |
| } |
| pending_tasks_.erase(task_to_run); |
|
danakj
2016/10/20 20:07:46
Is it for sure valid to erase an iterator when you
tzik
2016/10/27 08:20:49
Hmm. I think it's practically safe, since the task
danakj
2016/10/27 21:15:21
ok can you leave a comment saying why this is okay
tzik
2017/01/23 10:45:51
Done.
|
| @@ -308,15 +313,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( |