OLD | NEW |
---|---|
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "cc/resources/worker_pool.h" | 5 #include "cc/resources/worker_pool.h" |
6 | 6 |
7 #include <vector> | 7 #include <vector> |
8 | 8 |
9 #include "base/memory/scoped_vector.h" | |
9 #include "cc/base/completion_event.h" | 10 #include "cc/base/completion_event.h" |
10 #include "testing/gtest/include/gtest/gtest.h" | 11 #include "testing/gtest/include/gtest/gtest.h" |
11 | 12 |
12 namespace cc { | 13 namespace cc { |
13 | 14 |
14 namespace { | 15 namespace { |
16 const int kWorkerPoolCount = 3; | |
reveman
2014/01/13 18:37:21
nit: blank line before and no indent for this line
sohanjg
2014/01/14 06:21:26
Done.
| |
15 | 17 |
16 class FakeWorkerPoolTaskImpl : public internal::WorkerPoolTask { | 18 class FakeWorkerPoolTaskImpl : public internal::WorkerPoolTask { |
17 public: | 19 public: |
18 FakeWorkerPoolTaskImpl(const base::Closure& callback, | 20 FakeWorkerPoolTaskImpl(const base::Closure& callback, |
19 const base::Closure& reply) | 21 const base::Closure& reply) |
20 : callback_(callback), | 22 : callback_(callback), |
21 reply_(reply) { | 23 reply_(reply) { |
22 } | 24 } |
23 | 25 |
24 // Overridden from internal::WorkerPoolTask: | 26 // Overridden from internal::WorkerPoolTask: |
(...skipping 28 matching lines...) Expand all Loading... | |
53 dependent_count(dependent_count), | 55 dependent_count(dependent_count), |
54 priority(priority) { | 56 priority(priority) { |
55 } | 57 } |
56 | 58 |
57 base::Closure callback; | 59 base::Closure callback; |
58 base::Closure reply; | 60 base::Closure reply; |
59 base::Closure dependent; | 61 base::Closure dependent; |
60 unsigned dependent_count; | 62 unsigned dependent_count; |
61 unsigned priority; | 63 unsigned priority; |
62 }; | 64 }; |
63 FakeWorkerPool() : WorkerPool(1, "test") {} | 65 FakeWorkerPool() : WorkerPool() {} |
64 virtual ~FakeWorkerPool() {} | 66 virtual ~FakeWorkerPool() {} |
65 | 67 |
66 static scoped_ptr<FakeWorkerPool> Create() { | 68 static scoped_ptr<FakeWorkerPool> Create() { |
67 return make_scoped_ptr(new FakeWorkerPool); | 69 return make_scoped_ptr(new FakeWorkerPool); |
68 } | 70 } |
69 | 71 |
70 void ScheduleTasks(const std::vector<Task>& tasks) { | 72 void ScheduleTasks(const std::vector<Task>& tasks) { |
71 TaskVector new_tasks; | 73 TaskVector new_tasks; |
72 TaskVector new_dependents; | 74 TaskVector new_dependents; |
73 TaskGraph new_graph; | 75 TaskGraph new_graph; |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
137 DISALLOW_COPY_AND_ASSIGN(FakeWorkerPool); | 139 DISALLOW_COPY_AND_ASSIGN(FakeWorkerPool); |
138 }; | 140 }; |
139 | 141 |
140 class WorkerPoolTest : public testing::Test { | 142 class WorkerPoolTest : public testing::Test { |
141 public: | 143 public: |
142 WorkerPoolTest() {} | 144 WorkerPoolTest() {} |
143 virtual ~WorkerPoolTest() {} | 145 virtual ~WorkerPoolTest() {} |
144 | 146 |
145 // Overridden from testing::Test: | 147 // Overridden from testing::Test: |
146 virtual void SetUp() OVERRIDE { | 148 virtual void SetUp() OVERRIDE { |
147 worker_pool_ = FakeWorkerPool::Create(); | 149 for (int i = 0; i < kWorkerPoolCount; i++) |
reveman
2014/01/13 18:37:21
nit: ++i instead for consistency
| |
150 worker_pools_.push_back(FakeWorkerPool::Create().release()); | |
148 } | 151 } |
149 virtual void TearDown() OVERRIDE { | 152 virtual void TearDown() OVERRIDE { |
150 worker_pool_->Shutdown(); | 153 for (ScopedVector<FakeWorkerPool>::iterator i = |
151 worker_pool_->CheckForCompletedTasks(); | 154 worker_pools_.begin(); i != worker_pools_.end(); ++i) { |
reveman
2014/01/13 18:37:21
There are some style problems here but maybe bette
sohanjg
2014/01/14 06:21:26
Done.
| |
155 (*i)->Shutdown(); | |
156 (*i)->CheckForCompletedTasks(); | |
157 } | |
152 } | 158 } |
153 | 159 |
154 void ResetIds() { | 160 void ResetIds() { |
155 run_task_ids_.clear(); | 161 for (int i = 0; i < kWorkerPoolCount; i++) { |
reveman
2014/01/13 18:37:21
nit: ++i instead
sohanjg
2014/01/14 06:21:26
Done.
| |
156 on_task_completed_ids_.clear(); | 162 run_task_ids_[i].clear(); |
163 on_task_completed_ids_[i].clear(); | |
164 } | |
157 } | 165 } |
158 | 166 |
159 void RunAllTasks() { | 167 void RunAllTasksforWorkerPool(int worker_pool_index) { |
160 worker_pool_->WaitForTasksToComplete(); | 168 worker_pools_[worker_pool_index]->WaitForTasksToComplete(); |
161 worker_pool_->CheckForCompletedTasks(); | 169 worker_pools_[worker_pool_index]->CheckForCompletedTasks(); |
162 } | 170 } |
163 | 171 |
164 FakeWorkerPool* worker_pool() { | 172 FakeWorkerPool* worker_pool(int worker_pool_index) { |
165 return worker_pool_.get(); | 173 return worker_pools_[worker_pool_index]; |
166 } | 174 } |
167 | 175 |
168 void RunTask(unsigned id) { | 176 void RunTask(int worker_pool_index, unsigned id) { |
169 run_task_ids_.push_back(id); | 177 run_task_ids_[worker_pool_index].push_back(id); |
170 } | 178 } |
171 | 179 |
172 void OnTaskCompleted(unsigned id) { | 180 void OnTaskCompleted(int worker_pool_index, unsigned id) { |
173 on_task_completed_ids_.push_back(id); | 181 on_task_completed_ids_[worker_pool_index].push_back(id); |
174 } | 182 } |
175 | 183 |
176 const std::vector<unsigned>& run_task_ids() { | 184 const std::vector<unsigned>& run_task_ids(int worker_pool_index) { |
177 return run_task_ids_; | 185 return run_task_ids_[worker_pool_index]; |
178 } | 186 } |
179 | 187 |
180 const std::vector<unsigned>& on_task_completed_ids() { | 188 const std::vector<unsigned>& on_task_completed_ids(int worker_pool_index) { |
181 return on_task_completed_ids_; | 189 return on_task_completed_ids_[worker_pool_index]; |
182 } | 190 } |
183 | 191 |
184 private: | 192 private: |
185 scoped_ptr<FakeWorkerPool> worker_pool_; | 193 ScopedVector<FakeWorkerPool> worker_pools_; |
186 std::vector<unsigned> run_task_ids_; | 194 std::vector<unsigned> run_task_ids_[kWorkerPoolCount]; |
187 std::vector<unsigned> on_task_completed_ids_; | 195 std::vector<unsigned> on_task_completed_ids_[kWorkerPoolCount]; |
188 }; | 196 }; |
189 | 197 |
190 TEST_F(WorkerPoolTest, Basic) { | 198 TEST_F(WorkerPoolTest, Basic) { |
reveman
2014/01/13 18:37:21
Please avoid changing the logic and use a number o
sohanjg
2014/01/14 06:21:26
Done.
| |
191 EXPECT_EQ(0u, run_task_ids().size()); | 199 EXPECT_EQ(0u, run_task_ids(0).size()); |
192 EXPECT_EQ(0u, on_task_completed_ids().size()); | 200 EXPECT_EQ(0u, on_task_completed_ids(0).size()); |
201 EXPECT_EQ(0u, run_task_ids(1).size()); | |
202 EXPECT_EQ(0u, on_task_completed_ids(1).size()); | |
203 EXPECT_EQ(0u, run_task_ids(2).size()); | |
204 EXPECT_EQ(0u, on_task_completed_ids(2).size()); | |
193 | 205 |
194 worker_pool()->ScheduleTasks( | 206 worker_pool(0)->ScheduleTasks( |
195 std::vector<FakeWorkerPool::Task>( | 207 std::vector<FakeWorkerPool::Task>( |
196 1, | 208 1, |
197 FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, | 209 FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, |
198 base::Unretained(this), | 210 base::Unretained(this), |
211 0, | |
199 0u), | 212 0u), |
200 base::Bind(&WorkerPoolTest::OnTaskCompleted, | 213 base::Bind(&WorkerPoolTest::OnTaskCompleted, |
201 base::Unretained(this), | 214 base::Unretained(this), |
215 0, | |
202 0u), | 216 0u), |
203 base::Closure(), | 217 base::Closure(), |
204 1u, | 218 1u, |
205 0u))); | 219 0u))); |
206 RunAllTasks(); | |
207 | 220 |
208 EXPECT_EQ(1u, run_task_ids().size()); | 221 worker_pool(1)->ScheduleTasks( |
209 EXPECT_EQ(1u, on_task_completed_ids().size()); | |
210 | |
211 worker_pool()->ScheduleTasks( | |
212 std::vector<FakeWorkerPool::Task>( | 222 std::vector<FakeWorkerPool::Task>( |
213 1, | 223 1, |
214 FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, | 224 FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, |
215 base::Unretained(this), | 225 base::Unretained(this), |
226 1, | |
216 0u), | 227 0u), |
217 base::Bind(&WorkerPoolTest::OnTaskCompleted, | 228 base::Bind(&WorkerPoolTest::OnTaskCompleted, |
218 base::Unretained(this), | 229 base::Unretained(this), |
230 1, | |
219 0u), | 231 0u), |
220 base::Bind(&WorkerPoolTest::RunTask, | 232 base::Bind(&WorkerPoolTest::RunTask, |
221 base::Unretained(this), | 233 base::Unretained(this), |
234 1, | |
222 0u), | 235 0u), |
223 1u, | 236 1u, |
224 0u))); | 237 0u))); |
225 RunAllTasks(); | |
226 | 238 |
227 EXPECT_EQ(3u, run_task_ids().size()); | 239 worker_pool(2)->ScheduleTasks( |
228 EXPECT_EQ(2u, on_task_completed_ids().size()); | |
229 | |
230 worker_pool()->ScheduleTasks( | |
231 std::vector<FakeWorkerPool::Task>( | 240 std::vector<FakeWorkerPool::Task>( |
232 1, FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, | 241 1, FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, |
233 base::Unretained(this), | 242 base::Unretained(this), |
243 2, | |
234 0u), | 244 0u), |
235 base::Bind(&WorkerPoolTest::OnTaskCompleted, | 245 base::Bind(&WorkerPoolTest::OnTaskCompleted, |
236 base::Unretained(this), | 246 base::Unretained(this), |
247 2, | |
237 0u), | 248 0u), |
238 base::Bind(&WorkerPoolTest::RunTask, | 249 base::Bind(&WorkerPoolTest::RunTask, |
239 base::Unretained(this), | 250 base::Unretained(this), |
251 2, | |
240 0u), | 252 0u), |
241 2u, | 253 2u, |
242 0u))); | 254 0u))); |
243 RunAllTasks(); | 255 RunAllTasksforWorkerPool(0); |
256 RunAllTasksforWorkerPool(1); | |
257 RunAllTasksforWorkerPool(2); | |
244 | 258 |
245 EXPECT_EQ(6u, run_task_ids().size()); | 259 EXPECT_EQ(1u, run_task_ids(0).size()); |
246 EXPECT_EQ(3u, on_task_completed_ids().size()); | 260 EXPECT_EQ(1u, on_task_completed_ids(0).size()); |
261 EXPECT_EQ(2u, run_task_ids(1).size()); | |
262 EXPECT_EQ(1u, on_task_completed_ids(1).size()); | |
263 EXPECT_EQ(3u, run_task_ids(2).size()); | |
264 EXPECT_EQ(1u, on_task_completed_ids(2).size()); | |
247 } | 265 } |
248 | 266 |
249 TEST_F(WorkerPoolTest, Dependencies) { | 267 TEST_F(WorkerPoolTest, Dependencies) { |
reveman
2014/01/13 18:37:21
Same thing with this test. Use "for" loops and don
sohanjg
2014/01/14 06:21:26
Done.
| |
250 worker_pool()->ScheduleTasks( | 268 worker_pool(0)->ScheduleTasks( |
251 std::vector<FakeWorkerPool::Task>( | 269 std::vector<FakeWorkerPool::Task>( |
252 1, FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, | 270 1, FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, |
253 base::Unretained(this), | 271 base::Unretained(this), |
272 0, | |
254 0u), | 273 0u), |
255 base::Bind(&WorkerPoolTest::OnTaskCompleted, | 274 base::Bind(&WorkerPoolTest::OnTaskCompleted, |
256 base::Unretained(this), | 275 base::Unretained(this), |
276 0, | |
257 0u), | 277 0u), |
258 base::Bind(&WorkerPoolTest::RunTask, | 278 base::Bind(&WorkerPoolTest::RunTask, |
259 base::Unretained(this), | 279 base::Unretained(this), |
280 0, | |
260 1u), | 281 1u), |
261 1u, | 282 1u, |
262 0u))); | 283 0u))); |
263 RunAllTasks(); | |
264 | 284 |
265 // Check if task ran before dependent. | 285 worker_pool(1)->ScheduleTasks( |
266 ASSERT_EQ(2u, run_task_ids().size()); | |
267 EXPECT_EQ(0u, run_task_ids()[0]); | |
268 EXPECT_EQ(1u, run_task_ids()[1]); | |
269 ASSERT_EQ(1u, on_task_completed_ids().size()); | |
270 EXPECT_EQ(0u, on_task_completed_ids()[0]); | |
271 | |
272 worker_pool()->ScheduleTasks( | |
273 std::vector<FakeWorkerPool::Task>( | 286 std::vector<FakeWorkerPool::Task>( |
274 1, FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, | 287 1, FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, |
275 base::Unretained(this), | 288 base::Unretained(this), |
289 1, | |
276 2u), | 290 2u), |
277 base::Bind(&WorkerPoolTest::OnTaskCompleted, | 291 base::Bind(&WorkerPoolTest::OnTaskCompleted, |
278 base::Unretained(this), | 292 base::Unretained(this), |
293 1, | |
279 2u), | 294 2u), |
280 base::Bind(&WorkerPoolTest::RunTask, | 295 base::Bind(&WorkerPoolTest::RunTask, |
281 base::Unretained(this), | 296 base::Unretained(this), |
297 1, | |
282 3u), | 298 3u), |
283 2u, | 299 2u, |
284 0u))); | 300 0u))); |
285 RunAllTasks(); | 301 RunAllTasksforWorkerPool(0); |
302 RunAllTasksforWorkerPool(1); | |
303 | |
304 // Check if task ran before dependent. | |
305 ASSERT_EQ(2u, run_task_ids(0).size()); | |
306 EXPECT_EQ(0u, run_task_ids(0)[0]); | |
307 EXPECT_EQ(1u, run_task_ids(0)[1]); | |
308 ASSERT_EQ(1u, on_task_completed_ids(0).size()); | |
309 EXPECT_EQ(0u, on_task_completed_ids(0)[0]); | |
286 | 310 |
287 // Task should only run once. | 311 // Task should only run once. |
288 ASSERT_EQ(5u, run_task_ids().size()); | 312 ASSERT_EQ(3u, run_task_ids(1).size()); |
289 EXPECT_EQ(2u, run_task_ids()[2]); | 313 EXPECT_EQ(2u, run_task_ids(1)[0]); |
290 EXPECT_EQ(3u, run_task_ids()[3]); | 314 EXPECT_EQ(3u, run_task_ids(1)[1]); |
291 EXPECT_EQ(3u, run_task_ids()[4]); | 315 EXPECT_EQ(3u, run_task_ids(1)[2]); |
292 ASSERT_EQ(2u, on_task_completed_ids().size()); | 316 ASSERT_EQ(1u, on_task_completed_ids(1).size()); |
293 EXPECT_EQ(2u, on_task_completed_ids()[1]); | 317 EXPECT_EQ(2u, on_task_completed_ids(1)[0]); |
294 } | 318 } |
295 | 319 |
296 TEST_F(WorkerPoolTest, Priority) { | 320 TEST_F(WorkerPoolTest, Priority) { |
reveman
2014/01/13 18:37:21
And same thing with this test. Use "for" loops and
sohanjg
2014/01/14 06:21:26
Done.
| |
297 { | 321 { |
298 FakeWorkerPool::Task tasks[] = { | 322 FakeWorkerPool::Task tasks[] = { |
299 FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, | 323 FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, |
300 base::Unretained(this), | 324 base::Unretained(this), |
325 0, | |
301 0u), | 326 0u), |
302 base::Bind(&WorkerPoolTest::OnTaskCompleted, | 327 base::Bind(&WorkerPoolTest::OnTaskCompleted, |
303 base::Unretained(this), | 328 base::Unretained(this), |
329 0, | |
304 0u), | 330 0u), |
305 base::Bind(&WorkerPoolTest::RunTask, | 331 base::Bind(&WorkerPoolTest::RunTask, |
306 base::Unretained(this), | 332 base::Unretained(this), |
333 0, | |
307 2u), | 334 2u), |
308 1u, | 335 1u, |
309 1u), // Priority 1 | 336 1u), // Priority 1 |
310 FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, | 337 FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, |
311 base::Unretained(this), | 338 base::Unretained(this), |
339 0, | |
312 1u), | 340 1u), |
313 base::Bind(&WorkerPoolTest::OnTaskCompleted, | 341 base::Bind(&WorkerPoolTest::OnTaskCompleted, |
314 base::Unretained(this), | 342 base::Unretained(this), |
343 0, | |
315 1u), | 344 1u), |
316 base::Bind(&WorkerPoolTest::RunTask, | 345 base::Bind(&WorkerPoolTest::RunTask, |
317 base::Unretained(this), | 346 base::Unretained(this), |
347 0, | |
318 3u), | 348 3u), |
319 1u, | 349 1u, |
320 0u) // Priority 0 | 350 0u) // Priority 0 |
321 }; | 351 }; |
322 worker_pool()->ScheduleTasks( | 352 worker_pool(0)->ScheduleTasks( |
323 std::vector<FakeWorkerPool::Task>(tasks, tasks + arraysize(tasks))); | 353 std::vector<FakeWorkerPool::Task>(tasks, tasks + arraysize(tasks))); |
324 } | 354 } |
325 RunAllTasks(); | |
326 | |
327 // Check if tasks ran in order of priority. | |
328 ASSERT_EQ(4u, run_task_ids().size()); | |
329 EXPECT_EQ(1u, run_task_ids()[0]); | |
330 EXPECT_EQ(3u, run_task_ids()[1]); | |
331 EXPECT_EQ(0u, run_task_ids()[2]); | |
332 EXPECT_EQ(2u, run_task_ids()[3]); | |
333 ASSERT_EQ(2u, on_task_completed_ids().size()); | |
334 EXPECT_EQ(1u, on_task_completed_ids()[0]); | |
335 EXPECT_EQ(0u, on_task_completed_ids()[1]); | |
336 | 355 |
337 ResetIds(); | 356 ResetIds(); |
338 { | 357 { |
339 std::vector<FakeWorkerPool::Task> tasks; | 358 std::vector<FakeWorkerPool::Task> tasks; |
340 tasks.push_back( | 359 tasks.push_back( |
341 FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, | 360 FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, |
342 base::Unretained(this), | 361 base::Unretained(this), |
362 1, | |
343 0u), | 363 0u), |
344 base::Bind(&WorkerPoolTest::OnTaskCompleted, | 364 base::Bind(&WorkerPoolTest::OnTaskCompleted, |
345 base::Unretained(this), | 365 base::Unretained(this), |
366 1, | |
346 0u), | 367 0u), |
347 base::Bind(&WorkerPoolTest::RunTask, | 368 base::Bind(&WorkerPoolTest::RunTask, |
348 base::Unretained(this), | 369 base::Unretained(this), |
370 1, | |
349 3u), | 371 3u), |
350 1u, // 1 dependent | 372 1u, // 1 dependent |
351 1u)); // Priority 1 | 373 1u)); // Priority 1 |
352 tasks.push_back( | 374 tasks.push_back( |
353 FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, | 375 FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, |
354 base::Unretained(this), | 376 base::Unretained(this), |
377 1, | |
355 1u), | 378 1u), |
356 base::Bind(&WorkerPoolTest::OnTaskCompleted, | 379 base::Bind(&WorkerPoolTest::OnTaskCompleted, |
357 base::Unretained(this), | 380 base::Unretained(this), |
381 1, | |
358 1u), | 382 1u), |
359 base::Bind(&WorkerPoolTest::RunTask, | 383 base::Bind(&WorkerPoolTest::RunTask, |
360 base::Unretained(this), | 384 base::Unretained(this), |
385 1, | |
361 4u), | 386 4u), |
362 2u, // 2 dependents | 387 2u, // 2 dependents |
363 1u)); // Priority 1 | 388 1u)); // Priority 1 |
364 tasks.push_back( | 389 tasks.push_back( |
365 FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, | 390 FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, |
366 base::Unretained(this), | 391 base::Unretained(this), |
392 1, | |
367 2u), | 393 2u), |
368 base::Bind(&WorkerPoolTest::OnTaskCompleted, | 394 base::Bind(&WorkerPoolTest::OnTaskCompleted, |
369 base::Unretained(this), | 395 base::Unretained(this), |
396 1, | |
370 2u), | 397 2u), |
371 base::Bind(&WorkerPoolTest::RunTask, | 398 base::Bind(&WorkerPoolTest::RunTask, |
372 base::Unretained(this), | 399 base::Unretained(this), |
400 1, | |
373 5u), | 401 5u), |
374 1u, // 1 dependent | 402 1u, // 1 dependent |
375 0u)); // Priority 0 | 403 0u)); // Priority 0 |
376 worker_pool()->ScheduleTasks(tasks); | 404 worker_pool(1)->ScheduleTasks(tasks); |
377 } | 405 } |
378 RunAllTasks(); | 406 RunAllTasksforWorkerPool(0); |
407 RunAllTasksforWorkerPool(1); | |
408 | |
409 // Check if tasks ran in order of priority. | |
410 ASSERT_EQ(4u, run_task_ids(0).size()); | |
411 EXPECT_EQ(1u, run_task_ids(0)[0]); | |
412 EXPECT_EQ(3u, run_task_ids(0)[1]); | |
413 EXPECT_EQ(0u, run_task_ids(0)[2]); | |
414 EXPECT_EQ(2u, run_task_ids(0)[3]); | |
415 ASSERT_EQ(2u, on_task_completed_ids(0).size()); | |
416 EXPECT_EQ(1u, on_task_completed_ids(0)[0]); | |
417 EXPECT_EQ(0u, on_task_completed_ids(0)[1]); | |
379 | 418 |
380 // Check if tasks ran in order of priority and that task with more | 419 // Check if tasks ran in order of priority and that task with more |
381 // dependents ran first when priority is the same. | 420 // dependents ran first when priority is the same. |
382 ASSERT_LE(3u, run_task_ids().size()); | 421 ASSERT_LE(3u, run_task_ids(1).size()); |
383 EXPECT_EQ(2u, run_task_ids()[0]); | 422 EXPECT_EQ(2u, run_task_ids(1)[0]); |
384 EXPECT_EQ(5u, run_task_ids()[1]); | 423 EXPECT_EQ(5u, run_task_ids(1)[1]); |
385 EXPECT_EQ(1u, run_task_ids()[2]); | 424 EXPECT_EQ(1u, run_task_ids(1)[2]); |
386 ASSERT_EQ(3u, on_task_completed_ids().size()); | 425 ASSERT_EQ(3u, on_task_completed_ids(1).size()); |
387 EXPECT_EQ(2u, on_task_completed_ids()[0]); | 426 EXPECT_EQ(2u, on_task_completed_ids(1)[0]); |
388 EXPECT_EQ(1u, on_task_completed_ids()[1]); | 427 EXPECT_EQ(1u, on_task_completed_ids(1)[1]); |
389 EXPECT_EQ(0u, on_task_completed_ids()[2]); | 428 EXPECT_EQ(0u, on_task_completed_ids(1)[2]); |
390 } | 429 } |
391 | 430 |
392 } // namespace | 431 } // namespace |
393 | 432 |
394 } // namespace cc | 433 } // namespace cc |
OLD | NEW |