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 519 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
530 bool m_completedCalled; | 530 bool m_completedCalled; |
531 }; | 531 }; |
532 | 532 |
533 class FakeCCTextureUpdateController : public WebCore::CCTextureUpdateController
{ | 533 class FakeCCTextureUpdateController : public WebCore::CCTextureUpdateController
{ |
534 public: | 534 public: |
535 static PassOwnPtr<FakeCCTextureUpdateController> create(WebCore::CCTextureUp
dateControllerClient* client, WebCore::CCThread* thread, PassOwnPtr<CCTextureUpd
ateQueue> queue, CCResourceProvider* resourceProvider, TextureCopier* copier, Te
xtureUploader* uploader) | 535 static PassOwnPtr<FakeCCTextureUpdateController> create(WebCore::CCTextureUp
dateControllerClient* client, WebCore::CCThread* thread, PassOwnPtr<CCTextureUpd
ateQueue> queue, CCResourceProvider* resourceProvider, TextureCopier* copier, Te
xtureUploader* 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; } | |
541 virtual double monotonicTimeNow() const OVERRIDE { return m_monotonicTimeNow
; } | |
542 void setUpdateMoreTexturesTime(double time) { m_updateMoreTexturesTime = tim
e; } | |
543 virtual double updateMoreTexturesTime() const OVERRIDE { return m_updateMore
TexturesTime; } | |
544 void setUpdateMoreTexturesSize(size_t size) { m_updateMoreTexturesSize = siz
e; } | 540 void setUpdateMoreTexturesSize(size_t size) { m_updateMoreTexturesSize = siz
e; } |
545 virtual size_t updateMoreTexturesSize() const OVERRIDE { return m_updateMore
TexturesSize; } | 541 virtual size_t updateMoreTexturesSize() const OVERRIDE { return m_updateMore
TexturesSize; } |
546 | 542 |
547 protected: | 543 protected: |
548 FakeCCTextureUpdateController(WebCore::CCTextureUpdateControllerClient* clie
nt, WebCore::CCThread* thread, PassOwnPtr<CCTextureUpdateQueue> queue, CCResourc
eProvider* resourceProvider, TextureCopier* copier, TextureUploader* uploader) | 544 FakeCCTextureUpdateController(WebCore::CCTextureUpdateControllerClient* clie
nt, WebCore::CCThread* thread, PassOwnPtr<CCTextureUpdateQueue> queue, CCResourc
eProvider* resourceProvider, TextureCopier* copier, TextureUploader* uploader) |
549 : WebCore::CCTextureUpdateController(client, thread, queue, resourceProv
ider, copier, uploader) | 545 : WebCore::CCTextureUpdateController(client, thread, queue, resourceProv
ider, copier, uploader) |
550 , m_monotonicTimeNow(0) | |
551 , m_updateMoreTexturesTime(0) | |
552 , m_updateMoreTexturesSize(0) { } | 546 , m_updateMoreTexturesSize(0) { } |
553 | 547 |
554 double m_monotonicTimeNow; | |
555 double m_updateMoreTexturesTime; | |
556 size_t m_updateMoreTexturesSize; | 548 size_t m_updateMoreTexturesSize; |
557 }; | 549 }; |
558 | 550 |
559 static void runPendingTask(FakeCCThread* thread, FakeCCTextureUpdateController*
controller) | 551 TEST_F(CCTextureUpdateControllerTest, OneFullUpdate) |
560 { | |
561 EXPECT_TRUE(thread->hasPendingTask()); | |
562 controller->setMonotonicTimeNow(controller->monotonicTimeNow() + thread->pen
dingDelayMs() / 1000.0); | |
563 thread->runPendingTask(); | |
564 } | |
565 | |
566 TEST_F(CCTextureUpdateControllerTest, UpdateMoreTextures) | |
567 { | 552 { |
568 FakeCCTextureUpdateControllerClient client; | 553 FakeCCTextureUpdateControllerClient client; |
569 FakeCCThread thread; | 554 FakeCCThread thread; |
570 | 555 |
571 setMaxUploadCountPerUpdate(1); | 556 setMaxUploadCountPerUpdate(1); |
572 appendFullUploadsToUpdateQueue(3); | 557 appendFullUploadsToUpdateQueue(1); |
573 appendPartialUploadsToUpdateQueue(0); | 558 appendPartialUploadsToUpdateQueue(0); |
574 | 559 |
575 DebugScopedSetImplThread implThread; | 560 DebugScopedSetImplThread implThread; |
576 OwnPtr<FakeCCTextureUpdateController> controller(FakeCCTextureUpdateControll
er::create(&client, &thread, m_queue.release(), m_resourceProvider.get(), &m_cop
ier, &m_uploader)); | 561 OwnPtr<FakeCCTextureUpdateController> controller(FakeCCTextureUpdateControll
er::create(&client, &thread, m_queue.release(), m_resourceProvider.get(), &m_cop
ier, &m_uploader)); |
577 | 562 |
578 controller->setMonotonicTimeNow(0); | |
579 controller->setUpdateMoreTexturesTime(0.1); | |
580 controller->setUpdateMoreTexturesSize(1); | 563 controller->setUpdateMoreTexturesSize(1); |
581 // Not enough time for any updates. | 564 controller->start(); |
582 controller->updateMoreTextures(0.09); | 565 EXPECT_TRUE(thread.hasPendingTask()); |
| 566 thread.runPendingTask(); |
583 EXPECT_FALSE(thread.hasPendingTask()); | 567 EXPECT_FALSE(thread.hasPendingTask()); |
584 EXPECT_EQ(0, m_numBeginUploads); | 568 EXPECT_TRUE(client.completedCalled()); |
585 EXPECT_EQ(0, m_numEndUploads); | |
586 | |
587 controller->setMonotonicTimeNow(0); | |
588 controller->setUpdateMoreTexturesTime(0.1); | |
589 controller->setUpdateMoreTexturesSize(1); | |
590 // Only enough time for 1 update. | |
591 controller->updateMoreTextures(0.12); | |
592 runPendingTask(&thread, controller.get()); | |
593 EXPECT_FALSE(thread.hasPendingTask()); | |
594 EXPECT_EQ(1, m_numBeginUploads); | 569 EXPECT_EQ(1, m_numBeginUploads); |
595 EXPECT_EQ(1, m_numEndUploads); | 570 EXPECT_EQ(1, m_numEndUploads); |
596 EXPECT_EQ(1, m_numTotalUploads); | 571 EXPECT_EQ(1, m_numTotalUploads); |
597 | |
598 controller->setMonotonicTimeNow(0); | |
599 controller->setUpdateMoreTexturesTime(0.1); | |
600 controller->setUpdateMoreTexturesSize(1); | |
601 // Enough time for 2 updates. | |
602 controller->updateMoreTextures(0.22); | |
603 runPendingTask(&thread, controller.get()); | |
604 runPendingTask(&thread, controller.get()); | |
605 EXPECT_FALSE(thread.hasPendingTask()); | |
606 EXPECT_TRUE(client.completedCalled()); | |
607 EXPECT_EQ(3, m_numBeginUploads); | |
608 EXPECT_EQ(3, m_numEndUploads); | |
609 EXPECT_EQ(3, m_numTotalUploads); | |
610 } | 572 } |
611 | 573 |
612 TEST_F(CCTextureUpdateControllerTest, NoMoreUpdates) | 574 TEST_F(CCTextureUpdateControllerTest, TwoPartialUpdates) |
613 { | 575 { |
614 FakeCCTextureUpdateControllerClient client; | 576 FakeCCTextureUpdateControllerClient client; |
615 FakeCCThread thread; | 577 FakeCCThread thread; |
616 | 578 |
617 setMaxUploadCountPerUpdate(1); | 579 setMaxUploadCountPerUpdate(1); |
618 appendFullUploadsToUpdateQueue(2); | 580 appendFullUploadsToUpdateQueue(0); |
619 appendPartialUploadsToUpdateQueue(0); | 581 appendPartialUploadsToUpdateQueue(2); |
620 | 582 |
621 DebugScopedSetImplThread implThread; | 583 DebugScopedSetImplThread implThread; |
622 OwnPtr<FakeCCTextureUpdateController> controller(FakeCCTextureUpdateControll
er::create(&client, &thread, m_queue.release(), m_resourceProvider.get(), &m_cop
ier, &m_uploader)); | 584 OwnPtr<FakeCCTextureUpdateController> controller(FakeCCTextureUpdateControll
er::create(&client, &thread, m_queue.release(), m_resourceProvider.get(), &m_cop
ier, &m_uploader)); |
623 | 585 |
624 controller->setMonotonicTimeNow(0); | |
625 controller->setUpdateMoreTexturesTime(0.1); | |
626 controller->setUpdateMoreTexturesSize(1); | 586 controller->setUpdateMoreTexturesSize(1); |
627 // Enough time for 3 updates but only 2 necessary. | 587 controller->start(); |
628 controller->updateMoreTextures(0.31); | 588 EXPECT_TRUE(thread.hasPendingTask()); |
629 runPendingTask(&thread, controller.get()); | 589 thread.runPendingTask(); |
630 runPendingTask(&thread, controller.get()); | 590 EXPECT_FALSE(thread.hasPendingTask()); |
| 591 EXPECT_TRUE(client.completedCalled()); |
| 592 EXPECT_EQ(0, m_numBeginUploads); |
| 593 EXPECT_EQ(0, m_numEndUploads); |
| 594 EXPECT_EQ(0, m_numTotalUploads); |
| 595 |
| 596 controller->updateAllTexturesNow(); |
| 597 EXPECT_EQ(1, m_numBeginUploads); |
| 598 EXPECT_EQ(1, m_numEndUploads); |
| 599 EXPECT_EQ(2, m_numTotalUploads); |
| 600 } |
| 601 |
| 602 TEST_F(CCTextureUpdateControllerTest, FourFullUpdatesAndOnePartialUpdate) |
| 603 { |
| 604 FakeCCTextureUpdateControllerClient client; |
| 605 FakeCCThread thread; |
| 606 |
| 607 setMaxUploadCountPerUpdate(2); |
| 608 appendFullUploadsToUpdateQueue(4); |
| 609 appendPartialUploadsToUpdateQueue(1); |
| 610 |
| 611 DebugScopedSetImplThread implThread; |
| 612 OwnPtr<FakeCCTextureUpdateController> controller(FakeCCTextureUpdateControll
er::create(&client, &thread, m_queue.release(), m_resourceProvider.get(), &m_cop
ier, &m_uploader)); |
| 613 |
| 614 controller->setUpdateMoreTexturesSize(2); |
| 615 controller->start(); |
| 616 EXPECT_TRUE(thread.hasPendingTask()); |
| 617 thread.runPendingTask(); |
| 618 EXPECT_TRUE(thread.hasPendingTask()); |
| 619 thread.runPendingTask(); |
631 EXPECT_FALSE(thread.hasPendingTask()); | 620 EXPECT_FALSE(thread.hasPendingTask()); |
632 EXPECT_TRUE(client.completedCalled()); | 621 EXPECT_TRUE(client.completedCalled()); |
633 EXPECT_EQ(2, m_numBeginUploads); | 622 EXPECT_EQ(2, m_numBeginUploads); |
634 EXPECT_EQ(2, m_numEndUploads); | 623 EXPECT_EQ(2, m_numEndUploads); |
635 EXPECT_EQ(2, m_numTotalUploads); | 624 EXPECT_EQ(4, m_numTotalUploads); |
636 | 625 |
637 controller->setMonotonicTimeNow(0); | 626 controller->updateAllTexturesNow(); |
638 controller->setUpdateMoreTexturesTime(0.1); | 627 EXPECT_EQ(3, m_numBeginUploads); |
639 controller->setUpdateMoreTexturesSize(1); | 628 EXPECT_EQ(3, m_numEndUploads); |
640 // Enough time for updates but no more updates left. | 629 EXPECT_EQ(5, m_numTotalUploads); |
641 controller->updateMoreTextures(0.31); | |
642 // 0-delay task used to call updateTexturesCompleted(). | |
643 runPendingTask(&thread, controller.get()); | |
644 EXPECT_FALSE(thread.hasPendingTask()); | |
645 EXPECT_TRUE(client.completedCalled()); | |
646 EXPECT_EQ(2, m_numBeginUploads); | |
647 EXPECT_EQ(2, m_numEndUploads); | |
648 EXPECT_EQ(2, m_numTotalUploads); | |
649 } | |
650 | |
651 TEST_F(CCTextureUpdateControllerTest, UpdatesCompleteInFiniteTime) | |
652 { | |
653 FakeCCTextureUpdateControllerClient client; | |
654 FakeCCThread thread; | |
655 | |
656 setMaxUploadCountPerUpdate(1); | |
657 appendFullUploadsToUpdateQueue(2); | |
658 appendPartialUploadsToUpdateQueue(0); | |
659 | |
660 DebugScopedSetImplThread implThread; | |
661 OwnPtr<FakeCCTextureUpdateController> controller(FakeCCTextureUpdateControll
er::create(&client, &thread, m_queue.release(), m_resourceProvider.get(), &m_cop
ier, &m_uploader)); | |
662 | |
663 controller->setMonotonicTimeNow(0); | |
664 controller->setUpdateMoreTexturesTime(0.5); | |
665 controller->setUpdateMoreTexturesSize(1); | |
666 | |
667 for (int i = 0; i < 100; i++) { | |
668 if (client.completedCalled()) | |
669 break; | |
670 | |
671 // Not enough time for any updates. | |
672 controller->updateMoreTextures(0.4); | |
673 | |
674 if (thread.hasPendingTask()) | |
675 runPendingTask(&thread, controller.get()); | |
676 } | |
677 | |
678 EXPECT_FALSE(thread.hasPendingTask()); | |
679 EXPECT_TRUE(client.completedCalled()); | |
680 EXPECT_EQ(2, m_numBeginUploads); | |
681 EXPECT_EQ(2, m_numEndUploads); | |
682 EXPECT_EQ(2, m_numTotalUploads); | |
683 } | 630 } |
684 | 631 |
685 } // namespace | 632 } // namespace |
OLD | NEW |