Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(428)

Side by Side Diff: base/task_scheduler/sequence.cc

Issue 1685423002: Task Scheduler. (Closed) Base URL: https://luckyluke-private.googlesource.com/src@a_master
Patch Set: Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2016 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_scheduler/sequence.h"
6
7 #include <utility>
8
9 #include "base/logging.h"
10
11 namespace base {
12 namespace task_scheduler {
13
14 Sequence::Sequence() : num_tasks_per_priority_() {}
15
16 void Sequence::PushTask(scoped_ptr<Task> task, size_t* prev_num_tasks) {
17 AutoSchedulerLock auto_lock(lock_);
18 DCHECK(task.get());
fdoray 2016/02/11 17:30:33 DCHECK first? + DCHECK(prev_num_tasks);
robliao 2016/02/11 22:49:30 Both DCHECKs are unnecessary as both will crash be
fdoray 2016/02/12 04:16:19 Done.
19
20 ++num_tasks_per_priority_[static_cast<TaskPriorityUnderlyingType>(
21 task->traits.priority())];
22 *prev_num_tasks = queue_.size();
23 queue_.push(std::move(task));
24 }
25
26 const Task* Sequence::PeekTask() {
27 AutoSchedulerLock auto_lock(lock_);
28
29 if (queue_.empty())
30 return nullptr;
31
32 return queue_.front().get();
33 }
34
35 void Sequence::PopTask(size_t* new_num_tasks) {
36 DCHECK(new_num_tasks);
37 AutoSchedulerLock auto_lock(lock_);
38 DCHECK(!queue_.empty());
39
40 --num_tasks_per_priority_[static_cast<TaskPriorityUnderlyingType>(
41 queue_.front()->traits.priority())];
42 queue_.pop();
43 *new_num_tasks = queue_.size();
44 }
45
46 SequenceSortKey Sequence::GetSortKey() {
47 AutoSchedulerLock auto_lock(lock_);
48 DCHECK(!queue_.empty());
49
50 // Find the highest task priority in the sequence.
51 TaskPriority priority = TaskPriority::BACKGROUND;
52 for (TaskPriorityUnderlyingType i = kNumTaskPriorities - 1; i >= 0; --i) {
53 if (num_tasks_per_priority_[i] > 0) {
54 priority = static_cast<TaskPriority>(i);
55 break;
56 }
57 }
58
59 return SequenceSortKey(priority, queue_.front()->post_time);
60 }
61
62 Sequence::~Sequence() = default;
63
64 } // namespace task_scheduler
65 } // namespace base
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698