OLD | NEW |
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 503 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
514 EXPECT_LE(m_numPreviousUploads, kMaxUploadsPerUpdate); | 514 EXPECT_LE(m_numPreviousUploads, kMaxUploadsPerUpdate); |
515 // Be lenient on the exact number of flushes here as well. | 515 // Be lenient on the exact number of flushes here as well. |
516 | 516 |
517 // Final sanity checks | 517 // Final sanity checks |
518 EXPECT_EQ(kFullUploads + kPartialUploads, m_numTotalUploads); | 518 EXPECT_EQ(kFullUploads + kPartialUploads, m_numTotalUploads); |
519 } | 519 } |
520 | 520 |
521 class FakeCCTextureUpdateControllerClient : public cc::CCTextureUpdateController
Client { | 521 class FakeCCTextureUpdateControllerClient : public cc::CCTextureUpdateController
Client { |
522 public: | 522 public: |
523 FakeCCTextureUpdateControllerClient() { reset(); } | 523 FakeCCTextureUpdateControllerClient() { reset(); } |
524 void reset() { m_completedCalled = false; } | 524 void reset() { m_readyToFinalizeCalled = false; } |
525 bool completedCalled() const { return m_completedCalled; } | 525 bool readyToFinalizeCalled() const { return m_readyToFinalizeCalled; } |
526 | 526 |
527 virtual void updateTexturesCompleted() OVERRIDE { m_completedCalled = true;
} | 527 virtual void readyToFinalizeTextureUpdates() OVERRIDE { m_readyToFinalizeCal
led = true; } |
528 | 528 |
529 protected: | 529 protected: |
530 bool m_completedCalled; | 530 bool m_readyToFinalizeCalled; |
531 }; | 531 }; |
532 | 532 |
533 class FakeCCTextureUpdateController : public cc::CCTextureUpdateController { | 533 class FakeCCTextureUpdateController : public cc::CCTextureUpdateController { |
534 public: | 534 public: |
535 static PassOwnPtr<FakeCCTextureUpdateController> create(cc::CCTextureUpdateC
ontrollerClient* client, cc::CCThread* thread, PassOwnPtr<CCTextureUpdateQueue>
queue, CCResourceProvider* resourceProvider, TextureCopier* copier, TextureUploa
der* uploader) | 535 static PassOwnPtr<FakeCCTextureUpdateController> create(cc::CCTextureUpdateC
ontrollerClient* client, cc::CCThread* thread, PassOwnPtr<CCTextureUpdateQueue>
queue, CCResourceProvider* resourceProvider, TextureCopier* copier, TextureUploa
der* uploader) |
536 { | 536 { |
537 return adoptPtr(new FakeCCTextureUpdateController(client, thread, queue,
resourceProvider, copier, uploader)); | 537 return adoptPtr(new FakeCCTextureUpdateController(client, thread, queue,
resourceProvider, copier, uploader)); |
538 } | 538 } |
539 | 539 |
540 void setMonotonicTimeNow(double time) { m_monotonicTimeNow = time; } | 540 void setMonotonicTimeNow(double time) { m_monotonicTimeNow = time; } |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
572 appendFullUploadsToUpdateQueue(3); | 572 appendFullUploadsToUpdateQueue(3); |
573 appendPartialUploadsToUpdateQueue(0); | 573 appendPartialUploadsToUpdateQueue(0); |
574 | 574 |
575 DebugScopedSetImplThread implThread; | 575 DebugScopedSetImplThread implThread; |
576 OwnPtr<FakeCCTextureUpdateController> controller(FakeCCTextureUpdateControll
er::create(&client, &thread, m_queue.release(), m_resourceProvider.get(), &m_cop
ier, &m_uploader)); | 576 OwnPtr<FakeCCTextureUpdateController> controller(FakeCCTextureUpdateControll
er::create(&client, &thread, m_queue.release(), m_resourceProvider.get(), &m_cop
ier, &m_uploader)); |
577 | 577 |
578 controller->setMonotonicTimeNow(0); | 578 controller->setMonotonicTimeNow(0); |
579 controller->setUpdateMoreTexturesTime(0.1); | 579 controller->setUpdateMoreTexturesTime(0.1); |
580 controller->setUpdateMoreTexturesSize(1); | 580 controller->setUpdateMoreTexturesSize(1); |
581 // Not enough time for any updates. | 581 // Not enough time for any updates. |
582 controller->updateMoreTextures(0.09); | 582 controller->performMoreUpdates(0.09); |
583 EXPECT_FALSE(thread.hasPendingTask()); | 583 EXPECT_FALSE(thread.hasPendingTask()); |
584 EXPECT_EQ(0, m_numBeginUploads); | 584 EXPECT_EQ(0, m_numBeginUploads); |
585 EXPECT_EQ(0, m_numEndUploads); | 585 EXPECT_EQ(0, m_numEndUploads); |
586 | 586 |
587 controller->setMonotonicTimeNow(0); | 587 controller->setMonotonicTimeNow(0); |
588 controller->setUpdateMoreTexturesTime(0.1); | 588 controller->setUpdateMoreTexturesTime(0.1); |
589 controller->setUpdateMoreTexturesSize(1); | 589 controller->setUpdateMoreTexturesSize(1); |
590 // Only enough time for 1 update. | 590 // Only enough time for 1 update. |
591 controller->updateMoreTextures(0.12); | 591 controller->performMoreUpdates(0.12); |
592 runPendingTask(&thread, controller.get()); | 592 runPendingTask(&thread, controller.get()); |
593 EXPECT_FALSE(thread.hasPendingTask()); | 593 EXPECT_FALSE(thread.hasPendingTask()); |
594 EXPECT_EQ(1, m_numBeginUploads); | 594 EXPECT_EQ(1, m_numBeginUploads); |
595 EXPECT_EQ(1, m_numEndUploads); | 595 EXPECT_EQ(1, m_numEndUploads); |
596 EXPECT_EQ(1, m_numTotalUploads); | 596 EXPECT_EQ(1, m_numTotalUploads); |
597 | 597 |
598 controller->setMonotonicTimeNow(0); | 598 controller->setMonotonicTimeNow(0); |
599 controller->setUpdateMoreTexturesTime(0.1); | 599 controller->setUpdateMoreTexturesTime(0.1); |
600 controller->setUpdateMoreTexturesSize(1); | 600 controller->setUpdateMoreTexturesSize(1); |
601 // Enough time for 2 updates. | 601 // Enough time for 2 updates. |
602 controller->updateMoreTextures(0.22); | 602 controller->performMoreUpdates(0.22); |
603 runPendingTask(&thread, controller.get()); | 603 runPendingTask(&thread, controller.get()); |
604 runPendingTask(&thread, controller.get()); | 604 runPendingTask(&thread, controller.get()); |
605 EXPECT_FALSE(thread.hasPendingTask()); | 605 EXPECT_FALSE(thread.hasPendingTask()); |
606 EXPECT_TRUE(client.completedCalled()); | 606 EXPECT_TRUE(client.readyToFinalizeCalled()); |
607 EXPECT_EQ(3, m_numBeginUploads); | 607 EXPECT_EQ(3, m_numBeginUploads); |
608 EXPECT_EQ(3, m_numEndUploads); | 608 EXPECT_EQ(3, m_numEndUploads); |
609 EXPECT_EQ(3, m_numTotalUploads); | 609 EXPECT_EQ(3, m_numTotalUploads); |
610 } | 610 } |
611 | 611 |
612 TEST_F(CCTextureUpdateControllerTest, NoMoreUpdates) | 612 TEST_F(CCTextureUpdateControllerTest, NoMoreUpdates) |
613 { | 613 { |
614 FakeCCTextureUpdateControllerClient client; | 614 FakeCCTextureUpdateControllerClient client; |
615 FakeCCThread thread; | 615 FakeCCThread thread; |
616 | 616 |
617 setMaxUploadCountPerUpdate(1); | 617 setMaxUploadCountPerUpdate(1); |
618 appendFullUploadsToUpdateQueue(2); | 618 appendFullUploadsToUpdateQueue(2); |
619 appendPartialUploadsToUpdateQueue(0); | 619 appendPartialUploadsToUpdateQueue(0); |
620 | 620 |
621 DebugScopedSetImplThread implThread; | 621 DebugScopedSetImplThread implThread; |
622 OwnPtr<FakeCCTextureUpdateController> controller(FakeCCTextureUpdateControll
er::create(&client, &thread, m_queue.release(), m_resourceProvider.get(), &m_cop
ier, &m_uploader)); | 622 OwnPtr<FakeCCTextureUpdateController> controller(FakeCCTextureUpdateControll
er::create(&client, &thread, m_queue.release(), m_resourceProvider.get(), &m_cop
ier, &m_uploader)); |
623 | 623 |
624 controller->setMonotonicTimeNow(0); | 624 controller->setMonotonicTimeNow(0); |
625 controller->setUpdateMoreTexturesTime(0.1); | 625 controller->setUpdateMoreTexturesTime(0.1); |
626 controller->setUpdateMoreTexturesSize(1); | 626 controller->setUpdateMoreTexturesSize(1); |
627 // Enough time for 3 updates but only 2 necessary. | 627 // Enough time for 3 updates but only 2 necessary. |
628 controller->updateMoreTextures(0.31); | 628 controller->performMoreUpdates(0.31); |
629 runPendingTask(&thread, controller.get()); | 629 runPendingTask(&thread, controller.get()); |
630 runPendingTask(&thread, controller.get()); | 630 runPendingTask(&thread, controller.get()); |
631 EXPECT_FALSE(thread.hasPendingTask()); | 631 EXPECT_FALSE(thread.hasPendingTask()); |
632 EXPECT_TRUE(client.completedCalled()); | 632 EXPECT_TRUE(client.readyToFinalizeCalled()); |
633 EXPECT_EQ(2, m_numBeginUploads); | 633 EXPECT_EQ(2, m_numBeginUploads); |
634 EXPECT_EQ(2, m_numEndUploads); | 634 EXPECT_EQ(2, m_numEndUploads); |
635 EXPECT_EQ(2, m_numTotalUploads); | 635 EXPECT_EQ(2, m_numTotalUploads); |
636 | 636 |
637 controller->setMonotonicTimeNow(0); | 637 controller->setMonotonicTimeNow(0); |
638 controller->setUpdateMoreTexturesTime(0.1); | 638 controller->setUpdateMoreTexturesTime(0.1); |
639 controller->setUpdateMoreTexturesSize(1); | 639 controller->setUpdateMoreTexturesSize(1); |
640 // Enough time for updates but no more updates left. | 640 // Enough time for updates but no more updates left. |
641 controller->updateMoreTextures(0.31); | 641 controller->performMoreUpdates(0.31); |
642 // 0-delay task used to call updateTexturesCompleted(). | 642 // 0-delay task used to call readyToFinalizeTextureUpdates(). |
643 runPendingTask(&thread, controller.get()); | 643 runPendingTask(&thread, controller.get()); |
644 EXPECT_FALSE(thread.hasPendingTask()); | 644 EXPECT_FALSE(thread.hasPendingTask()); |
645 EXPECT_TRUE(client.completedCalled()); | 645 EXPECT_TRUE(client.readyToFinalizeCalled()); |
646 EXPECT_EQ(2, m_numBeginUploads); | 646 EXPECT_EQ(2, m_numBeginUploads); |
647 EXPECT_EQ(2, m_numEndUploads); | 647 EXPECT_EQ(2, m_numEndUploads); |
648 EXPECT_EQ(2, m_numTotalUploads); | 648 EXPECT_EQ(2, m_numTotalUploads); |
649 } | 649 } |
650 | 650 |
651 TEST_F(CCTextureUpdateControllerTest, UpdatesCompleteInFiniteTime) | 651 TEST_F(CCTextureUpdateControllerTest, UpdatesCompleteInFiniteTime) |
652 { | 652 { |
653 FakeCCTextureUpdateControllerClient client; | 653 FakeCCTextureUpdateControllerClient client; |
654 FakeCCThread thread; | 654 FakeCCThread thread; |
655 | 655 |
656 setMaxUploadCountPerUpdate(1); | 656 setMaxUploadCountPerUpdate(1); |
657 appendFullUploadsToUpdateQueue(2); | 657 appendFullUploadsToUpdateQueue(2); |
658 appendPartialUploadsToUpdateQueue(0); | 658 appendPartialUploadsToUpdateQueue(0); |
659 | 659 |
660 DebugScopedSetImplThread implThread; | 660 DebugScopedSetImplThread implThread; |
661 OwnPtr<FakeCCTextureUpdateController> controller(FakeCCTextureUpdateControll
er::create(&client, &thread, m_queue.release(), m_resourceProvider.get(), &m_cop
ier, &m_uploader)); | 661 OwnPtr<FakeCCTextureUpdateController> controller(FakeCCTextureUpdateControll
er::create(&client, &thread, m_queue.release(), m_resourceProvider.get(), &m_cop
ier, &m_uploader)); |
662 | 662 |
663 controller->setMonotonicTimeNow(0); | 663 controller->setMonotonicTimeNow(0); |
664 controller->setUpdateMoreTexturesTime(0.5); | 664 controller->setUpdateMoreTexturesTime(0.5); |
665 controller->setUpdateMoreTexturesSize(1); | 665 controller->setUpdateMoreTexturesSize(1); |
666 | 666 |
667 for (int i = 0; i < 100; i++) { | 667 for (int i = 0; i < 100; i++) { |
668 if (client.completedCalled()) | 668 if (client.readyToFinalizeCalled()) |
669 break; | 669 break; |
670 | 670 |
671 // Not enough time for any updates. | 671 // Not enough time for any updates. |
672 controller->updateMoreTextures(0.4); | 672 controller->performMoreUpdates(0.4); |
673 | 673 |
674 if (thread.hasPendingTask()) | 674 if (thread.hasPendingTask()) |
675 runPendingTask(&thread, controller.get()); | 675 runPendingTask(&thread, controller.get()); |
676 } | 676 } |
677 | 677 |
678 EXPECT_FALSE(thread.hasPendingTask()); | 678 EXPECT_FALSE(thread.hasPendingTask()); |
679 EXPECT_TRUE(client.completedCalled()); | 679 EXPECT_TRUE(client.readyToFinalizeCalled()); |
680 EXPECT_EQ(2, m_numBeginUploads); | 680 EXPECT_EQ(2, m_numBeginUploads); |
681 EXPECT_EQ(2, m_numEndUploads); | 681 EXPECT_EQ(2, m_numEndUploads); |
682 EXPECT_EQ(2, m_numTotalUploads); | 682 EXPECT_EQ(2, m_numTotalUploads); |
683 } | 683 } |
684 | 684 |
685 } // namespace | 685 } // namespace |
OLD | NEW |