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

Side by Side Diff: cc/CCTextureUpdateControllerTest.cpp

Issue 10911262: cc: Scheduler will never process a commit until it receives a vsync tick. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: 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.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 "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 500 matching lines...) Expand 10 before | Expand all | Expand 10 after
511 511
512 EXPECT_EQ(3, m_numBeginUploads); 512 EXPECT_EQ(3, m_numBeginUploads);
513 EXPECT_EQ(3, m_numEndUploads); 513 EXPECT_EQ(3, m_numEndUploads);
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 WebCore::CCTextureUpdateContr ollerClient {
522 public:
523 FakeCCTextureUpdateControllerClient() { reset(); }
524 void reset() { m_completedCalled = false; }
525 bool completedCalled() const { return m_completedCalled; }
526
527 virtual void updateTexturesCompleted() OVERRIDE { m_completedCalled = true; }
528
529 protected:
530 bool m_completedCalled;
531 };
532
521 class FakeCCTextureUpdateController : public WebCore::CCTextureUpdateController { 533 class FakeCCTextureUpdateController : public WebCore::CCTextureUpdateController {
522 public: 534 public:
523 static PassOwnPtr<FakeCCTextureUpdateController> create(WebCore::CCThread* t hread, PassOwnPtr<CCTextureUpdateQueue> queue, CCResourceProvider* resourceProvi der, TextureCopier* copier, TextureUploader* uploader) 535 static PassOwnPtr<FakeCCTextureUpdateController> create(WebCore::CCTextureUp dateControllerClient* client, WebCore::CCThread* thread, PassOwnPtr<CCTextureUpd ateQueue> queue, CCResourceProvider* resourceProvider, TextureCopier* copier, Te xtureUploader* uploader)
524 { 536 {
525 return adoptPtr(new FakeCCTextureUpdateController(thread, queue, resourc eProvider, copier, uploader)); 537 return adoptPtr(new FakeCCTextureUpdateController(client, thread, queue, resourceProvider, copier, uploader));
526 } 538 }
527 539
528 void setMonotonicTimeNow(double time) { m_monotonicTimeNow = time; } 540 void setMonotonicTimeNow(double time) { m_monotonicTimeNow = time; }
529 virtual double monotonicTimeNow() const OVERRIDE { return m_monotonicTimeNow ; } 541 virtual double monotonicTimeNow() const OVERRIDE { return m_monotonicTimeNow ; }
530 void setUpdateMoreTexturesTime(double time) { m_updateMoreTexturesTime = tim e; } 542 void setUpdateMoreTexturesTime(double time) { m_updateMoreTexturesTime = tim e; }
531 virtual double updateMoreTexturesTime() const OVERRIDE { return m_updateMore TexturesTime; } 543 virtual double updateMoreTexturesTime() const OVERRIDE { return m_updateMore TexturesTime; }
532 void setUpdateMoreTexturesSize(size_t size) { m_updateMoreTexturesSize = siz e; } 544 void setUpdateMoreTexturesSize(size_t size) { m_updateMoreTexturesSize = siz e; }
533 virtual size_t updateMoreTexturesSize() const OVERRIDE { return m_updateMore TexturesSize; } 545 virtual size_t updateMoreTexturesSize() const OVERRIDE { return m_updateMore TexturesSize; }
534 546
535 protected: 547 protected:
536 FakeCCTextureUpdateController(WebCore::CCThread* thread, PassOwnPtr<CCTextur eUpdateQueue> queue, CCResourceProvider* resourceProvider, TextureCopier* copier , TextureUploader* uploader) 548 FakeCCTextureUpdateController(WebCore::CCTextureUpdateControllerClient* clie nt, WebCore::CCThread* thread, PassOwnPtr<CCTextureUpdateQueue> queue, CCResourc eProvider* resourceProvider, TextureCopier* copier, TextureUploader* uploader)
537 : WebCore::CCTextureUpdateController(thread, queue, resourceProvider, co pier, uploader) 549 : WebCore::CCTextureUpdateController(client, thread, queue, resourceProv ider, copier, uploader)
538 , m_monotonicTimeNow(0) 550 , m_monotonicTimeNow(0)
539 , m_updateMoreTexturesTime(0) 551 , m_updateMoreTexturesTime(0)
540 , m_updateMoreTexturesSize(0) { } 552 , m_updateMoreTexturesSize(0) { }
541 553
542 double m_monotonicTimeNow; 554 double m_monotonicTimeNow;
543 double m_updateMoreTexturesTime; 555 double m_updateMoreTexturesTime;
544 size_t m_updateMoreTexturesSize; 556 size_t m_updateMoreTexturesSize;
545 }; 557 };
546 558
559 static void runPendingTask(FakeCCThread* thread, FakeCCTextureUpdateController* controller)
560 {
561 EXPECT_TRUE(thread->hasPendingTask());
562 controller->setMonotonicTimeNow(controller->monotonicTimeNow() + thread->pen dingDelayMs() / 1000.0);
563 thread->runPendingTask();
564 }
565
547 TEST_F(CCTextureUpdateControllerTest, UpdateMoreTextures) 566 TEST_F(CCTextureUpdateControllerTest, UpdateMoreTextures)
548 { 567 {
568 FakeCCTextureUpdateControllerClient client;
549 FakeCCThread thread; 569 FakeCCThread thread;
550 570
551 setMaxUploadCountPerUpdate(1); 571 setMaxUploadCountPerUpdate(1);
552 appendFullUploadsToUpdateQueue(3); 572 appendFullUploadsToUpdateQueue(3);
553 appendPartialUploadsToUpdateQueue(0); 573 appendPartialUploadsToUpdateQueue(0);
554 574
555 DebugScopedSetImplThread implThread; 575 DebugScopedSetImplThread implThread;
556 OwnPtr<FakeCCTextureUpdateController> controller(FakeCCTextureUpdateControll er::create(&thread, m_queue.release(), m_resourceProvider.get(), &m_copier, &m_u ploader)); 576 OwnPtr<FakeCCTextureUpdateController> controller(FakeCCTextureUpdateControll er::create(&client, &thread, m_queue.release(), m_resourceProvider.get(), &m_cop ier, &m_uploader));
557 577
558 controller->setMonotonicTimeNow(0); 578 controller->setMonotonicTimeNow(0);
559 controller->setUpdateMoreTexturesTime(0.1); 579 controller->setUpdateMoreTexturesTime(0.1);
560 controller->setUpdateMoreTexturesSize(1); 580 controller->setUpdateMoreTexturesSize(1);
561 // Not enough time for any updates. 581 // Not enough time for any updates.
562 controller->updateMoreTextures(0.09); 582 controller->updateMoreTextures(0.09);
563 EXPECT_FALSE(thread.hasPendingTask()); 583 EXPECT_FALSE(thread.hasPendingTask());
564 EXPECT_EQ(0, m_numBeginUploads); 584 EXPECT_EQ(0, m_numBeginUploads);
565 EXPECT_EQ(0, m_numEndUploads); 585 EXPECT_EQ(0, m_numEndUploads);
566 586
567 thread.reset();
568 controller->setMonotonicTimeNow(0); 587 controller->setMonotonicTimeNow(0);
569 controller->setUpdateMoreTexturesTime(0.1); 588 controller->setUpdateMoreTexturesTime(0.1);
570 controller->setUpdateMoreTexturesSize(1); 589 controller->setUpdateMoreTexturesSize(1);
571 // Only enough time for 1 update. 590 // Only enough time for 1 update.
572 controller->updateMoreTextures(0.12); 591 controller->updateMoreTextures(0.12);
573 EXPECT_TRUE(thread.hasPendingTask()); 592 runPendingTask(&thread, controller.get());
574 controller->setMonotonicTimeNow(thread.pendingDelayMs() / 1000.0); 593 EXPECT_FALSE(thread.hasPendingTask());
575 thread.runPendingTask();
576 EXPECT_EQ(1, m_numBeginUploads); 594 EXPECT_EQ(1, m_numBeginUploads);
577 EXPECT_EQ(1, m_numEndUploads); 595 EXPECT_EQ(1, m_numEndUploads);
578 EXPECT_EQ(1, m_numTotalUploads); 596 EXPECT_EQ(1, m_numTotalUploads);
579 597
580 thread.reset();
581 controller->setMonotonicTimeNow(0); 598 controller->setMonotonicTimeNow(0);
582 controller->setUpdateMoreTexturesTime(0.1); 599 controller->setUpdateMoreTexturesTime(0.1);
583 controller->setUpdateMoreTexturesSize(1); 600 controller->setUpdateMoreTexturesSize(1);
584 // Enough time for 2 updates. 601 // Enough time for 2 updates.
585 controller->updateMoreTextures(0.22); 602 controller->updateMoreTextures(0.22);
586 EXPECT_TRUE(thread.hasPendingTask()); 603 runPendingTask(&thread, controller.get());
587 controller->setMonotonicTimeNow(controller->monotonicTimeNow() + thread.pend ingDelayMs() / 1000.0); 604 runPendingTask(&thread, controller.get());
588 thread.runPendingTask(); 605 EXPECT_FALSE(thread.hasPendingTask());
606 EXPECT_TRUE(client.completedCalled());
589 EXPECT_EQ(3, m_numBeginUploads); 607 EXPECT_EQ(3, m_numBeginUploads);
590 EXPECT_EQ(3, m_numEndUploads); 608 EXPECT_EQ(3, m_numEndUploads);
591 EXPECT_EQ(3, m_numTotalUploads); 609 EXPECT_EQ(3, m_numTotalUploads);
592 } 610 }
593 611
594 TEST_F(CCTextureUpdateControllerTest, NoMoreUpdates) 612 TEST_F(CCTextureUpdateControllerTest, NoMoreUpdates)
595 { 613 {
614 FakeCCTextureUpdateControllerClient client;
596 FakeCCThread thread; 615 FakeCCThread thread;
597 616
598 setMaxUploadCountPerUpdate(1); 617 setMaxUploadCountPerUpdate(1);
599 appendFullUploadsToUpdateQueue(2); 618 appendFullUploadsToUpdateQueue(2);
600 appendPartialUploadsToUpdateQueue(0); 619 appendPartialUploadsToUpdateQueue(0);
601 620
602 DebugScopedSetImplThread implThread; 621 DebugScopedSetImplThread implThread;
603 OwnPtr<FakeCCTextureUpdateController> controller(FakeCCTextureUpdateControll er::create(&thread, m_queue.release(), m_resourceProvider.get(), &m_copier, &m_u ploader)); 622 OwnPtr<FakeCCTextureUpdateController> controller(FakeCCTextureUpdateControll er::create(&client, &thread, m_queue.release(), m_resourceProvider.get(), &m_cop ier, &m_uploader));
604 623
605 controller->setMonotonicTimeNow(0); 624 controller->setMonotonicTimeNow(0);
606 controller->setUpdateMoreTexturesTime(0.1); 625 controller->setUpdateMoreTexturesTime(0.1);
607 controller->setUpdateMoreTexturesSize(1); 626 controller->setUpdateMoreTexturesSize(1);
608 // Enough time for 3 updates but only 2 necessary. 627 // Enough time for 3 updates but only 2 necessary.
609 controller->updateMoreTextures(0.31); 628 controller->updateMoreTextures(0.31);
610 EXPECT_TRUE(thread.hasPendingTask()); 629 runPendingTask(&thread, controller.get());
611 controller->setMonotonicTimeNow(controller->monotonicTimeNow() + thread.pend ingDelayMs() / 1000.0); 630 runPendingTask(&thread, controller.get());
612 thread.runPendingTask(); 631 EXPECT_FALSE(thread.hasPendingTask());
613 EXPECT_TRUE(thread.hasPendingTask()); 632 EXPECT_TRUE(client.completedCalled());
614 controller->setMonotonicTimeNow(controller->monotonicTimeNow() + thread.pend ingDelayMs() / 1000.0);
615 thread.runPendingTask();
616 EXPECT_EQ(2, m_numBeginUploads); 633 EXPECT_EQ(2, m_numBeginUploads);
617 EXPECT_EQ(2, m_numEndUploads); 634 EXPECT_EQ(2, m_numEndUploads);
618 EXPECT_EQ(2, m_numTotalUploads); 635 EXPECT_EQ(2, m_numTotalUploads);
619 636
620 thread.reset();
621 controller->setMonotonicTimeNow(0); 637 controller->setMonotonicTimeNow(0);
622 controller->setUpdateMoreTexturesTime(0.1); 638 controller->setUpdateMoreTexturesTime(0.1);
623 controller->setUpdateMoreTexturesSize(1); 639 controller->setUpdateMoreTexturesSize(1);
624 // Enough time for updates but no more updates left. 640 // Enough time for updates but no more updates left.
625 controller->updateMoreTextures(0.31); 641 controller->updateMoreTextures(0.31);
642 // 0-delay task used to call updateTexturesCompleted().
643 runPendingTask(&thread, controller.get());
626 EXPECT_FALSE(thread.hasPendingTask()); 644 EXPECT_FALSE(thread.hasPendingTask());
645 EXPECT_TRUE(client.completedCalled());
627 EXPECT_EQ(2, m_numBeginUploads); 646 EXPECT_EQ(2, m_numBeginUploads);
628 EXPECT_EQ(2, m_numEndUploads); 647 EXPECT_EQ(2, m_numEndUploads);
629 EXPECT_EQ(2, m_numTotalUploads); 648 EXPECT_EQ(2, m_numTotalUploads);
630 } 649 }
631 650
632 TEST_F(CCTextureUpdateControllerTest, UpdatesCompleteInFiniteTime) 651 TEST_F(CCTextureUpdateControllerTest, UpdatesCompleteInFiniteTime)
633 { 652 {
653 FakeCCTextureUpdateControllerClient client;
634 FakeCCThread thread; 654 FakeCCThread thread;
635 655
636 setMaxUploadCountPerUpdate(1); 656 setMaxUploadCountPerUpdate(1);
637 appendFullUploadsToUpdateQueue(2); 657 appendFullUploadsToUpdateQueue(2);
638 appendPartialUploadsToUpdateQueue(0); 658 appendPartialUploadsToUpdateQueue(0);
639 659
640 DebugScopedSetImplThread implThread; 660 DebugScopedSetImplThread implThread;
641 OwnPtr<FakeCCTextureUpdateController> controller(FakeCCTextureUpdateControll er::create(&thread, m_queue.release(), m_resourceProvider.get(), &m_copier, &m_u ploader)); 661 OwnPtr<FakeCCTextureUpdateController> controller(FakeCCTextureUpdateControll er::create(&client, &thread, m_queue.release(), m_resourceProvider.get(), &m_cop ier, &m_uploader));
642 662
643 controller->setMonotonicTimeNow(0); 663 controller->setMonotonicTimeNow(0);
644 controller->setUpdateMoreTexturesTime(0.5); 664 controller->setUpdateMoreTexturesTime(0.5);
645 controller->setUpdateMoreTexturesSize(1); 665 controller->setUpdateMoreTexturesSize(1);
646 666
647 for (int i = 0; i < 100; i++) { 667 for (int i = 0; i < 100; i++) {
648 if (!controller->hasMoreUpdates()) 668 if (client.completedCalled())
649 break; 669 break;
650 670
651 // Not enough time for any updates. 671 // Not enough time for any updates.
652 controller->updateMoreTextures(0.4); 672 controller->updateMoreTextures(0.4);
653 673
654 if (thread.hasPendingTask()) { 674 if (thread.hasPendingTask())
655 controller->setMonotonicTimeNow(controller->monotonicTimeNow() + thr ead.pendingDelayMs() / 1000.0); 675 runPendingTask(&thread, controller.get());
656 thread.runPendingTask();
657 }
658 } 676 }
659 677
678 EXPECT_FALSE(thread.hasPendingTask());
679 EXPECT_TRUE(client.completedCalled());
660 EXPECT_EQ(2, m_numBeginUploads); 680 EXPECT_EQ(2, m_numBeginUploads);
661 EXPECT_EQ(2, m_numEndUploads); 681 EXPECT_EQ(2, m_numEndUploads);
662 EXPECT_EQ(2, m_numTotalUploads); 682 EXPECT_EQ(2, m_numTotalUploads);
663 } 683 }
664 684
665 } // namespace 685 } // namespace
OLDNEW
« no previous file with comments | « cc/CCTextureUpdateController.cpp ('k') | cc/CCThreadProxy.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698