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

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

Issue 17362002: cc: Remove FakeThread, use SingleThreadTaskRunner in scheduling classes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rm-fakethread: rebase Created 7 years, 6 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 | Annotate | Revision Log
« no previous file with comments | « cc/resources/resource_update_controller.cc ('k') | cc/scheduler/delay_based_time_source.h » ('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 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 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/resource_update_controller.h" 5 #include "cc/resources/resource_update_controller.h"
6 6
7 #include "base/test/test_simple_task_runner.h"
7 #include "cc/resources/prioritized_resource_manager.h" 8 #include "cc/resources/prioritized_resource_manager.h"
8 #include "cc/test/fake_output_surface.h" 9 #include "cc/test/fake_output_surface.h"
9 #include "cc/test/fake_proxy.h" 10 #include "cc/test/fake_proxy.h"
10 #include "cc/test/scheduler_test_common.h" 11 #include "cc/test/scheduler_test_common.h"
11 #include "cc/test/test_web_graphics_context_3d.h" 12 #include "cc/test/test_web_graphics_context_3d.h"
12 #include "cc/test/tiled_layer_test_common.h" 13 #include "cc/test/tiled_layer_test_common.h"
13 #include "cc/trees/single_thread_proxy.h" // For DebugScopedSetImplThread 14 #include "cc/trees/single_thread_proxy.h" // For DebugScopedSetImplThread
14 #include "testing/gtest/include/gtest/gtest.h" 15 #include "testing/gtest/include/gtest/gtest.h"
15 #include "third_party/khronos/GLES2/gl2ext.h" 16 #include "third_party/khronos/GLES2/gl2ext.h"
16 17
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
173 } 174 }
174 175
175 void SetMaxUploadCountPerUpdate(int count) { 176 void SetMaxUploadCountPerUpdate(int count) {
176 max_upload_count_per_update_ = count; 177 max_upload_count_per_update_ = count;
177 } 178 }
178 179
179 void UpdateTextures() { 180 void UpdateTextures() {
180 DebugScopedSetImplThreadAndMainThreadBlocked 181 DebugScopedSetImplThreadAndMainThreadBlocked
181 impl_thread_and_main_thread_blocked(&proxy_); 182 impl_thread_and_main_thread_blocked(&proxy_);
182 scoped_ptr<ResourceUpdateController> update_controller = 183 scoped_ptr<ResourceUpdateController> update_controller =
183 ResourceUpdateController::Create( 184 ResourceUpdateController::Create(NULL,
184 NULL, proxy_.ImplThread(), queue_.Pass(), resource_provider_.get()); 185 NULL,
186 queue_.Pass(),
187 resource_provider_.get());
185 update_controller->Finalize(); 188 update_controller->Finalize();
186 } 189 }
187 190
188 void MakeQueryResultAvailable() { query_results_available_++; } 191 void MakeQueryResultAvailable() { query_results_available_++; }
189 192
190 protected: 193 protected:
191 // Classes required to interact and test the ResourceUpdateController 194 // Classes required to interact and test the ResourceUpdateController
192 FakeProxy proxy_; 195 FakeProxy proxy_;
193 scoped_ptr<OutputSurface> output_surface_; 196 scoped_ptr<OutputSurface> output_surface_;
194 scoped_ptr<ResourceProvider> resource_provider_; 197 scoped_ptr<ResourceProvider> resource_provider_;
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
319 UpdateTextures(); 322 UpdateTextures();
320 323
321 EXPECT_EQ(full_upload_flush_multipler + partial_upload_flush_multipler, 324 EXPECT_EQ(full_upload_flush_multipler + partial_upload_flush_multipler,
322 num_total_flushes_); 325 num_total_flushes_);
323 EXPECT_EQ(full_count + partial_count, num_total_uploads_); 326 EXPECT_EQ(full_count + partial_count, num_total_uploads_);
324 EXPECT_EQ(0, num_dangling_uploads_) 327 EXPECT_EQ(0, num_dangling_uploads_)
325 << "Last upload wasn't followed by a flush."; 328 << "Last upload wasn't followed by a flush.";
326 } 329 }
327 330
328 class FakeResourceUpdateControllerClient 331 class FakeResourceUpdateControllerClient
329 : public cc::ResourceUpdateControllerClient { 332 : public ResourceUpdateControllerClient {
330 public: 333 public:
331 FakeResourceUpdateControllerClient() { Reset(); } 334 FakeResourceUpdateControllerClient() { Reset(); }
332 void Reset() { ready_to_finalize_called_ = false; } 335 void Reset() { ready_to_finalize_called_ = false; }
333 bool ReadyToFinalizeCalled() const { return ready_to_finalize_called_; } 336 bool ReadyToFinalizeCalled() const { return ready_to_finalize_called_; }
334 337
335 virtual void ReadyToFinalizeTextureUpdates() OVERRIDE { 338 virtual void ReadyToFinalizeTextureUpdates() OVERRIDE {
336 ready_to_finalize_called_ = true; 339 ready_to_finalize_called_ = true;
337 } 340 }
338 341
339 protected: 342 protected:
340 bool ready_to_finalize_called_; 343 bool ready_to_finalize_called_;
341 }; 344 };
342 345
343 class FakeResourceUpdateController : public cc::ResourceUpdateController { 346 class FakeResourceUpdateController : public ResourceUpdateController {
344 public: 347 public:
345 static scoped_ptr<FakeResourceUpdateController> Create( 348 static scoped_ptr<FakeResourceUpdateController> Create(
346 cc::ResourceUpdateControllerClient* client, cc::Thread* thread, 349 ResourceUpdateControllerClient* client,
350 base::TestSimpleTaskRunner* task_runner,
347 scoped_ptr<ResourceUpdateQueue> queue, 351 scoped_ptr<ResourceUpdateQueue> queue,
348 ResourceProvider* resource_provider) { 352 ResourceProvider* resource_provider) {
349 return make_scoped_ptr(new FakeResourceUpdateController( 353 return make_scoped_ptr(new FakeResourceUpdateController(
350 client, thread, queue.Pass(), resource_provider)); 354 client, task_runner, queue.Pass(), resource_provider));
351 } 355 }
352 356
353 void SetNow(base::TimeTicks time) { now_ = time; } 357 void SetNow(base::TimeTicks time) { now_ = time; }
354 virtual base::TimeTicks Now() const OVERRIDE { return now_; } 358 virtual base::TimeTicks Now() const OVERRIDE { return now_; }
355 void SetUpdateMoreTexturesTime(base::TimeDelta time) { 359 void SetUpdateMoreTexturesTime(base::TimeDelta time) {
356 update_more_textures_time_ = time; 360 update_more_textures_time_ = time;
357 } 361 }
358 virtual base::TimeDelta UpdateMoreTexturesTime() const OVERRIDE { 362 virtual base::TimeDelta UpdateMoreTexturesTime() const OVERRIDE {
359 return update_more_textures_time_; 363 return update_more_textures_time_;
360 } 364 }
361 void SetUpdateMoreTexturesSize(size_t size) { 365 void SetUpdateMoreTexturesSize(size_t size) {
362 update_more_textures_size_ = size; 366 update_more_textures_size_ = size;
363 } 367 }
364 virtual size_t UpdateMoreTexturesSize() const OVERRIDE { 368 virtual size_t UpdateMoreTexturesSize() const OVERRIDE {
365 return update_more_textures_size_; 369 return update_more_textures_size_;
366 } 370 }
367 371
368 protected: 372 protected:
369 FakeResourceUpdateController(cc::ResourceUpdateControllerClient* client, 373 FakeResourceUpdateController(ResourceUpdateControllerClient* client,
370 cc::Thread* thread, 374 base::TestSimpleTaskRunner* task_runner,
371 scoped_ptr<ResourceUpdateQueue> queue, 375 scoped_ptr<ResourceUpdateQueue> queue,
372 ResourceProvider* resource_provider) 376 ResourceProvider* resource_provider)
373 : cc::ResourceUpdateController( 377 : ResourceUpdateController(
374 client, thread, queue.Pass(), resource_provider), 378 client, task_runner, queue.Pass(), resource_provider),
375 update_more_textures_size_(0) {} 379 update_more_textures_size_(0) {}
376 380
377 base::TimeTicks now_; 381 base::TimeTicks now_;
378 base::TimeDelta update_more_textures_time_; 382 base::TimeDelta update_more_textures_time_;
379 size_t update_more_textures_size_; 383 size_t update_more_textures_size_;
380 }; 384 };
381 385
382 static void RunPendingTask(FakeThread* thread, 386 static void RunPendingTask(base::TestSimpleTaskRunner* task_runner,
383 FakeResourceUpdateController* controller) { 387 FakeResourceUpdateController* controller) {
384 EXPECT_TRUE(thread->HasPendingTask()); 388 EXPECT_TRUE(task_runner->HasPendingTask());
385 controller->SetNow(controller->Now() + base::TimeDelta::FromMilliseconds( 389 controller->SetNow(controller->Now() + task_runner->NextPendingTaskDelay());
386 thread->PendingDelayMs())); 390 task_runner->RunPendingTasks();
387 thread->RunPendingTask();
388 } 391 }
389 392
390 TEST_F(ResourceUpdateControllerTest, UpdateMoreTextures) { 393 TEST_F(ResourceUpdateControllerTest, UpdateMoreTextures) {
391 FakeResourceUpdateControllerClient client; 394 FakeResourceUpdateControllerClient client;
392 FakeThread thread; 395 scoped_refptr<base::TestSimpleTaskRunner> task_runner =
396 new base::TestSimpleTaskRunner;
393 397
394 SetMaxUploadCountPerUpdate(1); 398 SetMaxUploadCountPerUpdate(1);
395 AppendFullUploadsToUpdateQueue(3); 399 AppendFullUploadsToUpdateQueue(3);
396 AppendPartialUploadsToUpdateQueue(0); 400 AppendPartialUploadsToUpdateQueue(0);
397 401
398 DebugScopedSetImplThreadAndMainThreadBlocked 402 DebugScopedSetImplThreadAndMainThreadBlocked
399 impl_thread_and_main_thread_blocked(&proxy_); 403 impl_thread_and_main_thread_blocked(&proxy_);
400 scoped_ptr<FakeResourceUpdateController> controller( 404 scoped_ptr<FakeResourceUpdateController> controller(
401 FakeResourceUpdateController::Create(&client, &thread, queue_.Pass(), 405 FakeResourceUpdateController::Create(&client,
406 task_runner.get(),
407 queue_.Pass(),
402 resource_provider_.get())); 408 resource_provider_.get()));
403 409
404 controller->SetNow(controller->Now() + base::TimeDelta::FromMilliseconds(1)); 410 controller->SetNow(controller->Now() + base::TimeDelta::FromMilliseconds(1));
405 controller->SetUpdateMoreTexturesTime(base::TimeDelta::FromMilliseconds(100)); 411 controller->SetUpdateMoreTexturesTime(base::TimeDelta::FromMilliseconds(100));
406 controller->SetUpdateMoreTexturesSize(1); 412 controller->SetUpdateMoreTexturesSize(1);
407 // Not enough time for any updates. 413 // Not enough time for any updates.
408 controller->PerformMoreUpdates(controller->Now() + 414 controller->PerformMoreUpdates(controller->Now() +
409 base::TimeDelta::FromMilliseconds(90)); 415 base::TimeDelta::FromMilliseconds(90));
410 EXPECT_FALSE(thread.HasPendingTask()); 416 EXPECT_FALSE(task_runner->HasPendingTask());
411 417
412 controller->SetUpdateMoreTexturesTime(base::TimeDelta::FromMilliseconds(100)); 418 controller->SetUpdateMoreTexturesTime(base::TimeDelta::FromMilliseconds(100));
413 controller->SetUpdateMoreTexturesSize(1); 419 controller->SetUpdateMoreTexturesSize(1);
414 // Only enough time for 1 update. 420 // Only enough time for 1 update.
415 controller->PerformMoreUpdates(controller->Now() + 421 controller->PerformMoreUpdates(controller->Now() +
416 base::TimeDelta::FromMilliseconds(120)); 422 base::TimeDelta::FromMilliseconds(120));
417 EXPECT_FALSE(thread.HasPendingTask()); 423 EXPECT_FALSE(task_runner->HasPendingTask());
418 EXPECT_EQ(1, num_total_uploads_); 424 EXPECT_EQ(1, num_total_uploads_);
419 425
420 // Complete one upload. 426 // Complete one upload.
421 MakeQueryResultAvailable(); 427 MakeQueryResultAvailable();
422 428
423 controller->SetUpdateMoreTexturesTime(base::TimeDelta::FromMilliseconds(100)); 429 controller->SetUpdateMoreTexturesTime(base::TimeDelta::FromMilliseconds(100));
424 controller->SetUpdateMoreTexturesSize(1); 430 controller->SetUpdateMoreTexturesSize(1);
425 // Enough time for 2 updates. 431 // Enough time for 2 updates.
426 controller->PerformMoreUpdates(controller->Now() + 432 controller->PerformMoreUpdates(controller->Now() +
427 base::TimeDelta::FromMilliseconds(220)); 433 base::TimeDelta::FromMilliseconds(220));
428 RunPendingTask(&thread, controller.get()); 434 RunPendingTask(task_runner.get(), controller.get());
429 EXPECT_FALSE(thread.HasPendingTask()); 435 EXPECT_FALSE(task_runner->HasPendingTask());
430 EXPECT_TRUE(client.ReadyToFinalizeCalled()); 436 EXPECT_TRUE(client.ReadyToFinalizeCalled());
431 EXPECT_EQ(3, num_total_uploads_); 437 EXPECT_EQ(3, num_total_uploads_);
432 } 438 }
433 439
434 TEST_F(ResourceUpdateControllerTest, NoMoreUpdates) { 440 TEST_F(ResourceUpdateControllerTest, NoMoreUpdates) {
435 FakeResourceUpdateControllerClient client; 441 FakeResourceUpdateControllerClient client;
436 FakeThread thread; 442 scoped_refptr<base::TestSimpleTaskRunner> task_runner =
443 new base::TestSimpleTaskRunner;
437 444
438 SetMaxUploadCountPerUpdate(1); 445 SetMaxUploadCountPerUpdate(1);
439 AppendFullUploadsToUpdateQueue(2); 446 AppendFullUploadsToUpdateQueue(2);
440 AppendPartialUploadsToUpdateQueue(0); 447 AppendPartialUploadsToUpdateQueue(0);
441 448
442 DebugScopedSetImplThreadAndMainThreadBlocked 449 DebugScopedSetImplThreadAndMainThreadBlocked
443 impl_thread_and_main_thread_blocked(&proxy_); 450 impl_thread_and_main_thread_blocked(&proxy_);
444 scoped_ptr<FakeResourceUpdateController> controller( 451 scoped_ptr<FakeResourceUpdateController> controller(
445 FakeResourceUpdateController::Create(&client, &thread, queue_.Pass(), 452 FakeResourceUpdateController::Create(&client,
453 task_runner.get(),
454 queue_.Pass(),
446 resource_provider_.get())); 455 resource_provider_.get()));
447 456
448 controller->SetNow(controller->Now() + base::TimeDelta::FromMilliseconds(1)); 457 controller->SetNow(controller->Now() + base::TimeDelta::FromMilliseconds(1));
449 controller->SetUpdateMoreTexturesTime(base::TimeDelta::FromMilliseconds(100)); 458 controller->SetUpdateMoreTexturesTime(base::TimeDelta::FromMilliseconds(100));
450 controller->SetUpdateMoreTexturesSize(1); 459 controller->SetUpdateMoreTexturesSize(1);
451 // Enough time for 3 updates but only 2 necessary. 460 // Enough time for 3 updates but only 2 necessary.
452 controller->PerformMoreUpdates(controller->Now() + 461 controller->PerformMoreUpdates(controller->Now() +
453 base::TimeDelta::FromMilliseconds(310)); 462 base::TimeDelta::FromMilliseconds(310));
454 RunPendingTask(&thread, controller.get()); 463 RunPendingTask(task_runner.get(), controller.get());
455 EXPECT_FALSE(thread.HasPendingTask()); 464 EXPECT_FALSE(task_runner->HasPendingTask());
456 EXPECT_TRUE(client.ReadyToFinalizeCalled()); 465 EXPECT_TRUE(client.ReadyToFinalizeCalled());
457 EXPECT_EQ(2, num_total_uploads_); 466 EXPECT_EQ(2, num_total_uploads_);
458 467
459 controller->SetUpdateMoreTexturesTime(base::TimeDelta::FromMilliseconds(100)); 468 controller->SetUpdateMoreTexturesTime(base::TimeDelta::FromMilliseconds(100));
460 controller->SetUpdateMoreTexturesSize(1); 469 controller->SetUpdateMoreTexturesSize(1);
461 // Enough time for updates but no more updates left. 470 // Enough time for updates but no more updates left.
462 controller->PerformMoreUpdates(controller->Now() + 471 controller->PerformMoreUpdates(controller->Now() +
463 base::TimeDelta::FromMilliseconds(310)); 472 base::TimeDelta::FromMilliseconds(310));
464 // 0-delay task used to call ReadyToFinalizeTextureUpdates(). 473 // 0-delay task used to call ReadyToFinalizeTextureUpdates().
465 RunPendingTask(&thread, controller.get()); 474 RunPendingTask(task_runner.get(), controller.get());
466 EXPECT_FALSE(thread.HasPendingTask()); 475 EXPECT_FALSE(task_runner->HasPendingTask());
467 EXPECT_TRUE(client.ReadyToFinalizeCalled()); 476 EXPECT_TRUE(client.ReadyToFinalizeCalled());
468 EXPECT_EQ(2, num_total_uploads_); 477 EXPECT_EQ(2, num_total_uploads_);
469 } 478 }
470 479
471 TEST_F(ResourceUpdateControllerTest, UpdatesCompleteInFiniteTime) { 480 TEST_F(ResourceUpdateControllerTest, UpdatesCompleteInFiniteTime) {
472 FakeResourceUpdateControllerClient client; 481 FakeResourceUpdateControllerClient client;
473 FakeThread thread; 482 scoped_refptr<base::TestSimpleTaskRunner> task_runner =
483 new base::TestSimpleTaskRunner;
474 484
475 SetMaxUploadCountPerUpdate(1); 485 SetMaxUploadCountPerUpdate(1);
476 AppendFullUploadsToUpdateQueue(2); 486 AppendFullUploadsToUpdateQueue(2);
477 AppendPartialUploadsToUpdateQueue(0); 487 AppendPartialUploadsToUpdateQueue(0);
478 488
479 DebugScopedSetImplThreadAndMainThreadBlocked 489 DebugScopedSetImplThreadAndMainThreadBlocked
480 impl_thread_and_main_thread_blocked(&proxy_); 490 impl_thread_and_main_thread_blocked(&proxy_);
481 scoped_ptr<FakeResourceUpdateController> controller( 491 scoped_ptr<FakeResourceUpdateController> controller(
482 FakeResourceUpdateController::Create(&client, &thread, queue_.Pass(), 492 FakeResourceUpdateController::Create(&client,
493 task_runner.get(),
494 queue_.Pass(),
483 resource_provider_.get())); 495 resource_provider_.get()));
484 496
485 controller->SetNow(controller->Now() + base::TimeDelta::FromMilliseconds(1)); 497 controller->SetNow(controller->Now() + base::TimeDelta::FromMilliseconds(1));
486 controller->SetUpdateMoreTexturesTime(base::TimeDelta::FromMilliseconds(500)); 498 controller->SetUpdateMoreTexturesTime(base::TimeDelta::FromMilliseconds(500));
487 controller->SetUpdateMoreTexturesSize(1); 499 controller->SetUpdateMoreTexturesSize(1);
488 500
489 for (int i = 0; i < 100; i++) { 501 for (int i = 0; i < 100; i++) {
490 if (client.ReadyToFinalizeCalled()) 502 if (client.ReadyToFinalizeCalled())
491 break; 503 break;
492 504
493 // Not enough time for any updates. 505 // Not enough time for any updates.
494 controller->PerformMoreUpdates(controller->Now() + 506 controller->PerformMoreUpdates(controller->Now() +
495 base::TimeDelta::FromMilliseconds(400)); 507 base::TimeDelta::FromMilliseconds(400));
496 508
497 if (thread.HasPendingTask()) 509 if (task_runner->HasPendingTask())
498 RunPendingTask(&thread, controller.get()); 510 RunPendingTask(task_runner.get(), controller.get());
499 } 511 }
500 512
501 EXPECT_FALSE(thread.HasPendingTask()); 513 EXPECT_FALSE(task_runner->HasPendingTask());
502 EXPECT_TRUE(client.ReadyToFinalizeCalled()); 514 EXPECT_TRUE(client.ReadyToFinalizeCalled());
503 EXPECT_EQ(2, num_total_uploads_); 515 EXPECT_EQ(2, num_total_uploads_);
504 } 516 }
505 517
506 } // namespace 518 } // namespace
507 } // namespace cc 519 } // namespace cc
OLDNEW
« no previous file with comments | « cc/resources/resource_update_controller.cc ('k') | cc/scheduler/delay_based_time_source.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698