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

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

Issue 1903133003: TaskScheduler: Avoid Sequence refcount bump in GetWork() (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix compile (why did this compile locally?! Created 4 years, 7 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
« no previous file with comments | « base/task_scheduler/sequence_sort_key_unittest.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/task_scheduler/sequence.h" 5 #include "base/task_scheduler/sequence.h"
6 6
7 #include "base/macros.h" 7 #include "base/macros.h"
8 #include "base/time/time.h" 8 #include "base/time/time.h"
9 #include "testing/gtest/include/gtest/gtest.h" 9 #include "testing/gtest/include/gtest/gtest.h"
10 10
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
61 const Task* task_a_; 61 const Task* task_a_;
62 const Task* task_b_; 62 const Task* task_b_;
63 const Task* task_c_; 63 const Task* task_c_;
64 const Task* task_d_; 64 const Task* task_d_;
65 const Task* task_e_; 65 const Task* task_e_;
66 66
67 private: 67 private:
68 DISALLOW_COPY_AND_ASSIGN(TaskSchedulerSequenceTest); 68 DISALLOW_COPY_AND_ASSIGN(TaskSchedulerSequenceTest);
69 }; 69 };
70 70
71 void ExpectSortKey(TaskPriority expected_priority,
72 TimeTicks expected_sequenced_time,
73 const SequenceSortKey& actual_sort_key) {
74 EXPECT_EQ(expected_priority, actual_sort_key.priority);
75 EXPECT_EQ(expected_sequenced_time, actual_sort_key.next_task_sequenced_time);
76 }
77
78 } // namespace 71 } // namespace
79 72
80 TEST_F(TaskSchedulerSequenceTest, PushPopPeek) { 73 TEST_F(TaskSchedulerSequenceTest, PushPopPeek) {
81 scoped_refptr<Sequence> sequence(new Sequence); 74 scoped_refptr<Sequence> sequence(new Sequence);
82 75
83 // Push task A in the sequence. Its sequenced time should be updated and it 76 // Push task A in the sequence. Its sequenced time should be updated and it
84 // should be in front of the sequence. 77 // should be in front of the sequence.
85 EXPECT_TRUE(sequence->PushTask(std::move(task_a_owned_))); 78 EXPECT_TRUE(sequence->PushTask(std::move(task_a_owned_)));
86 EXPECT_FALSE(task_a_->sequenced_time.is_null()); 79 EXPECT_FALSE(task_a_->sequenced_time.is_null());
87 EXPECT_EQ(task_a_, sequence->PeekTask()); 80 EXPECT_EQ(task_a_, sequence->PeekTask());
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
126 EXPECT_TRUE(sequence->PopTask()); 119 EXPECT_TRUE(sequence->PopTask());
127 EXPECT_EQ(nullptr, sequence->PeekTask()); 120 EXPECT_EQ(nullptr, sequence->PeekTask());
128 } 121 }
129 122
130 TEST_F(TaskSchedulerSequenceTest, GetSortKey) { 123 TEST_F(TaskSchedulerSequenceTest, GetSortKey) {
131 scoped_refptr<Sequence> sequence(new Sequence); 124 scoped_refptr<Sequence> sequence(new Sequence);
132 125
133 // Push task A in the sequence. The highest priority is from task A 126 // Push task A in the sequence. The highest priority is from task A
134 // (BACKGROUND). Task A is in front of the sequence. 127 // (BACKGROUND). Task A is in front of the sequence.
135 sequence->PushTask(std::move(task_a_owned_)); 128 sequence->PushTask(std::move(task_a_owned_));
136 ExpectSortKey(TaskPriority::BACKGROUND, task_a_->sequenced_time, 129 EXPECT_EQ(SequenceSortKey(TaskPriority::BACKGROUND, task_a_->sequenced_time),
137 sequence->GetSortKey()); 130 sequence->GetSortKey());
138 131
139 // Push task B in the sequence. The highest priority is from task B 132 // Push task B in the sequence. The highest priority is from task B
140 // (USER_VISIBLE). Task A is still in front of the sequence. 133 // (USER_VISIBLE). Task A is still in front of the sequence.
141 sequence->PushTask(std::move(task_b_owned_)); 134 sequence->PushTask(std::move(task_b_owned_));
142 ExpectSortKey(TaskPriority::USER_VISIBLE, task_a_->sequenced_time, 135 EXPECT_EQ(
143 sequence->GetSortKey()); 136 SequenceSortKey(TaskPriority::USER_VISIBLE, task_a_->sequenced_time),
137 sequence->GetSortKey());
144 138
145 // Push task C in the sequence. The highest priority is from task C 139 // Push task C in the sequence. The highest priority is from task C
146 // (USER_BLOCKING). Task A is still in front of the sequence. 140 // (USER_BLOCKING). Task A is still in front of the sequence.
147 sequence->PushTask(std::move(task_c_owned_)); 141 sequence->PushTask(std::move(task_c_owned_));
148 ExpectSortKey(TaskPriority::USER_BLOCKING, task_a_->sequenced_time, 142 EXPECT_EQ(
149 sequence->GetSortKey()); 143 SequenceSortKey(TaskPriority::USER_BLOCKING, task_a_->sequenced_time),
144 sequence->GetSortKey());
150 145
151 // Push task D in the sequence. The highest priority is from tasks C/D 146 // Push task D in the sequence. The highest priority is from tasks C/D
152 // (USER_BLOCKING). Task A is still in front of the sequence. 147 // (USER_BLOCKING). Task A is still in front of the sequence.
153 sequence->PushTask(std::move(task_d_owned_)); 148 sequence->PushTask(std::move(task_d_owned_));
154 ExpectSortKey(TaskPriority::USER_BLOCKING, task_a_->sequenced_time, 149 EXPECT_EQ(
155 sequence->GetSortKey()); 150 SequenceSortKey(TaskPriority::USER_BLOCKING, task_a_->sequenced_time),
151 sequence->GetSortKey());
156 152
157 // Pop task A. The highest priority is still USER_BLOCKING. The task in front 153 // Pop task A. The highest priority is still USER_BLOCKING. The task in front
158 // of the sequence is now task B. 154 // of the sequence is now task B.
159 sequence->PopTask(); 155 sequence->PopTask();
160 ExpectSortKey(TaskPriority::USER_BLOCKING, task_b_->sequenced_time, 156 EXPECT_EQ(
161 sequence->GetSortKey()); 157 SequenceSortKey(TaskPriority::USER_BLOCKING, task_b_->sequenced_time),
158 sequence->GetSortKey());
162 159
163 // Pop task B. The highest priority is still USER_BLOCKING. The task in front 160 // Pop task B. The highest priority is still USER_BLOCKING. The task in front
164 // of the sequence is now task C. 161 // of the sequence is now task C.
165 sequence->PopTask(); 162 sequence->PopTask();
166 ExpectSortKey(TaskPriority::USER_BLOCKING, task_c_->sequenced_time, 163 EXPECT_EQ(
167 sequence->GetSortKey()); 164 SequenceSortKey(TaskPriority::USER_BLOCKING, task_c_->sequenced_time),
165 sequence->GetSortKey());
168 166
169 // Pop task C. The highest priority is still USER_BLOCKING. The task in front 167 // Pop task C. The highest priority is still USER_BLOCKING. The task in front
170 // of the sequence is now task D. 168 // of the sequence is now task D.
171 sequence->PopTask(); 169 sequence->PopTask();
172 ExpectSortKey(TaskPriority::USER_BLOCKING, task_d_->sequenced_time, 170 EXPECT_EQ(
173 sequence->GetSortKey()); 171 SequenceSortKey(TaskPriority::USER_BLOCKING, task_d_->sequenced_time),
172 sequence->GetSortKey());
174 173
175 // Push task E in the sequence. The highest priority is still USER_BLOCKING. 174 // Push task E in the sequence. The highest priority is still USER_BLOCKING.
176 // The task in front of the sequence is still task D. 175 // The task in front of the sequence is still task D.
177 sequence->PushTask(std::move(task_e_owned_)); 176 sequence->PushTask(std::move(task_e_owned_));
178 ExpectSortKey(TaskPriority::USER_BLOCKING, task_d_->sequenced_time, 177 EXPECT_EQ(
179 sequence->GetSortKey()); 178 SequenceSortKey(TaskPriority::USER_BLOCKING, task_d_->sequenced_time),
179 sequence->GetSortKey());
180 180
181 // Pop task D. The highest priority is now from task E (BACKGROUND). The 181 // Pop task D. The highest priority is now from task E (BACKGROUND). The
182 // task in front of the sequence is now task E. 182 // task in front of the sequence is now task E.
183 sequence->PopTask(); 183 sequence->PopTask();
184 ExpectSortKey(TaskPriority::BACKGROUND, task_e_->sequenced_time, 184 EXPECT_EQ(SequenceSortKey(TaskPriority::BACKGROUND, task_e_->sequenced_time),
185 sequence->GetSortKey()); 185 sequence->GetSortKey());
186 } 186 }
187 187
188 } // namespace internal 188 } // namespace internal
189 } // namespace base 189 } // namespace base
OLDNEW
« no previous file with comments | « base/task_scheduler/sequence_sort_key_unittest.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698