1 // Copyright 2018 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "base/task/thread_pool/pooled_sequenced_task_runner.h"
6
7 #include "base/sequence_token.h"
8
9 namespace base {
10 namespace internal {
11
PooledSequencedTaskRunner(const TaskTraits & traits,PooledTaskRunnerDelegate * pooled_task_runner_delegate)12 PooledSequencedTaskRunner::PooledSequencedTaskRunner(
13 const TaskTraits& traits,
14 PooledTaskRunnerDelegate* pooled_task_runner_delegate)
15 : pooled_task_runner_delegate_(pooled_task_runner_delegate),
16 sequence_(MakeRefCounted<Sequence>(traits,
17 this,
18 TaskSourceExecutionMode::kSequenced)) {
19 }
20
21 PooledSequencedTaskRunner::~PooledSequencedTaskRunner() = default;
22
PostDelayedTask(const Location & from_here,OnceClosure closure,TimeDelta delay)23 bool PooledSequencedTaskRunner::PostDelayedTask(const Location& from_here,
24 OnceClosure closure,
25 TimeDelta delay) {
26 if (!PooledTaskRunnerDelegate::Exists())
27 return false;
28
29 Task task(from_here, std::move(closure), delay);
30
31 // Post the task as part of |sequence_|.
32 return pooled_task_runner_delegate_->PostTaskWithSequence(std::move(task),
33 sequence_);
34 }
35
PostNonNestableDelayedTask(const Location & from_here,OnceClosure closure,TimeDelta delay)36 bool PooledSequencedTaskRunner::PostNonNestableDelayedTask(
37 const Location& from_here,
38 OnceClosure closure,
39 TimeDelta delay) {
40 // Tasks are never nested within the thread pool.
41 return PostDelayedTask(from_here, std::move(closure), delay);
42 }
43
RunsTasksInCurrentSequence() const44 bool PooledSequencedTaskRunner::RunsTasksInCurrentSequence() const {
45 return sequence_->token() == SequenceToken::GetForCurrentThread();
46 }
47
UpdatePriority(TaskPriority priority)48 void PooledSequencedTaskRunner::UpdatePriority(TaskPriority priority) {
49 pooled_task_runner_delegate_->UpdatePriority(sequence_, priority);
50 }
51
52 } // namespace internal
53 } // namespace base
54