diff options
Diffstat (limited to 'base/threading/sequenced_worker_pool.cc')
-rw-r--r-- | base/threading/sequenced_worker_pool.cc | 95 |
1 files changed, 48 insertions, 47 deletions
diff --git a/base/threading/sequenced_worker_pool.cc b/base/threading/sequenced_worker_pool.cc index ce594cd7fb..866a8b3b3b 100644 --- a/base/threading/sequenced_worker_pool.cc +++ b/base/threading/sequenced_worker_pool.cc @@ -144,7 +144,7 @@ class SequencedWorkerPoolTaskRunner : public TaskRunner { // TaskRunner implementation bool PostDelayedTask(const tracked_objects::Location& from_here, - const Closure& task, + Closure task, TimeDelta delay) override; bool RunsTasksOnCurrentThread() const override; @@ -168,13 +168,13 @@ SequencedWorkerPoolTaskRunner::~SequencedWorkerPoolTaskRunner() { bool SequencedWorkerPoolTaskRunner::PostDelayedTask( const tracked_objects::Location& from_here, - const Closure& task, + Closure task, TimeDelta delay) { if (delay.is_zero()) { - return pool_->PostWorkerTaskWithShutdownBehavior( - from_here, task, shutdown_behavior_); + return pool_->PostWorkerTaskWithShutdownBehavior(from_here, std::move(task), + shutdown_behavior_); } - return pool_->PostDelayedWorkerTask(from_here, task, delay); + return pool_->PostDelayedWorkerTask(from_here, std::move(task), delay); } bool SequencedWorkerPoolTaskRunner::RunsTasksOnCurrentThread() const { @@ -198,13 +198,13 @@ class SequencedWorkerPool::PoolSequencedTaskRunner // TaskRunner implementation bool PostDelayedTask(const tracked_objects::Location& from_here, - const Closure& task, + Closure task, TimeDelta delay) override; bool RunsTasksOnCurrentThread() const override; // SequencedTaskRunner implementation bool PostNonNestableDelayedTask(const tracked_objects::Location& from_here, - const Closure& task, + Closure task, TimeDelta delay) override; private: @@ -231,15 +231,16 @@ SequencedWorkerPool::PoolSequencedTaskRunner:: SequencedWorkerPool::PoolSequencedTaskRunner:: ~PoolSequencedTaskRunner() = default; -bool SequencedWorkerPool::PoolSequencedTaskRunner:: - PostDelayedTask(const tracked_objects::Location& from_here, - const Closure& task, - TimeDelta delay) { +bool SequencedWorkerPool::PoolSequencedTaskRunner::PostDelayedTask( + const tracked_objects::Location& from_here, + Closure task, + TimeDelta delay) { if (delay.is_zero()) { return pool_->PostSequencedWorkerTaskWithShutdownBehavior( - token_, from_here, task, shutdown_behavior_); + token_, from_here, std::move(task), shutdown_behavior_); } - return pool_->PostDelayedSequencedWorkerTask(token_, from_here, task, delay); + return pool_->PostDelayedSequencedWorkerTask(token_, from_here, + std::move(task), delay); } bool SequencedWorkerPool::PoolSequencedTaskRunner:: @@ -247,13 +248,13 @@ bool SequencedWorkerPool::PoolSequencedTaskRunner:: return pool_->IsRunningSequenceOnCurrentThread(token_); } -bool SequencedWorkerPool::PoolSequencedTaskRunner:: - PostNonNestableDelayedTask(const tracked_objects::Location& from_here, - const Closure& task, - TimeDelta delay) { +bool SequencedWorkerPool::PoolSequencedTaskRunner::PostNonNestableDelayedTask( + const tracked_objects::Location& from_here, + Closure task, + TimeDelta delay) { // There's no way to run nested tasks, so simply forward to // PostDelayedTask. - return PostDelayedTask(from_here, task, delay); + return PostDelayedTask(from_here, std::move(task), delay); } // Worker --------------------------------------------------------------------- @@ -352,7 +353,7 @@ class SequencedWorkerPool::Inner { SequenceToken sequence_token, WorkerShutdown shutdown_behavior, const tracked_objects::Location& from_here, - const Closure& task, + Closure task, TimeDelta delay); bool RunsTasksOnCurrentThread() const; @@ -696,7 +697,7 @@ bool SequencedWorkerPool::Inner::PostTask( SequenceToken sequence_token, WorkerShutdown shutdown_behavior, const tracked_objects::Location& from_here, - const Closure& task, + Closure task, TimeDelta delay) { // TODO(fdoray): Uncomment this DCHECK. It is initially commented to avoid a // revert of the CL that adds debug::DumpWithoutCrashing() if it fails on the @@ -710,9 +711,9 @@ bool SequencedWorkerPool::Inner::PostTask( sequenced.sequence_token_id = sequence_token.id_; sequenced.shutdown_behavior = shutdown_behavior; sequenced.posted_from = from_here; - sequenced.task = - shutdown_behavior == BLOCK_SHUTDOWN ? - base::MakeCriticalClosure(task) : task; + sequenced.task = shutdown_behavior == BLOCK_SHUTDOWN + ? base::MakeCriticalClosure(std::move(task)) + : std::move(task); sequenced.time_to_run = TimeTicks::Now() + delay; int create_thread_id = 0; @@ -1043,7 +1044,7 @@ void SequencedWorkerPool::Inner::ThreadLoop(Worker* this_worker) { tracked_objects::TaskStopwatch stopwatch; stopwatch.Start(); - task.task.Run(); + std::move(task.task).Run(); stopwatch.Stop(); tracked_objects::ThreadData::TallyRunOnNamedThreadIfTracking( @@ -1054,7 +1055,7 @@ void SequencedWorkerPool::Inner::ThreadLoop(Worker* this_worker) { // Also, do it before calling reset_running_task_info() so // that sequence-checking from within the task's destructor // still works. - task.task = Closure(); + DCHECK(!task.task); this_worker->reset_running_task_info(); } @@ -1562,71 +1563,71 @@ SequencedWorkerPool::GetTaskRunnerWithShutdownBehavior( bool SequencedWorkerPool::PostWorkerTask( const tracked_objects::Location& from_here, - const Closure& task) { - return inner_->PostTask(NULL, SequenceToken(), BLOCK_SHUTDOWN, - from_here, task, TimeDelta()); + Closure task) { + return inner_->PostTask(NULL, SequenceToken(), BLOCK_SHUTDOWN, from_here, + std::move(task), TimeDelta()); } bool SequencedWorkerPool::PostDelayedWorkerTask( const tracked_objects::Location& from_here, - const Closure& task, + Closure task, TimeDelta delay) { WorkerShutdown shutdown_behavior = delay.is_zero() ? BLOCK_SHUTDOWN : SKIP_ON_SHUTDOWN; - return inner_->PostTask(NULL, SequenceToken(), shutdown_behavior, - from_here, task, delay); + return inner_->PostTask(NULL, SequenceToken(), shutdown_behavior, from_here, + std::move(task), delay); } bool SequencedWorkerPool::PostWorkerTaskWithShutdownBehavior( const tracked_objects::Location& from_here, - const Closure& task, + Closure task, WorkerShutdown shutdown_behavior) { - return inner_->PostTask(NULL, SequenceToken(), shutdown_behavior, - from_here, task, TimeDelta()); + return inner_->PostTask(NULL, SequenceToken(), shutdown_behavior, from_here, + std::move(task), TimeDelta()); } bool SequencedWorkerPool::PostSequencedWorkerTask( SequenceToken sequence_token, const tracked_objects::Location& from_here, - const Closure& task) { - return inner_->PostTask(NULL, sequence_token, BLOCK_SHUTDOWN, - from_here, task, TimeDelta()); + Closure task) { + return inner_->PostTask(NULL, sequence_token, BLOCK_SHUTDOWN, from_here, + std::move(task), TimeDelta()); } bool SequencedWorkerPool::PostDelayedSequencedWorkerTask( SequenceToken sequence_token, const tracked_objects::Location& from_here, - const Closure& task, + Closure task, TimeDelta delay) { WorkerShutdown shutdown_behavior = delay.is_zero() ? BLOCK_SHUTDOWN : SKIP_ON_SHUTDOWN; - return inner_->PostTask(NULL, sequence_token, shutdown_behavior, - from_here, task, delay); + return inner_->PostTask(NULL, sequence_token, shutdown_behavior, from_here, + std::move(task), delay); } bool SequencedWorkerPool::PostNamedSequencedWorkerTask( const std::string& token_name, const tracked_objects::Location& from_here, - const Closure& task) { + Closure task) { DCHECK(!token_name.empty()); return inner_->PostTask(&token_name, SequenceToken(), BLOCK_SHUTDOWN, - from_here, task, TimeDelta()); + from_here, std::move(task), TimeDelta()); } bool SequencedWorkerPool::PostSequencedWorkerTaskWithShutdownBehavior( SequenceToken sequence_token, const tracked_objects::Location& from_here, - const Closure& task, + Closure task, WorkerShutdown shutdown_behavior) { - return inner_->PostTask(NULL, sequence_token, shutdown_behavior, - from_here, task, TimeDelta()); + return inner_->PostTask(NULL, sequence_token, shutdown_behavior, from_here, + std::move(task), TimeDelta()); } bool SequencedWorkerPool::PostDelayedTask( const tracked_objects::Location& from_here, - const Closure& task, + Closure task, TimeDelta delay) { - return PostDelayedWorkerTask(from_here, task, delay); + return PostDelayedWorkerTask(from_here, std::move(task), delay); } bool SequencedWorkerPool::RunsTasksOnCurrentThread() const { |