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

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

Issue 99553002: cc: Prevent ResourceUpdateContoller from uploading textures after lost context (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years 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/trees/layer_tree_host_impl.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 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 "base/test/test_simple_task_runner.h"
8 #include "cc/resources/prioritized_resource_manager.h" 8 #include "cc/resources/prioritized_resource_manager.h"
9 #include "cc/test/fake_output_surface.h" 9 #include "cc/test/fake_output_surface.h"
10 #include "cc/test/fake_output_surface_client.h" 10 #include "cc/test/fake_output_surface_client.h"
(...skipping 337 matching lines...) Expand 10 before | Expand all | Expand 10 after
348 static scoped_ptr<FakeResourceUpdateController> Create( 348 static scoped_ptr<FakeResourceUpdateController> Create(
349 ResourceUpdateControllerClient* client, 349 ResourceUpdateControllerClient* client,
350 base::TestSimpleTaskRunner* task_runner, 350 base::TestSimpleTaskRunner* task_runner,
351 scoped_ptr<ResourceUpdateQueue> queue, 351 scoped_ptr<ResourceUpdateQueue> queue,
352 ResourceProvider* resource_provider) { 352 ResourceProvider* resource_provider) {
353 return make_scoped_ptr(new FakeResourceUpdateController( 353 return make_scoped_ptr(new FakeResourceUpdateController(
354 client, task_runner, queue.Pass(), resource_provider)); 354 client, task_runner, queue.Pass(), resource_provider));
355 } 355 }
356 356
357 void SetNow(base::TimeTicks time) { now_ = time; } 357 void SetNow(base::TimeTicks time) { now_ = time; }
358 virtual base::TimeTicks Now() const OVERRIDE { return now_; } 358 base::TimeTicks Now() const { return now_; }
359 void SetUpdateMoreTexturesTime(base::TimeDelta time) { 359 void SetUpdateTextureTime(base::TimeDelta time) {
360 update_more_textures_time_ = time; 360 update_textures_time_ = time;
361 } 361 }
362 virtual base::TimeDelta UpdateMoreTexturesTime() const OVERRIDE { 362 virtual base::TimeTicks UpdateMoreTexturesCompletionTime() OVERRIDE {
363 return update_more_textures_time_; 363 size_t total_updates =
364 resource_provider_->NumBlockingUploads() + update_more_textures_size_;
365 return now_ + total_updates * update_textures_time_;
364 } 366 }
365 void SetUpdateMoreTexturesSize(size_t size) { 367 void SetUpdateMoreTexturesSize(size_t size) {
366 update_more_textures_size_ = size; 368 update_more_textures_size_ = size;
367 } 369 }
368 virtual size_t UpdateMoreTexturesSize() const OVERRIDE { 370 virtual size_t UpdateMoreTexturesSize() const OVERRIDE {
369 return update_more_textures_size_; 371 return update_more_textures_size_;
370 } 372 }
371 373
372 protected: 374 protected:
373 FakeResourceUpdateController(ResourceUpdateControllerClient* client, 375 FakeResourceUpdateController(ResourceUpdateControllerClient* client,
374 base::TestSimpleTaskRunner* task_runner, 376 base::TestSimpleTaskRunner* task_runner,
375 scoped_ptr<ResourceUpdateQueue> queue, 377 scoped_ptr<ResourceUpdateQueue> queue,
376 ResourceProvider* resource_provider) 378 ResourceProvider* resource_provider)
377 : ResourceUpdateController( 379 : ResourceUpdateController(
378 client, task_runner, queue.Pass(), resource_provider), 380 client, task_runner, queue.Pass(), resource_provider),
381 resource_provider_(resource_provider),
379 update_more_textures_size_(0) {} 382 update_more_textures_size_(0) {}
380 383
384 ResourceProvider* resource_provider_;
381 base::TimeTicks now_; 385 base::TimeTicks now_;
382 base::TimeDelta update_more_textures_time_; 386 base::TimeDelta update_textures_time_;
383 size_t update_more_textures_size_; 387 size_t update_more_textures_size_;
384 }; 388 };
385 389
386 static void RunPendingTask(base::TestSimpleTaskRunner* task_runner, 390 static void RunPendingTask(base::TestSimpleTaskRunner* task_runner,
387 FakeResourceUpdateController* controller) { 391 FakeResourceUpdateController* controller) {
388 EXPECT_TRUE(task_runner->HasPendingTask()); 392 EXPECT_TRUE(task_runner->HasPendingTask());
389 controller->SetNow(controller->Now() + task_runner->NextPendingTaskDelay()); 393 controller->SetNow(controller->Now() + task_runner->NextPendingTaskDelay());
390 task_runner->RunPendingTasks(); 394 task_runner->RunPendingTasks();
391 } 395 }
392 396
393 TEST_F(ResourceUpdateControllerTest, UpdateMoreTextures) { 397 TEST_F(ResourceUpdateControllerTest, UpdateMoreTextures) {
394 FakeResourceUpdateControllerClient client; 398 FakeResourceUpdateControllerClient client;
395 scoped_refptr<base::TestSimpleTaskRunner> task_runner = 399 scoped_refptr<base::TestSimpleTaskRunner> task_runner =
396 new base::TestSimpleTaskRunner; 400 new base::TestSimpleTaskRunner;
397 401
398 SetMaxUploadCountPerUpdate(1); 402 SetMaxUploadCountPerUpdate(1);
399 AppendFullUploadsToUpdateQueue(3); 403 AppendFullUploadsToUpdateQueue(3);
400 AppendPartialUploadsToUpdateQueue(0); 404 AppendPartialUploadsToUpdateQueue(0);
401 405
402 DebugScopedSetImplThreadAndMainThreadBlocked 406 DebugScopedSetImplThreadAndMainThreadBlocked
403 impl_thread_and_main_thread_blocked(&proxy_); 407 impl_thread_and_main_thread_blocked(&proxy_);
404 scoped_ptr<FakeResourceUpdateController> controller( 408 scoped_ptr<FakeResourceUpdateController> controller(
405 FakeResourceUpdateController::Create(&client, 409 FakeResourceUpdateController::Create(&client,
406 task_runner.get(), 410 task_runner.get(),
407 queue_.Pass(), 411 queue_.Pass(),
408 resource_provider_.get())); 412 resource_provider_.get()));
409 413
410 controller->SetNow(controller->Now() + base::TimeDelta::FromMilliseconds(1)); 414 controller->SetNow(controller->Now() + base::TimeDelta::FromMilliseconds(1));
411 controller->SetUpdateMoreTexturesTime(base::TimeDelta::FromMilliseconds(100)); 415 controller->SetUpdateTextureTime(base::TimeDelta::FromMilliseconds(100));
412 controller->SetUpdateMoreTexturesSize(1); 416 controller->SetUpdateMoreTexturesSize(1);
413 // Not enough time for any updates. 417 // Not enough time for any updates.
414 controller->PerformMoreUpdates(controller->Now() + 418 controller->PerformMoreUpdates(controller->Now() +
415 base::TimeDelta::FromMilliseconds(90)); 419 base::TimeDelta::FromMilliseconds(90));
416 EXPECT_FALSE(task_runner->HasPendingTask()); 420 EXPECT_FALSE(task_runner->HasPendingTask());
417 421
418 controller->SetUpdateMoreTexturesTime(base::TimeDelta::FromMilliseconds(100)); 422 controller->SetUpdateTextureTime(base::TimeDelta::FromMilliseconds(100));
419 controller->SetUpdateMoreTexturesSize(1); 423 controller->SetUpdateMoreTexturesSize(1);
420 // Only enough time for 1 update. 424 // Only enough time for 1 update.
421 controller->PerformMoreUpdates(controller->Now() + 425 controller->PerformMoreUpdates(controller->Now() +
422 base::TimeDelta::FromMilliseconds(120)); 426 base::TimeDelta::FromMilliseconds(120));
423 EXPECT_FALSE(task_runner->HasPendingTask()); 427 EXPECT_FALSE(task_runner->HasPendingTask());
424 EXPECT_EQ(1, num_total_uploads_); 428 EXPECT_EQ(1, num_total_uploads_);
425 429
426 // Complete one upload. 430 // Complete one upload.
427 MakeQueryResultAvailable(); 431 MakeQueryResultAvailable();
428 432
429 controller->SetUpdateMoreTexturesTime(base::TimeDelta::FromMilliseconds(100)); 433 controller->SetUpdateTextureTime(base::TimeDelta::FromMilliseconds(100));
430 controller->SetUpdateMoreTexturesSize(1); 434 controller->SetUpdateMoreTexturesSize(1);
431 // Enough time for 2 updates. 435 // Enough time for 2 updates.
432 controller->PerformMoreUpdates(controller->Now() + 436 controller->PerformMoreUpdates(controller->Now() +
433 base::TimeDelta::FromMilliseconds(220)); 437 base::TimeDelta::FromMilliseconds(220));
434 RunPendingTask(task_runner.get(), controller.get()); 438 RunPendingTask(task_runner.get(), controller.get());
435 EXPECT_FALSE(task_runner->HasPendingTask()); 439 EXPECT_FALSE(task_runner->HasPendingTask());
436 EXPECT_TRUE(client.ReadyToFinalizeCalled()); 440 EXPECT_TRUE(client.ReadyToFinalizeCalled());
437 EXPECT_EQ(3, num_total_uploads_); 441 EXPECT_EQ(3, num_total_uploads_);
438 } 442 }
439 443
440 TEST_F(ResourceUpdateControllerTest, NoMoreUpdates) { 444 TEST_F(ResourceUpdateControllerTest, NoMoreUpdates) {
441 FakeResourceUpdateControllerClient client; 445 FakeResourceUpdateControllerClient client;
442 scoped_refptr<base::TestSimpleTaskRunner> task_runner = 446 scoped_refptr<base::TestSimpleTaskRunner> task_runner =
443 new base::TestSimpleTaskRunner; 447 new base::TestSimpleTaskRunner;
444 448
445 SetMaxUploadCountPerUpdate(1); 449 SetMaxUploadCountPerUpdate(1);
446 AppendFullUploadsToUpdateQueue(2); 450 AppendFullUploadsToUpdateQueue(2);
447 AppendPartialUploadsToUpdateQueue(0); 451 AppendPartialUploadsToUpdateQueue(0);
448 452
449 DebugScopedSetImplThreadAndMainThreadBlocked 453 DebugScopedSetImplThreadAndMainThreadBlocked
450 impl_thread_and_main_thread_blocked(&proxy_); 454 impl_thread_and_main_thread_blocked(&proxy_);
451 scoped_ptr<FakeResourceUpdateController> controller( 455 scoped_ptr<FakeResourceUpdateController> controller(
452 FakeResourceUpdateController::Create(&client, 456 FakeResourceUpdateController::Create(&client,
453 task_runner.get(), 457 task_runner.get(),
454 queue_.Pass(), 458 queue_.Pass(),
455 resource_provider_.get())); 459 resource_provider_.get()));
456 460
457 controller->SetNow(controller->Now() + base::TimeDelta::FromMilliseconds(1)); 461 controller->SetNow(controller->Now() + base::TimeDelta::FromMilliseconds(1));
458 controller->SetUpdateMoreTexturesTime(base::TimeDelta::FromMilliseconds(100)); 462 controller->SetUpdateTextureTime(base::TimeDelta::FromMilliseconds(100));
459 controller->SetUpdateMoreTexturesSize(1); 463 controller->SetUpdateMoreTexturesSize(1);
460 // Enough time for 3 updates but only 2 necessary. 464 // Enough time for 3 updates but only 2 necessary.
461 controller->PerformMoreUpdates(controller->Now() + 465 controller->PerformMoreUpdates(controller->Now() +
462 base::TimeDelta::FromMilliseconds(310)); 466 base::TimeDelta::FromMilliseconds(310));
463 RunPendingTask(task_runner.get(), controller.get()); 467 RunPendingTask(task_runner.get(), controller.get());
464 EXPECT_FALSE(task_runner->HasPendingTask()); 468 EXPECT_FALSE(task_runner->HasPendingTask());
465 EXPECT_TRUE(client.ReadyToFinalizeCalled()); 469 EXPECT_TRUE(client.ReadyToFinalizeCalled());
466 EXPECT_EQ(2, num_total_uploads_); 470 EXPECT_EQ(2, num_total_uploads_);
467 471
468 controller->SetUpdateMoreTexturesTime(base::TimeDelta::FromMilliseconds(100)); 472 controller->SetUpdateTextureTime(base::TimeDelta::FromMilliseconds(100));
469 controller->SetUpdateMoreTexturesSize(1); 473 controller->SetUpdateMoreTexturesSize(1);
470 // Enough time for updates but no more updates left. 474 // Enough time for updates but no more updates left.
471 controller->PerformMoreUpdates(controller->Now() + 475 controller->PerformMoreUpdates(controller->Now() +
472 base::TimeDelta::FromMilliseconds(310)); 476 base::TimeDelta::FromMilliseconds(310));
473 // 0-delay task used to call ReadyToFinalizeTextureUpdates(). 477 // 0-delay task used to call ReadyToFinalizeTextureUpdates().
474 RunPendingTask(task_runner.get(), controller.get()); 478 RunPendingTask(task_runner.get(), controller.get());
475 EXPECT_FALSE(task_runner->HasPendingTask()); 479 EXPECT_FALSE(task_runner->HasPendingTask());
476 EXPECT_TRUE(client.ReadyToFinalizeCalled()); 480 EXPECT_TRUE(client.ReadyToFinalizeCalled());
477 EXPECT_EQ(2, num_total_uploads_); 481 EXPECT_EQ(2, num_total_uploads_);
478 } 482 }
479 483
480 TEST_F(ResourceUpdateControllerTest, UpdatesCompleteInFiniteTime) { 484 TEST_F(ResourceUpdateControllerTest, UpdatesCompleteInFiniteTime) {
481 FakeResourceUpdateControllerClient client; 485 FakeResourceUpdateControllerClient client;
482 scoped_refptr<base::TestSimpleTaskRunner> task_runner = 486 scoped_refptr<base::TestSimpleTaskRunner> task_runner =
483 new base::TestSimpleTaskRunner; 487 new base::TestSimpleTaskRunner;
484 488
485 SetMaxUploadCountPerUpdate(1); 489 SetMaxUploadCountPerUpdate(1);
486 AppendFullUploadsToUpdateQueue(2); 490 AppendFullUploadsToUpdateQueue(2);
487 AppendPartialUploadsToUpdateQueue(0); 491 AppendPartialUploadsToUpdateQueue(0);
488 492
489 DebugScopedSetImplThreadAndMainThreadBlocked 493 DebugScopedSetImplThreadAndMainThreadBlocked
490 impl_thread_and_main_thread_blocked(&proxy_); 494 impl_thread_and_main_thread_blocked(&proxy_);
491 scoped_ptr<FakeResourceUpdateController> controller( 495 scoped_ptr<FakeResourceUpdateController> controller(
492 FakeResourceUpdateController::Create(&client, 496 FakeResourceUpdateController::Create(&client,
493 task_runner.get(), 497 task_runner.get(),
494 queue_.Pass(), 498 queue_.Pass(),
495 resource_provider_.get())); 499 resource_provider_.get()));
496 500
497 controller->SetNow(controller->Now() + base::TimeDelta::FromMilliseconds(1)); 501 controller->SetNow(controller->Now() + base::TimeDelta::FromMilliseconds(1));
498 controller->SetUpdateMoreTexturesTime(base::TimeDelta::FromMilliseconds(500)); 502 controller->SetUpdateTextureTime(base::TimeDelta::FromMilliseconds(500));
499 controller->SetUpdateMoreTexturesSize(1); 503 controller->SetUpdateMoreTexturesSize(1);
500 504
501 for (int i = 0; i < 100; i++) { 505 for (int i = 0; i < 100; i++) {
502 if (client.ReadyToFinalizeCalled()) 506 if (client.ReadyToFinalizeCalled())
503 break; 507 break;
504 508
505 // Not enough time for any updates. 509 // Not enough time for any updates.
506 controller->PerformMoreUpdates(controller->Now() + 510 controller->PerformMoreUpdates(controller->Now() +
507 base::TimeDelta::FromMilliseconds(400)); 511 base::TimeDelta::FromMilliseconds(400));
508 512
509 if (task_runner->HasPendingTask()) 513 if (task_runner->HasPendingTask())
510 RunPendingTask(task_runner.get(), controller.get()); 514 RunPendingTask(task_runner.get(), controller.get());
511 } 515 }
512 516
513 EXPECT_FALSE(task_runner->HasPendingTask()); 517 EXPECT_FALSE(task_runner->HasPendingTask());
514 EXPECT_TRUE(client.ReadyToFinalizeCalled()); 518 EXPECT_TRUE(client.ReadyToFinalizeCalled());
515 EXPECT_EQ(2, num_total_uploads_); 519 EXPECT_EQ(2, num_total_uploads_);
516 } 520 }
517 521
518 } // namespace 522 } // namespace
519 } // namespace cc 523 } // namespace cc
OLDNEW
« no previous file with comments | « cc/resources/resource_update_controller.cc ('k') | cc/trees/layer_tree_host_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698