| 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..3811bdaa82103d648b15910fbcd0a6db93a83517 100644
|
| --- a/base/deferred_sequenced_task_runner.cc
|
| +++ b/base/deferred_sequenced_task_runner.cc
|
| @@ -4,6 +4,8 @@
|
|
|
| #include "base/deferred_sequenced_task_runner.h"
|
|
|
| +#include <utility>
|
| +
|
| #include "base/bind.h"
|
| #include "base/logging.h"
|
|
|
| @@ -13,12 +15,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 +34,17 @@ DeferredSequencedTaskRunner::~DeferredSequencedTaskRunner() {
|
|
|
| bool DeferredSequencedTaskRunner::PostDelayedTask(
|
| const tracked_objects::Location& from_here,
|
| - const Closure& task,
|
| + Closure 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,33 +54,32 @@ bool DeferredSequencedTaskRunner::RunsTasksOnCurrentThread() const {
|
|
|
| bool DeferredSequencedTaskRunner::PostNonNestableDelayedTask(
|
| const tracked_objects::Location& from_here,
|
| - const Closure& task,
|
| + Closure 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,
|
| + Closure 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));
|
| }
|
|
|
| -
|
| void DeferredSequencedTaskRunner::Start() {
|
| AutoLock lock(lock_);
|
| DCHECK(!started_);
|
| @@ -80,20 +87,14 @@ void DeferredSequencedTaskRunner::Start() {
|
| for (std::vector<DeferredTask>::iterator i = deferred_tasks_queue_.begin();
|
| i != deferred_tasks_queue_.end();
|
| ++i) {
|
| - const DeferredTask& task = *i;
|
| + 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
|
| - // is posted.
|
| - *i = DeferredTask();
|
| }
|
| deferred_tasks_queue_.clear();
|
| }
|
|
|