Index: base/deferred_sequenced_task_runner.cc |
diff --git a/base/deferred_sequenced_task_runner.cc b/base/deferred_sequenced_task_runner.cc |
index 7d09ef838cf37bc67137fa3549c0d77b01a01088..eed2a85032692cfdbcf5ad319bdd1a397bda8eca 100644 |
--- a/base/deferred_sequenced_task_runner.cc |
+++ b/base/deferred_sequenced_task_runner.cc |
@@ -13,12 +13,16 @@ DeferredSequencedTaskRunner::DeferredTask::DeferredTask() |
: is_non_nestable(false) { |
} |
-DeferredSequencedTaskRunner::DeferredTask::DeferredTask( |
- const DeferredTask& other) = default; |
+DeferredSequencedTaskRunner::DeferredTask::DeferredTask(DeferredTask&& other) = |
+ default; |
DeferredSequencedTaskRunner::DeferredTask::~DeferredTask() { |
} |
+DeferredSequencedTaskRunner::DeferredTask& |
+DeferredSequencedTaskRunner::DeferredTask::operator=(DeferredTask&& other) = |
+ default; |
+ |
DeferredSequencedTaskRunner::DeferredSequencedTaskRunner( |
scoped_refptr<SequencedTaskRunner> target_task_runner) |
: started_(false), target_task_runner_(std::move(target_task_runner)) {} |
@@ -28,15 +32,17 @@ DeferredSequencedTaskRunner::~DeferredSequencedTaskRunner() { |
bool DeferredSequencedTaskRunner::PostDelayedTask( |
const tracked_objects::Location& from_here, |
- const Closure& task, |
+ OnceClosure task, |
TimeDelta delay) { |
AutoLock lock(lock_); |
if (started_) { |
DCHECK(deferred_tasks_queue_.empty()); |
- return target_task_runner_->PostDelayedTask(from_here, task, delay); |
+ return target_task_runner_->PostDelayedTask(from_here, std::move(task), |
+ delay); |
} |
- QueueDeferredTask(from_here, task, delay, false /* is_non_nestable */); |
+ QueueDeferredTask(from_here, std::move(task), delay, |
+ false /* is_non_nestable */); |
return true; |
} |
@@ -46,30 +52,30 @@ bool DeferredSequencedTaskRunner::RunsTasksOnCurrentThread() const { |
bool DeferredSequencedTaskRunner::PostNonNestableDelayedTask( |
const tracked_objects::Location& from_here, |
- const Closure& task, |
+ OnceClosure task, |
TimeDelta delay) { |
AutoLock lock(lock_); |
if (started_) { |
DCHECK(deferred_tasks_queue_.empty()); |
- return target_task_runner_->PostNonNestableDelayedTask(from_here, |
- task, |
- delay); |
+ return target_task_runner_->PostNonNestableDelayedTask( |
+ from_here, std::move(task), delay); |
} |
- QueueDeferredTask(from_here, task, delay, true /* is_non_nestable */); |
+ QueueDeferredTask(from_here, std::move(task), delay, |
+ true /* is_non_nestable */); |
return true; |
} |
void DeferredSequencedTaskRunner::QueueDeferredTask( |
const tracked_objects::Location& from_here, |
- const Closure& task, |
+ OnceClosure task, |
TimeDelta delay, |
bool is_non_nestable) { |
DeferredTask deferred_task; |
deferred_task.posted_from = from_here; |
- deferred_task.task = task; |
+ deferred_task.task = std::move(task); |
deferred_task.delay = delay; |
deferred_task.is_non_nestable = is_non_nestable; |
- deferred_tasks_queue_.push_back(deferred_task); |
+ deferred_tasks_queue_.push_back(std::move(deferred_task)); |
} |
@@ -82,13 +88,11 @@ void DeferredSequencedTaskRunner::Start() { |
++i) { |
const DeferredTask& task = *i; |
if (task.is_non_nestable) { |
- target_task_runner_->PostNonNestableDelayedTask(task.posted_from, |
- task.task, |
- task.delay); |
+ target_task_runner_->PostNonNestableDelayedTask( |
+ task.posted_from, std::move(task.task), task.delay); |
} else { |
target_task_runner_->PostDelayedTask(task.posted_from, |
- task.task, |
- task.delay); |
+ std::move(task.task), task.delay); |
} |
// Replace the i-th element in the |deferred_tasks_queue_| with an empty |
// |DelayedTask| to ensure that |task| is destroyed before the next task |