summaryrefslogtreecommitdiff
path: root/base/task_scheduler/sequence.cc
diff options
context:
space:
mode:
Diffstat (limited to 'base/task_scheduler/sequence.cc')
-rw-r--r--base/task_scheduler/sequence.cc26
1 files changed, 16 insertions, 10 deletions
diff --git a/base/task_scheduler/sequence.cc b/base/task_scheduler/sequence.cc
index 4ecb60568c..601b5402d0 100644
--- a/base/task_scheduler/sequence.cc
+++ b/base/task_scheduler/sequence.cc
@@ -26,24 +26,30 @@ bool Sequence::PushTask(std::unique_ptr<Task> task) {
return queue_.size() == 1;
}
-const Task* Sequence::PeekTask() const {
- AutoSchedulerLock auto_lock(lock_);
-
- if (queue_.empty())
- return nullptr;
-
- return queue_.front().get();
-}
-
-bool Sequence::PopTask() {
+std::unique_ptr<Task> Sequence::TakeTask() {
AutoSchedulerLock auto_lock(lock_);
DCHECK(!queue_.empty());
+ DCHECK(queue_.front());
const int priority_index =
static_cast<int>(queue_.front()->traits.priority());
DCHECK_GT(num_tasks_per_priority_[priority_index], 0U);
--num_tasks_per_priority_[priority_index];
+ return std::move(queue_.front());
+}
+
+TaskTraits Sequence::PeekTaskTraits() const {
+ AutoSchedulerLock auto_lock(lock_);
+ DCHECK(!queue_.empty());
+ DCHECK(queue_.front());
+ return queue_.front()->traits;
+}
+
+bool Sequence::Pop() {
+ AutoSchedulerLock auto_lock(lock_);
+ DCHECK(!queue_.empty());
+ DCHECK(!queue_.front());
queue_.pop();
return queue_.empty();
}