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

Side by Side Diff: cc/resources/worker_pool_unittest.cc

Issue 73923003: Shared Raster Worker Threads (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Unit test updated Created 6 years, 11 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 | « cc/resources/worker_pool_perftest.cc ('k') | cc/test/fake_tile_manager.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "cc/base/completion_event.h" 9 #include "cc/base/completion_event.h"
10 #include "testing/gtest/include/gtest/gtest.h" 10 #include "testing/gtest/include/gtest/gtest.h"
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
53 dependent_count(dependent_count), 53 dependent_count(dependent_count),
54 priority(priority) { 54 priority(priority) {
55 } 55 }
56 56
57 base::Closure callback; 57 base::Closure callback;
58 base::Closure reply; 58 base::Closure reply;
59 base::Closure dependent; 59 base::Closure dependent;
60 unsigned dependent_count; 60 unsigned dependent_count;
61 unsigned priority; 61 unsigned priority;
62 }; 62 };
63 FakeWorkerPool() : WorkerPool(1, "test") {} 63 FakeWorkerPool() : WorkerPool() {}
64 virtual ~FakeWorkerPool() {} 64 virtual ~FakeWorkerPool() {}
65 65
66 static scoped_ptr<FakeWorkerPool> Create() { 66 static scoped_ptr<FakeWorkerPool> Create() {
67 return make_scoped_ptr(new FakeWorkerPool); 67 return make_scoped_ptr(new FakeWorkerPool);
68 } 68 }
69 69
70 void ScheduleTasks(const std::vector<Task>& tasks) { 70 void ScheduleTasks(const std::vector<Task>& tasks) {
71 TaskVector new_tasks; 71 TaskVector new_tasks;
72 TaskVector new_dependents; 72 TaskVector new_dependents;
73 TaskGraph new_graph; 73 TaskGraph new_graph;
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
174 } 174 }
175 175
176 const std::vector<unsigned>& run_task_ids() { 176 const std::vector<unsigned>& run_task_ids() {
177 return run_task_ids_; 177 return run_task_ids_;
178 } 178 }
179 179
180 const std::vector<unsigned>& on_task_completed_ids() { 180 const std::vector<unsigned>& on_task_completed_ids() {
181 return on_task_completed_ids_; 181 return on_task_completed_ids_;
182 } 182 }
183 183
184 unsigned find_run_task_id(unsigned prio, unsigned size) {
185 unsigned id = 9999;
186 for (unsigned i = 0; i < size; ++i) {
187 if (run_task_ids_[i] == prio)
188 id = i;
189 }
190 return id;
191 }
reveman 2014/01/10 21:22:03 not sure why you need this but it looks like you'r
sohanjg 2014/01/13 13:24:51 Done.
192
184 private: 193 private:
185 scoped_ptr<FakeWorkerPool> worker_pool_; 194 scoped_ptr<FakeWorkerPool> worker_pool_;
reveman 2014/01/10 21:22:03 why not make this a ScopedVector and add a "const
sohanjg 2014/01/13 13:24:51 Done.
186 std::vector<unsigned> run_task_ids_; 195 std::vector<unsigned> run_task_ids_;
187 std::vector<unsigned> on_task_completed_ids_; 196 std::vector<unsigned> on_task_completed_ids_;
reveman 2014/01/10 21:22:03 and maybe turn these into arrays of vectors. exist
sohanjg 2014/01/13 13:24:51 Done.
188 }; 197 };
189 198
190 TEST_F(WorkerPoolTest, Basic) { 199 TEST_F(WorkerPoolTest, Basic) {
191 EXPECT_EQ(0u, run_task_ids().size()); 200 EXPECT_EQ(0u, run_task_ids().size());
192 EXPECT_EQ(0u, on_task_completed_ids().size()); 201 EXPECT_EQ(0u, on_task_completed_ids().size());
193 202
194 worker_pool()->ScheduleTasks( 203 const int pool_size = 3;
204 scoped_ptr<FakeWorkerPool> worker_pools[pool_size];
205
206 for (int i = 0; i < pool_size ; i++)
207 worker_pools[i] = FakeWorkerPool::Create();
208
209 worker_pools[0]->ScheduleTasks(
210 std::vector<FakeWorkerPool::Task>(
211 1,
212 FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask,
213 base::Unretained(this),
214 0u),
215 base::Bind(&WorkerPoolTest::OnTaskCompleted,
216 base::Unretained(this),
217 0u),
218 base::Closure(),
219 1u,
220 0u)));
221
222 worker_pools[1]->ScheduleTasks(
195 std::vector<FakeWorkerPool::Task>( 223 std::vector<FakeWorkerPool::Task>(
196 1, 224 1,
197 FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, 225 FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask,
198 base::Unretained(this),
199 0u),
200 base::Bind(&WorkerPoolTest::OnTaskCompleted,
201 base::Unretained(this),
202 0u),
203 base::Closure(),
204 1u,
205 0u)));
206 RunAllTasks();
207
208 EXPECT_EQ(1u, run_task_ids().size());
209 EXPECT_EQ(1u, on_task_completed_ids().size());
210
211 worker_pool()->ScheduleTasks(
212 std::vector<FakeWorkerPool::Task>(
213 1,
214 FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask,
215 base::Unretained(this), 226 base::Unretained(this),
216 0u), 227 0u),
217 base::Bind(&WorkerPoolTest::OnTaskCompleted, 228 base::Bind(&WorkerPoolTest::OnTaskCompleted,
218 base::Unretained(this), 229 base::Unretained(this),
219 0u), 230 0u),
220 base::Bind(&WorkerPoolTest::RunTask, 231 base::Bind(&WorkerPoolTest::RunTask,
221 base::Unretained(this), 232 base::Unretained(this),
222 0u), 233 0u),
223 1u, 234 1u,
224 0u))); 235 0u)));
225 RunAllTasks();
226 236
227 EXPECT_EQ(3u, run_task_ids().size()); 237 worker_pools[2]->ScheduleTasks(
228 EXPECT_EQ(2u, on_task_completed_ids().size());
229
230 worker_pool()->ScheduleTasks(
231 std::vector<FakeWorkerPool::Task>( 238 std::vector<FakeWorkerPool::Task>(
232 1, FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, 239 1, FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask,
233 base::Unretained(this), 240 base::Unretained(this),
234 0u), 241 0u),
235 base::Bind(&WorkerPoolTest::OnTaskCompleted, 242 base::Bind(&WorkerPoolTest::OnTaskCompleted,
236 base::Unretained(this), 243 base::Unretained(this),
237 0u), 244 0u),
238 base::Bind(&WorkerPoolTest::RunTask, 245 base::Bind(&WorkerPoolTest::RunTask,
239 base::Unretained(this), 246 base::Unretained(this),
240 0u), 247 0u),
241 2u, 248 2u,
242 0u))); 249 0u)));
243 RunAllTasks(); 250 for (int i = 0; i < pool_size ; i++) {
251 worker_pools[i]->WaitForTasksToComplete();
252 worker_pools[i]->CheckForCompletedTasks();
253 }
244 254
245 EXPECT_EQ(6u, run_task_ids().size()); 255 EXPECT_EQ(6u, run_task_ids().size());
246 EXPECT_EQ(3u, on_task_completed_ids().size()); 256 EXPECT_EQ(3u, on_task_completed_ids().size());
247 } 257 }
248 258
249 TEST_F(WorkerPoolTest, Dependencies) { 259 TEST_F(WorkerPoolTest, Dependencies) {
250 worker_pool()->ScheduleTasks( 260 const int pool_size = 2;
261 scoped_ptr<FakeWorkerPool> worker_pools[pool_size];
262 for (int i = 0; i < pool_size ; i++)
263 worker_pools[i] = FakeWorkerPool::Create();
264
265 worker_pools[0]->ScheduleTasks(
251 std::vector<FakeWorkerPool::Task>( 266 std::vector<FakeWorkerPool::Task>(
252 1, FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, 267 1, FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask,
253 base::Unretained(this), 268 base::Unretained(this),
254 0u), 269 0u),
255 base::Bind(&WorkerPoolTest::OnTaskCompleted, 270 base::Bind(&WorkerPoolTest::OnTaskCompleted,
256 base::Unretained(this), 271 base::Unretained(this),
257 0u), 272 0u),
258 base::Bind(&WorkerPoolTest::RunTask, 273 base::Bind(&WorkerPoolTest::RunTask,
259 base::Unretained(this), 274 base::Unretained(this),
260 1u), 275 1u),
261 1u, 276 1u,
262 0u))); 277 0u)));
263 RunAllTasks();
264 278
265 // Check if task ran before dependent. 279 worker_pools[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>( 280 std::vector<FakeWorkerPool::Task>(
274 1, FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, 281 1, FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask,
275 base::Unretained(this), 282 base::Unretained(this),
276 2u), 283 2u),
277 base::Bind(&WorkerPoolTest::OnTaskCompleted, 284 base::Bind(&WorkerPoolTest::OnTaskCompleted,
278 base::Unretained(this), 285 base::Unretained(this),
279 2u), 286 2u),
280 base::Bind(&WorkerPoolTest::RunTask, 287 base::Bind(&WorkerPoolTest::RunTask,
281 base::Unretained(this), 288 base::Unretained(this),
282 3u), 289 3u),
283 2u, 290 2u,
284 0u))); 291 0u)));
285 RunAllTasks(); 292 for (int i = 0; i < pool_size ; i++) {
293 worker_pools[i]->WaitForTasksToComplete();
294 worker_pools[i]->CheckForCompletedTasks();
295 }
286 296
287 // Task should only run once. 297 // Check if task ran before dependent.
288 ASSERT_EQ(5u, run_task_ids().size()); 298 ASSERT_EQ(5u, run_task_ids().size());
289 EXPECT_EQ(2u, run_task_ids()[2]); 299 unsigned id_task = find_run_task_id(0u, run_task_ids().size());
290 EXPECT_EQ(3u, run_task_ids()[3]); 300 unsigned id_dep = find_run_task_id(1u, run_task_ids().size());
291 EXPECT_EQ(3u, run_task_ids()[4]); 301 EXPECT_EQ((id_dep-id_task) > 0, 1);
302 id_task = find_run_task_id(2u, run_task_ids().size());
303 id_dep = find_run_task_id(3u, run_task_ids().size());
304 EXPECT_EQ((id_dep-id_task) > 0, 1);
292 ASSERT_EQ(2u, on_task_completed_ids().size()); 305 ASSERT_EQ(2u, on_task_completed_ids().size());
293 EXPECT_EQ(2u, on_task_completed_ids()[1]); 306 EXPECT_EQ(2u, on_task_completed_ids()[1]);
294 } 307 }
295 308
296 TEST_F(WorkerPoolTest, Priority) { 309 TEST_F(WorkerPoolTest, Priority) {
310 const int pool_size = 4;
311 scoped_ptr<FakeWorkerPool> worker_pools[pool_size];
312 for (int i = 0; i < pool_size ; i++)
313 worker_pools[i] = FakeWorkerPool::Create();
314
297 { 315 {
298 FakeWorkerPool::Task tasks[] = { 316 FakeWorkerPool::Task tasks1[] = {
299 FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, 317 FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask,
300 base::Unretained(this), 318 base::Unretained(this),
301 0u), 319 0u),
302 base::Bind(&WorkerPoolTest::OnTaskCompleted, 320 base::Bind(&WorkerPoolTest::OnTaskCompleted,
303 base::Unretained(this), 321 base::Unretained(this),
304 0u), 322 0u),
305 base::Bind(&WorkerPoolTest::RunTask, 323 base::Bind(&WorkerPoolTest::RunTask,
306 base::Unretained(this), 324 base::Unretained(this),
307 2u), 325 2u),
308 1u, 326 1u,
309 1u), // Priority 1 327 1u), // Priority 1
310 FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, 328 FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask,
311 base::Unretained(this), 329 base::Unretained(this),
312 1u), 330 1u),
313 base::Bind(&WorkerPoolTest::OnTaskCompleted, 331 base::Bind(&WorkerPoolTest::OnTaskCompleted,
314 base::Unretained(this), 332 base::Unretained(this),
315 1u), 333 1u),
316 base::Bind(&WorkerPoolTest::RunTask, 334 base::Bind(&WorkerPoolTest::RunTask,
317 base::Unretained(this), 335 base::Unretained(this),
318 3u), 336 3u),
319 1u, 337 1u,
320 0u) // Priority 0 338 0u) // Priority 0
321 }; 339 };
322 worker_pool()->ScheduleTasks( 340 FakeWorkerPool::Task tasks2[] = {
323 std::vector<FakeWorkerPool::Task>(tasks, tasks + arraysize(tasks))); 341 FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask,
342 base::Unretained(this),
343 0u),
344 base::Bind(&WorkerPoolTest::OnTaskCompleted,
345 base::Unretained(this),
346 0u),
347 base::Bind(&WorkerPoolTest::RunTask,
348 base::Unretained(this),
349 4u),
350 1u,
351 2u), // Priority 2
352 FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask,
353 base::Unretained(this),
354 1u),
355 base::Bind(&WorkerPoolTest::OnTaskCompleted,
356 base::Unretained(this),
357 1u),
358 base::Bind(&WorkerPoolTest::RunTask,
359 base::Unretained(this),
360 5u),
361 1u,
362 3u) // Priority 3
363 };
364 worker_pools[0]->ScheduleTasks(
365 std::vector<FakeWorkerPool::Task>(tasks1, tasks1 + arraysize(tasks1)));
366 worker_pools[1]->ScheduleTasks(
367 std::vector<FakeWorkerPool::Task>(tasks2, tasks2 + arraysize(tasks2)));
324 } 368 }
325 RunAllTasks(); 369 for (int i = 0; i < 2 ; i++) {
370 worker_pools[i]->WaitForTasksToComplete();
371 worker_pools[i]->CheckForCompletedTasks();
372 }
326 373
327 // Check if tasks ran in order of priority. 374 // Check if tasks ran in order of priority.
328 ASSERT_EQ(4u, run_task_ids().size()); 375 ASSERT_EQ(8u, run_task_ids().size());
329 EXPECT_EQ(1u, run_task_ids()[0]); 376 EXPECT_EQ(1u, run_task_ids()[0]);
330 EXPECT_EQ(3u, run_task_ids()[1]); 377 EXPECT_EQ(3u, run_task_ids()[1]);
331 EXPECT_EQ(0u, run_task_ids()[2]); 378 EXPECT_EQ(0u, run_task_ids()[2]);
332 EXPECT_EQ(2u, run_task_ids()[3]); 379 EXPECT_EQ(2u, run_task_ids()[3]);
333 ASSERT_EQ(2u, on_task_completed_ids().size()); 380 EXPECT_EQ(0u, run_task_ids()[4]);
381 EXPECT_EQ(4u, run_task_ids()[5]);
382 EXPECT_EQ(1u, run_task_ids()[6]);
383 EXPECT_EQ(5u, run_task_ids()[7]);
384 ASSERT_EQ(4u, on_task_completed_ids().size());
334 EXPECT_EQ(1u, on_task_completed_ids()[0]); 385 EXPECT_EQ(1u, on_task_completed_ids()[0]);
335 EXPECT_EQ(0u, on_task_completed_ids()[1]); 386 EXPECT_EQ(0u, on_task_completed_ids()[1]);
387 EXPECT_EQ(0u, on_task_completed_ids()[2]);
388 EXPECT_EQ(1u, on_task_completed_ids()[3]);
336 389
337 ResetIds(); 390 ResetIds();
338 { 391 {
339 std::vector<FakeWorkerPool::Task> tasks; 392 std::vector<FakeWorkerPool::Task> tasks1;
340 tasks.push_back( 393 tasks1.push_back(
341 FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, 394 FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask,
342 base::Unretained(this), 395 base::Unretained(this),
343 0u), 396 0u),
344 base::Bind(&WorkerPoolTest::OnTaskCompleted, 397 base::Bind(&WorkerPoolTest::OnTaskCompleted,
345 base::Unretained(this), 398 base::Unretained(this),
346 0u), 399 0u),
347 base::Bind(&WorkerPoolTest::RunTask, 400 base::Bind(&WorkerPoolTest::RunTask,
348 base::Unretained(this), 401 base::Unretained(this),
349 3u), 402 3u),
350 1u, // 1 dependent 403 1u, // 1 dependent
351 1u)); // Priority 1 404 1u)); // Priority 1
352 tasks.push_back( 405 tasks1.push_back(
353 FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, 406 FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask,
354 base::Unretained(this), 407 base::Unretained(this),
355 1u), 408 1u),
356 base::Bind(&WorkerPoolTest::OnTaskCompleted, 409 base::Bind(&WorkerPoolTest::OnTaskCompleted,
357 base::Unretained(this), 410 base::Unretained(this),
358 1u), 411 1u),
359 base::Bind(&WorkerPoolTest::RunTask, 412 base::Bind(&WorkerPoolTest::RunTask,
360 base::Unretained(this), 413 base::Unretained(this),
361 4u), 414 4u),
362 2u, // 2 dependents 415 2u, // 2 dependents
363 1u)); // Priority 1 416 1u)); // Priority 1
364 tasks.push_back( 417 tasks1.push_back(
365 FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, 418 FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask,
366 base::Unretained(this), 419 base::Unretained(this),
367 2u), 420 2u),
368 base::Bind(&WorkerPoolTest::OnTaskCompleted, 421 base::Bind(&WorkerPoolTest::OnTaskCompleted,
369 base::Unretained(this), 422 base::Unretained(this),
370 2u), 423 2u),
371 base::Bind(&WorkerPoolTest::RunTask, 424 base::Bind(&WorkerPoolTest::RunTask,
372 base::Unretained(this), 425 base::Unretained(this),
373 5u), 426 5u),
374 1u, // 1 dependent 427 1u, // 1 dependent
375 0u)); // Priority 0 428 0u)); // Priority 0
376 worker_pool()->ScheduleTasks(tasks); 429 worker_pools[3]->ScheduleTasks(tasks1);
430
431 std::vector<FakeWorkerPool::Task> tasks2;
432 tasks2.push_back(
433 FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask,
434 base::Unretained(this),
435 5u),
436 base::Bind(&WorkerPoolTest::OnTaskCompleted,
437 base::Unretained(this),
438 5u),
439 base::Bind(&WorkerPoolTest::RunTask,
440 base::Unretained(this),
441 6u),
442 3u, // 3 dependent
443 3u)); // Priority 3
444 tasks2.push_back(
445 FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask,
446 base::Unretained(this),
447 4u),
448 base::Bind(&WorkerPoolTest::OnTaskCompleted,
449 base::Unretained(this),
450 4u),
451 base::Bind(&WorkerPoolTest::RunTask,
452 base::Unretained(this),
453 7u),
454 3u, // 3 dependents
455 2u)); // Priority 2
456 tasks2.push_back(
457 FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask,
458 base::Unretained(this),
459 3u),
460 base::Bind(&WorkerPoolTest::OnTaskCompleted,
461 base::Unretained(this),
462 3u),
463 base::Bind(&WorkerPoolTest::RunTask,
464 base::Unretained(this),
465 8u),
466 4u, // 4 dependent
467 0u)); // Priority 0
468 worker_pools[4]->ScheduleTasks(tasks2);
377 } 469 }
378 RunAllTasks(); 470 for (int i = 2; i < pool_size ; i++) {
471 worker_pools[i]->WaitForTasksToComplete();
472 worker_pools[i]->CheckForCompletedTasks();
473 }
379 474
380 // Check if tasks ran in order of priority and that task with more 475 // Check if tasks ran in order of priority and that task with more
381 // dependents ran first when priority is the same. 476 // dependents ran first when priority is the same.
382 ASSERT_LE(3u, run_task_ids().size()); 477 ASSERT_LE(6u, run_task_ids().size());
383 EXPECT_EQ(2u, run_task_ids()[0]); 478 EXPECT_EQ(3u, run_task_ids()[0]);
384 EXPECT_EQ(5u, run_task_ids()[1]); 479 EXPECT_EQ(8u, run_task_ids()[1]);
385 EXPECT_EQ(1u, run_task_ids()[2]); 480 EXPECT_EQ(2u, run_task_ids()[2]);
386 ASSERT_EQ(3u, on_task_completed_ids().size()); 481 EXPECT_EQ(5u, run_task_ids()[3]);
482 EXPECT_EQ(8u, run_task_ids()[4]);
483 EXPECT_EQ(8u, run_task_ids()[5]);
484 EXPECT_EQ(8u, run_task_ids()[6]);
485 ASSERT_EQ(6u, on_task_completed_ids().size());
387 EXPECT_EQ(2u, on_task_completed_ids()[0]); 486 EXPECT_EQ(2u, on_task_completed_ids()[0]);
388 EXPECT_EQ(1u, on_task_completed_ids()[1]); 487 EXPECT_EQ(1u, on_task_completed_ids()[1]);
389 EXPECT_EQ(0u, on_task_completed_ids()[2]); 488 EXPECT_EQ(0u, on_task_completed_ids()[2]);
489 EXPECT_EQ(3u, on_task_completed_ids()[3]);
490 EXPECT_EQ(4u, on_task_completed_ids()[4]);
491 EXPECT_EQ(5u, on_task_completed_ids()[5]);
390 } 492 }
reveman 2014/01/10 21:22:03 The way you're modifying these tests make it reall
sohanjg 2014/01/13 13:24:51 Done.
391 493
392 } // namespace 494 } // namespace
393 495
394 } // namespace cc 496 } // namespace cc
OLDNEW
« no previous file with comments | « cc/resources/worker_pool_perftest.cc ('k') | cc/test/fake_tile_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698