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

Side by Side Diff: cc/CCTextureUpdateControllerTest.cpp

Issue 10933095: cc: Remove resource updates from scheduler. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Another rebase Created 8 years, 3 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/CCTextureUpdateController.cpp ('k') | cc/CCThreadProxy.cpp » ('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 "config.h" 5 #include "config.h"
6 6
7 #include "CCTextureUpdateController.h" 7 #include "CCTextureUpdateController.h"
8 8
9 #include "CCSchedulerTestCommon.h" 9 #include "CCSchedulerTestCommon.h"
10 #include "CCSingleThreadProxy.h" // For DebugScopedSetImplThread 10 #include "CCSingleThreadProxy.h" // For DebugScopedSetImplThread
(...skipping 363 matching lines...) Expand 10 before | Expand all | Expand 10 after
374 bool m_readyToFinalizeCalled; 374 bool m_readyToFinalizeCalled;
375 }; 375 };
376 376
377 class FakeCCTextureUpdateController : public cc::CCTextureUpdateController { 377 class FakeCCTextureUpdateController : public cc::CCTextureUpdateController {
378 public: 378 public:
379 static PassOwnPtr<FakeCCTextureUpdateController> create(cc::CCTextureUpdateC ontrollerClient* client, cc::CCThread* thread, PassOwnPtr<CCTextureUpdateQueue> queue, CCResourceProvider* resourceProvider, TextureUploader* uploader) 379 static PassOwnPtr<FakeCCTextureUpdateController> create(cc::CCTextureUpdateC ontrollerClient* client, cc::CCThread* thread, PassOwnPtr<CCTextureUpdateQueue> queue, CCResourceProvider* resourceProvider, TextureUploader* uploader)
380 { 380 {
381 return adoptPtr(new FakeCCTextureUpdateController(client, thread, queue, resourceProvider, uploader)); 381 return adoptPtr(new FakeCCTextureUpdateController(client, thread, queue, resourceProvider, uploader));
382 } 382 }
383 383
384 void setMonotonicTimeNow(double time) { m_monotonicTimeNow = time; }
385 virtual double monotonicTimeNow() const OVERRIDE { return m_monotonicTimeNow ; }
386 void setUpdateMoreTexturesTime(double time) { m_updateMoreTexturesTime = tim e; }
387 virtual double updateMoreTexturesTime() const OVERRIDE { return m_updateMore TexturesTime; }
388 void setUpdateMoreTexturesSize(size_t size) { m_updateMoreTexturesSize = siz e; } 384 void setUpdateMoreTexturesSize(size_t size) { m_updateMoreTexturesSize = siz e; }
389 virtual size_t updateMoreTexturesSize() const OVERRIDE { return m_updateMore TexturesSize; } 385 virtual size_t updateMoreTexturesSize() const OVERRIDE { return m_updateMore TexturesSize; }
390 386
391 protected: 387 protected:
392 FakeCCTextureUpdateController(cc::CCTextureUpdateControllerClient* client, c c::CCThread* thread, PassOwnPtr<CCTextureUpdateQueue> queue, CCResourceProvider* resourceProvider, TextureUploader* uploader) 388 FakeCCTextureUpdateController(cc::CCTextureUpdateControllerClient* client, c c::CCThread* thread, PassOwnPtr<CCTextureUpdateQueue> queue, CCResourceProvider* resourceProvider, TextureUploader* uploader)
393 : cc::CCTextureUpdateController(client, thread, queue, resourceProvider, uploader) 389 : cc::CCTextureUpdateController(client, thread, queue, resourceProvider, uploader)
394 , m_monotonicTimeNow(0)
395 , m_updateMoreTexturesTime(0)
396 , m_updateMoreTexturesSize(0) { } 390 , m_updateMoreTexturesSize(0) { }
397 391
398 double m_monotonicTimeNow;
399 double m_updateMoreTexturesTime;
400 size_t m_updateMoreTexturesSize; 392 size_t m_updateMoreTexturesSize;
401 }; 393 };
402 394
403 static void runPendingTask(FakeCCThread* thread, FakeCCTextureUpdateController* controller) 395 TEST_F(CCTextureUpdateControllerTest, OneFullUpdate)
404 {
405 EXPECT_TRUE(thread->hasPendingTask());
406 controller->setMonotonicTimeNow(controller->monotonicTimeNow() + thread->pen dingDelayMs() / 1000.0);
407 thread->runPendingTask();
408 }
409
410 TEST_F(CCTextureUpdateControllerTest, UpdateMoreTextures)
411 { 396 {
412 FakeCCTextureUpdateControllerClient client; 397 FakeCCTextureUpdateControllerClient client;
413 FakeCCThread thread; 398 FakeCCThread thread;
414 399
415 setMaxUploadCountPerUpdate(1); 400 setMaxUploadCountPerUpdate(1);
416 appendFullUploadsToUpdateQueue(3); 401 appendFullUploadsToUpdateQueue(1);
417 appendPartialUploadsToUpdateQueue(0); 402 appendPartialUploadsToUpdateQueue(0);
418 403
419 DebugScopedSetImplThread implThread; 404 DebugScopedSetImplThread implThread;
420 OwnPtr<FakeCCTextureUpdateController> controller(FakeCCTextureUpdateControll er::create(&client, &thread, m_queue.release(), m_resourceProvider.get(), &m_upl oader)); 405 OwnPtr<FakeCCTextureUpdateController> controller(FakeCCTextureUpdateControll er::create(&client, &thread, m_queue.release(), m_resourceProvider.get(), &m_upl oader));
421 406
422 controller->setMonotonicTimeNow(0);
423 controller->setUpdateMoreTexturesTime(0.1);
424 controller->setUpdateMoreTexturesSize(1); 407 controller->setUpdateMoreTexturesSize(1);
425 // Not enough time for any updates. 408 controller->start();
426 controller->performMoreUpdates(0.09); 409 EXPECT_TRUE(thread.hasPendingTask());
410 thread.runPendingTask();
427 EXPECT_FALSE(thread.hasPendingTask()); 411 EXPECT_FALSE(thread.hasPendingTask());
428 EXPECT_EQ(0, m_numBeginUploads); 412 EXPECT_TRUE(client.readyToFinalizeCalled());
429 EXPECT_EQ(0, m_numEndUploads);
430
431 controller->setMonotonicTimeNow(0);
432 controller->setUpdateMoreTexturesTime(0.1);
433 controller->setUpdateMoreTexturesSize(1);
434 // Only enough time for 1 update.
435 controller->performMoreUpdates(0.12);
436 runPendingTask(&thread, controller.get());
437 EXPECT_FALSE(thread.hasPendingTask());
438 EXPECT_EQ(1, m_numBeginUploads); 413 EXPECT_EQ(1, m_numBeginUploads);
439 EXPECT_EQ(1, m_numEndUploads); 414 EXPECT_EQ(1, m_numEndUploads);
440 EXPECT_EQ(1, m_numTotalUploads); 415 EXPECT_EQ(1, m_numTotalUploads);
441
442 controller->setMonotonicTimeNow(0);
443 controller->setUpdateMoreTexturesTime(0.1);
444 controller->setUpdateMoreTexturesSize(1);
445 // Enough time for 2 updates.
446 controller->performMoreUpdates(0.22);
447 runPendingTask(&thread, controller.get());
448 runPendingTask(&thread, controller.get());
449 EXPECT_FALSE(thread.hasPendingTask());
450 EXPECT_TRUE(client.readyToFinalizeCalled());
451 EXPECT_EQ(3, m_numBeginUploads);
452 EXPECT_EQ(3, m_numEndUploads);
453 EXPECT_EQ(3, m_numTotalUploads);
454 } 416 }
455 417
456 TEST_F(CCTextureUpdateControllerTest, NoMoreUpdates) 418 TEST_F(CCTextureUpdateControllerTest, TwoPartialUpdates)
457 { 419 {
458 FakeCCTextureUpdateControllerClient client; 420 FakeCCTextureUpdateControllerClient client;
459 FakeCCThread thread; 421 FakeCCThread thread;
460 422
461 setMaxUploadCountPerUpdate(1); 423 setMaxUploadCountPerUpdate(2);
462 appendFullUploadsToUpdateQueue(2); 424 appendFullUploadsToUpdateQueue(0);
463 appendPartialUploadsToUpdateQueue(0); 425 appendPartialUploadsToUpdateQueue(2);
464 426
465 DebugScopedSetImplThread implThread; 427 DebugScopedSetImplThread implThread;
466 OwnPtr<FakeCCTextureUpdateController> controller(FakeCCTextureUpdateControll er::create(&client, &thread, m_queue.release(), m_resourceProvider.get(), &m_upl oader)); 428 OwnPtr<FakeCCTextureUpdateController> controller(FakeCCTextureUpdateControll er::create(&client, &thread, m_queue.release(), m_resourceProvider.get(), &m_upl oader));
467 429
468 controller->setMonotonicTimeNow(0); 430 controller->setUpdateMoreTexturesSize(2);
469 controller->setUpdateMoreTexturesTime(0.1); 431 controller->start();
470 controller->setUpdateMoreTexturesSize(1); 432 EXPECT_TRUE(thread.hasPendingTask());
471 // Enough time for 3 updates but only 2 necessary. 433 thread.runPendingTask();
472 controller->performMoreUpdates(0.31); 434 EXPECT_FALSE(thread.hasPendingTask());
473 runPendingTask(&thread, controller.get()); 435 EXPECT_TRUE(client.readyToFinalizeCalled());
474 runPendingTask(&thread, controller.get()); 436 EXPECT_EQ(0, m_numBeginUploads);
437 EXPECT_EQ(0, m_numEndUploads);
438 EXPECT_EQ(0, m_numTotalUploads);
439
440 controller->finalize();
441 EXPECT_EQ(2, m_numTotalUploads);
442 }
443
444 TEST_F(CCTextureUpdateControllerTest, FourFullUpdatesAndOnePartialUpdate)
445 {
446 FakeCCTextureUpdateControllerClient client;
447 FakeCCThread thread;
448
449 setMaxUploadCountPerUpdate(2);
450 appendFullUploadsToUpdateQueue(4);
451 appendPartialUploadsToUpdateQueue(1);
452
453 DebugScopedSetImplThread implThread;
454 OwnPtr<FakeCCTextureUpdateController> controller(FakeCCTextureUpdateControll er::create(&client, &thread, m_queue.release(), m_resourceProvider.get(), &m_upl oader));
455
456 controller->setUpdateMoreTexturesSize(2);
457 controller->start();
458 EXPECT_TRUE(thread.hasPendingTask());
459 thread.runPendingTask();
460 EXPECT_TRUE(thread.hasPendingTask());
461 thread.runPendingTask();
475 EXPECT_FALSE(thread.hasPendingTask()); 462 EXPECT_FALSE(thread.hasPendingTask());
476 EXPECT_TRUE(client.readyToFinalizeCalled()); 463 EXPECT_TRUE(client.readyToFinalizeCalled());
477 EXPECT_EQ(2, m_numBeginUploads); 464 EXPECT_EQ(2, m_numBeginUploads);
478 EXPECT_EQ(2, m_numEndUploads); 465 EXPECT_EQ(2, m_numEndUploads);
479 EXPECT_EQ(2, m_numTotalUploads); 466 EXPECT_EQ(4, m_numTotalUploads);
480 467
481 controller->setMonotonicTimeNow(0); 468 controller->finalize();
482 controller->setUpdateMoreTexturesTime(0.1); 469 EXPECT_EQ(5, m_numTotalUploads);
483 controller->setUpdateMoreTexturesSize(1);
484 // Enough time for updates but no more updates left.
485 controller->performMoreUpdates(0.31);
486 // 0-delay task used to call readyToFinalizeTextureUpdates().
487 runPendingTask(&thread, controller.get());
488 EXPECT_FALSE(thread.hasPendingTask());
489 EXPECT_TRUE(client.readyToFinalizeCalled());
490 EXPECT_EQ(2, m_numBeginUploads);
491 EXPECT_EQ(2, m_numEndUploads);
492 EXPECT_EQ(2, m_numTotalUploads);
493 }
494
495 TEST_F(CCTextureUpdateControllerTest, UpdatesCompleteInFiniteTime)
496 {
497 FakeCCTextureUpdateControllerClient client;
498 FakeCCThread thread;
499
500 setMaxUploadCountPerUpdate(1);
501 appendFullUploadsToUpdateQueue(2);
502 appendPartialUploadsToUpdateQueue(0);
503
504 DebugScopedSetImplThread implThread;
505 OwnPtr<FakeCCTextureUpdateController> controller(FakeCCTextureUpdateControll er::create(&client, &thread, m_queue.release(), m_resourceProvider.get(), &m_upl oader));
506
507 controller->setMonotonicTimeNow(0);
508 controller->setUpdateMoreTexturesTime(0.5);
509 controller->setUpdateMoreTexturesSize(1);
510
511 for (int i = 0; i < 100; i++) {
512 if (client.readyToFinalizeCalled())
513 break;
514
515 // Not enough time for any updates.
516 controller->performMoreUpdates(0.4);
517
518 if (thread.hasPendingTask())
519 runPendingTask(&thread, controller.get());
520 }
521
522 EXPECT_FALSE(thread.hasPendingTask());
523 EXPECT_TRUE(client.readyToFinalizeCalled());
524 EXPECT_EQ(2, m_numBeginUploads);
525 EXPECT_EQ(2, m_numEndUploads);
526 EXPECT_EQ(2, m_numTotalUploads);
527 } 470 }
528 471
529 TEST_F(CCTextureUpdateControllerTest, ClearUploadsToEvictedResources) 472 TEST_F(CCTextureUpdateControllerTest, ClearUploadsToEvictedResources)
530 { 473 {
531 appendFullUploadsOfIndexedTextureToUpdateQueue(1, 0); 474 appendFullUploadsOfIndexedTextureToUpdateQueue(1, 0);
532 appendPartialUploadsOfIndexedTextureToUpdateQueue(1, 1); 475 appendPartialUploadsOfIndexedTextureToUpdateQueue(1, 1);
533 appendFullUploadsOfIndexedTextureToUpdateQueue(1, 2); 476 appendFullUploadsOfIndexedTextureToUpdateQueue(1, 2);
534 appendPartialUploadsOfIndexedTextureToUpdateQueue(1, 3); 477 appendPartialUploadsOfIndexedTextureToUpdateQueue(1, 3);
535 DebugScopedSetImplThread implThread; 478 DebugScopedSetImplThread implThread;
536 479
(...skipping 16 matching lines...) Expand all
553 EXPECT_EQ(0u, m_queue->fullUploadSize()); 496 EXPECT_EQ(0u, m_queue->fullUploadSize());
554 EXPECT_EQ(1u, m_queue->partialUploadSize()); 497 EXPECT_EQ(1u, m_queue->partialUploadSize());
555 498
556 m_textures[1].evictBackingResource(); 499 m_textures[1].evictBackingResource();
557 m_queue->clearUploadsToEvictedResources(); 500 m_queue->clearUploadsToEvictedResources();
558 EXPECT_EQ(0u, m_queue->fullUploadSize()); 501 EXPECT_EQ(0u, m_queue->fullUploadSize());
559 EXPECT_EQ(0u, m_queue->partialUploadSize()); 502 EXPECT_EQ(0u, m_queue->partialUploadSize());
560 } 503 }
561 504
562 } // namespace 505 } // namespace
OLDNEW
« no previous file with comments | « cc/CCTextureUpdateController.cpp ('k') | cc/CCThreadProxy.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698