| OLD | NEW |
| 1 // Copyright 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 2011 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 #include "cc/scheduler/scheduler.h" | 5 #include "cc/scheduler/scheduler.h" |
| 5 | 6 |
| 6 #include <string> | 7 #include <string> |
| 7 #include <vector> | 8 #include <vector> |
| 8 | 9 |
| 9 #include "base/debug/trace_event.h" | 10 #include "base/debug/trace_event.h" |
| 10 #include "base/logging.h" | 11 #include "base/logging.h" |
| 11 #include "base/memory/scoped_vector.h" | 12 #include "base/memory/scoped_vector.h" |
| 12 #include "base/message_loop/message_loop.h" | 13 #include "base/message_loop/message_loop.h" |
| 13 #include "base/power_monitor/power_monitor.h" | 14 #include "base/power_monitor/power_monitor.h" |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 107 actions_.clear(); | 108 actions_.clear(); |
| 108 states_.clear(); | 109 states_.clear(); |
| 109 draw_will_happen_ = true; | 110 draw_will_happen_ = true; |
| 110 swap_will_happen_if_draw_happens_ = true; | 111 swap_will_happen_if_draw_happens_ = true; |
| 111 num_draws_ = 0; | 112 num_draws_ = 0; |
| 112 log_anticipated_draw_time_change_ = false; | 113 log_anticipated_draw_time_change_ = false; |
| 113 } | 114 } |
| 114 | 115 |
| 115 TestScheduler* CreateScheduler(const SchedulerSettings& settings) { | 116 TestScheduler* CreateScheduler(const SchedulerSettings& settings) { |
| 116 scoped_ptr<FakeExternalBeginFrameSource> fake_external_begin_frame_source; | 117 scoped_ptr<FakeExternalBeginFrameSource> fake_external_begin_frame_source; |
| 117 if (settings.begin_frame_scheduling_enabled && | 118 if (settings.use_external_begin_frame_source && |
| 118 settings.throttle_frame_production) { | 119 settings.throttle_frame_production) { |
| 119 fake_external_begin_frame_source.reset( | 120 fake_external_begin_frame_source.reset( |
| 120 new FakeExternalBeginFrameSource(this)); | 121 new FakeExternalBeginFrameSource(this)); |
| 121 fake_external_begin_frame_source_ = | 122 fake_external_begin_frame_source_ = |
| 122 fake_external_begin_frame_source.get(); | 123 fake_external_begin_frame_source.get(); |
| 123 } | 124 } |
| 124 scheduler_ = TestScheduler::Create(now_src_, | 125 scheduler_ = TestScheduler::Create(now_src_, |
| 125 this, | 126 this, |
| 126 settings, | 127 settings, |
| 127 0, | 128 0, |
| (...skipping 15 matching lines...) Expand all Loading... |
| 143 } | 144 } |
| 144 int num_draws() const { return num_draws_; } | 145 int num_draws() const { return num_draws_; } |
| 145 int num_actions_() const { return static_cast<int>(actions_.size()); } | 146 int num_actions_() const { return static_cast<int>(actions_.size()); } |
| 146 const char* Action(int i) const { return actions_[i]; } | 147 const char* Action(int i) const { return actions_[i]; } |
| 147 std::string StateForAction(int i) const { return states_[i]->ToString(); } | 148 std::string StateForAction(int i) const { return states_[i]->ToString(); } |
| 148 base::TimeTicks posted_begin_impl_frame_deadline() const { | 149 base::TimeTicks posted_begin_impl_frame_deadline() const { |
| 149 return posted_begin_impl_frame_deadline_; | 150 return posted_begin_impl_frame_deadline_; |
| 150 } | 151 } |
| 151 | 152 |
| 152 bool ExternalBeginFrame() { | 153 bool ExternalBeginFrame() { |
| 153 return scheduler_->settings().begin_frame_scheduling_enabled && | 154 return scheduler_->settings().use_external_begin_frame_source && |
| 154 scheduler_->settings().throttle_frame_production; | 155 scheduler_->settings().throttle_frame_production; |
| 155 } | 156 } |
| 156 | 157 |
| 157 FakeExternalBeginFrameSource* fake_external_begin_frame_source() const { | 158 FakeExternalBeginFrameSource* fake_external_begin_frame_source() const { |
| 158 return fake_external_begin_frame_source_; | 159 return fake_external_begin_frame_source_; |
| 159 } | 160 } |
| 160 | 161 |
| 161 base::PowerMonitor* PowerMonitor() { return &power_monitor_; } | 162 base::PowerMonitor* PowerMonitor() { return &power_monitor_; } |
| 162 | 163 |
| 163 FakePowerMonitorSource* PowerMonitorSource() { | 164 FakePowerMonitorSource* PowerMonitorSource() { |
| (...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 345 } | 346 } |
| 346 | 347 |
| 347 // Run the posted deadline task. | 348 // Run the posted deadline task. |
| 348 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); | 349 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); |
| 349 client->task_runner().RunTasksWhile(client->ImplFrameDeadlinePending(true)); | 350 client->task_runner().RunTasksWhile(client->ImplFrameDeadlinePending(true)); |
| 350 EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending()); | 351 EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending()); |
| 351 } | 352 } |
| 352 | 353 |
| 353 TEST(SchedulerTest, InitializeOutputSurfaceDoesNotBeginImplFrame) { | 354 TEST(SchedulerTest, InitializeOutputSurfaceDoesNotBeginImplFrame) { |
| 354 FakeSchedulerClient client; | 355 FakeSchedulerClient client; |
| 355 SchedulerSettings default_scheduler_settings; | 356 SchedulerSettings scheduler_settings; |
| 356 TestScheduler* scheduler = client.CreateScheduler(default_scheduler_settings); | 357 scheduler_settings.use_external_begin_frame_source = true; |
| 358 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); |
| 357 scheduler->SetCanStart(); | 359 scheduler->SetCanStart(); |
| 358 scheduler->SetVisible(true); | 360 scheduler->SetVisible(true); |
| 359 scheduler->SetCanDraw(true); | 361 scheduler->SetCanDraw(true); |
| 360 | 362 |
| 361 EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client); | 363 EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client); |
| 362 client.Reset(); | 364 client.Reset(); |
| 363 scheduler->DidCreateAndInitializeOutputSurface(); | 365 scheduler->DidCreateAndInitializeOutputSurface(); |
| 364 EXPECT_NO_ACTION(client); | 366 EXPECT_NO_ACTION(client); |
| 365 } | 367 } |
| 366 | 368 |
| 367 TEST(SchedulerTest, RequestCommit) { | 369 TEST(SchedulerTest, RequestCommit) { |
| 368 FakeSchedulerClient client; | 370 FakeSchedulerClient client; |
| 369 SchedulerSettings scheduler_settings; | 371 SchedulerSettings scheduler_settings; |
| 372 scheduler_settings.use_external_begin_frame_source = true; |
| 370 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); | 373 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); |
| 371 scheduler->SetCanStart(); | 374 scheduler->SetCanStart(); |
| 372 scheduler->SetVisible(true); | 375 scheduler->SetVisible(true); |
| 373 scheduler->SetCanDraw(true); | 376 scheduler->SetCanDraw(true); |
| 374 | 377 |
| 375 EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client); | 378 EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client); |
| 376 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); | 379 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); |
| 377 | 380 |
| 378 // SetNeedsCommit should begin the frame on the next BeginImplFrame. | 381 // SetNeedsCommit should begin the frame on the next BeginImplFrame. |
| 379 client.Reset(); | 382 client.Reset(); |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 425 client.Reset(); | 428 client.Reset(); |
| 426 | 429 |
| 427 client.task_runner().RunPendingTasks(); // Run posted deadline. | 430 client.task_runner().RunPendingTasks(); // Run posted deadline. |
| 428 EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(false)", client); | 431 EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(false)", client); |
| 429 client.Reset(); | 432 client.Reset(); |
| 430 } | 433 } |
| 431 | 434 |
| 432 TEST(SchedulerTest, RequestCommitAfterBeginMainFrameSent) { | 435 TEST(SchedulerTest, RequestCommitAfterBeginMainFrameSent) { |
| 433 FakeSchedulerClient client; | 436 FakeSchedulerClient client; |
| 434 SchedulerSettings scheduler_settings; | 437 SchedulerSettings scheduler_settings; |
| 438 scheduler_settings.use_external_begin_frame_source = true; |
| 435 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); | 439 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); |
| 436 scheduler->SetCanStart(); | 440 scheduler->SetCanStart(); |
| 437 scheduler->SetVisible(true); | 441 scheduler->SetVisible(true); |
| 438 scheduler->SetCanDraw(true); | 442 scheduler->SetCanDraw(true); |
| 439 | 443 |
| 440 EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client); | 444 EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client); |
| 441 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); | 445 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); |
| 442 client.Reset(); | 446 client.Reset(); |
| 443 | 447 |
| 444 // SetNeedsCommit should begin the frame. | 448 // SetNeedsCommit should begin the frame. |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 523 void ScheduledActionBeginOutputSurfaceCreation() override {} | 527 void ScheduledActionBeginOutputSurfaceCreation() override {} |
| 524 void DidAnticipatedDrawTimeChange(base::TimeTicks) override {} | 528 void DidAnticipatedDrawTimeChange(base::TimeTicks) override {} |
| 525 }; | 529 }; |
| 526 | 530 |
| 527 // Tests for two different situations: | 531 // Tests for two different situations: |
| 528 // 1. the scheduler dropping SetNeedsRedraw requests that happen inside | 532 // 1. the scheduler dropping SetNeedsRedraw requests that happen inside |
| 529 // a ScheduledActionDrawAndSwap | 533 // a ScheduledActionDrawAndSwap |
| 530 // 2. the scheduler drawing twice inside a single tick | 534 // 2. the scheduler drawing twice inside a single tick |
| 531 TEST(SchedulerTest, RequestRedrawInsideDraw) { | 535 TEST(SchedulerTest, RequestRedrawInsideDraw) { |
| 532 SchedulerClientThatsetNeedsDrawInsideDraw client; | 536 SchedulerClientThatsetNeedsDrawInsideDraw client; |
| 533 SchedulerSettings default_scheduler_settings; | 537 SchedulerSettings scheduler_settings; |
| 534 TestScheduler* scheduler = client.CreateScheduler(default_scheduler_settings); | 538 scheduler_settings.use_external_begin_frame_source = true; |
| 539 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); |
| 535 scheduler->SetCanStart(); | 540 scheduler->SetCanStart(); |
| 536 scheduler->SetVisible(true); | 541 scheduler->SetVisible(true); |
| 537 scheduler->SetCanDraw(true); | 542 scheduler->SetCanDraw(true); |
| 538 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); | 543 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); |
| 539 client.Reset(); | 544 client.Reset(); |
| 540 | 545 |
| 541 scheduler->SetNeedsRedraw(); | 546 scheduler->SetNeedsRedraw(); |
| 542 EXPECT_TRUE(scheduler->RedrawPending()); | 547 EXPECT_TRUE(scheduler->RedrawPending()); |
| 543 EXPECT_TRUE(client.needs_begin_frames()); | 548 EXPECT_TRUE(client.needs_begin_frames()); |
| 544 EXPECT_EQ(0, client.num_draws()); | 549 EXPECT_EQ(0, client.num_draws()); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 560 client.AdvanceFrame(); | 565 client.AdvanceFrame(); |
| 561 client.task_runner().RunPendingTasks(); // Run posted deadline. | 566 client.task_runner().RunPendingTasks(); // Run posted deadline. |
| 562 EXPECT_EQ(2, client.num_draws()); | 567 EXPECT_EQ(2, client.num_draws()); |
| 563 EXPECT_FALSE(scheduler->RedrawPending()); | 568 EXPECT_FALSE(scheduler->RedrawPending()); |
| 564 EXPECT_FALSE(client.needs_begin_frames()); | 569 EXPECT_FALSE(client.needs_begin_frames()); |
| 565 } | 570 } |
| 566 | 571 |
| 567 // Test that requesting redraw inside a failed draw doesn't lose the request. | 572 // Test that requesting redraw inside a failed draw doesn't lose the request. |
| 568 TEST(SchedulerTest, RequestRedrawInsideFailedDraw) { | 573 TEST(SchedulerTest, RequestRedrawInsideFailedDraw) { |
| 569 SchedulerClientThatsetNeedsDrawInsideDraw client; | 574 SchedulerClientThatsetNeedsDrawInsideDraw client; |
| 570 SchedulerSettings default_scheduler_settings; | 575 SchedulerSettings scheduler_settings; |
| 571 TestScheduler* scheduler = client.CreateScheduler(default_scheduler_settings); | 576 scheduler_settings.use_external_begin_frame_source = true; |
| 577 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); |
| 572 scheduler->SetCanStart(); | 578 scheduler->SetCanStart(); |
| 573 scheduler->SetVisible(true); | 579 scheduler->SetVisible(true); |
| 574 scheduler->SetCanDraw(true); | 580 scheduler->SetCanDraw(true); |
| 575 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); | 581 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); |
| 576 client.Reset(); | 582 client.Reset(); |
| 577 | 583 |
| 578 client.SetDrawWillHappen(false); | 584 client.SetDrawWillHappen(false); |
| 579 | 585 |
| 580 scheduler->SetNeedsRedraw(); | 586 scheduler->SetNeedsRedraw(); |
| 581 EXPECT_TRUE(scheduler->RedrawPending()); | 587 EXPECT_TRUE(scheduler->RedrawPending()); |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 638 void SetNeedsCommitOnNextDraw() { set_needs_commit_on_next_draw_ = true; } | 644 void SetNeedsCommitOnNextDraw() { set_needs_commit_on_next_draw_ = true; } |
| 639 | 645 |
| 640 private: | 646 private: |
| 641 bool set_needs_commit_on_next_draw_; | 647 bool set_needs_commit_on_next_draw_; |
| 642 }; | 648 }; |
| 643 | 649 |
| 644 // Tests for the scheduler infinite-looping on SetNeedsCommit requests that | 650 // Tests for the scheduler infinite-looping on SetNeedsCommit requests that |
| 645 // happen inside a ScheduledActionDrawAndSwap | 651 // happen inside a ScheduledActionDrawAndSwap |
| 646 TEST(SchedulerTest, RequestCommitInsideDraw) { | 652 TEST(SchedulerTest, RequestCommitInsideDraw) { |
| 647 SchedulerClientThatSetNeedsCommitInsideDraw client; | 653 SchedulerClientThatSetNeedsCommitInsideDraw client; |
| 648 SchedulerSettings default_scheduler_settings; | 654 SchedulerSettings scheduler_settings; |
| 649 TestScheduler* scheduler = client.CreateScheduler(default_scheduler_settings); | 655 scheduler_settings.use_external_begin_frame_source = true; |
| 656 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); |
| 650 scheduler->SetCanStart(); | 657 scheduler->SetCanStart(); |
| 651 scheduler->SetVisible(true); | 658 scheduler->SetVisible(true); |
| 652 scheduler->SetCanDraw(true); | 659 scheduler->SetCanDraw(true); |
| 653 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); | 660 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); |
| 654 client.Reset(); | 661 client.Reset(); |
| 655 | 662 |
| 656 EXPECT_FALSE(client.needs_begin_frames()); | 663 EXPECT_FALSE(client.needs_begin_frames()); |
| 657 scheduler->SetNeedsRedraw(); | 664 scheduler->SetNeedsRedraw(); |
| 658 EXPECT_TRUE(scheduler->RedrawPending()); | 665 EXPECT_TRUE(scheduler->RedrawPending()); |
| 659 EXPECT_EQ(0, client.num_draws()); | 666 EXPECT_EQ(0, client.num_draws()); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 683 client.task_runner().RunPendingTasks(); // Run posted deadline. | 690 client.task_runner().RunPendingTasks(); // Run posted deadline. |
| 684 EXPECT_EQ(2, client.num_draws()); | 691 EXPECT_EQ(2, client.num_draws()); |
| 685 EXPECT_FALSE(scheduler->RedrawPending()); | 692 EXPECT_FALSE(scheduler->RedrawPending()); |
| 686 EXPECT_FALSE(scheduler->CommitPending()); | 693 EXPECT_FALSE(scheduler->CommitPending()); |
| 687 EXPECT_FALSE(client.needs_begin_frames()); | 694 EXPECT_FALSE(client.needs_begin_frames()); |
| 688 } | 695 } |
| 689 | 696 |
| 690 // Tests that when a draw fails then the pending commit should not be dropped. | 697 // Tests that when a draw fails then the pending commit should not be dropped. |
| 691 TEST(SchedulerTest, RequestCommitInsideFailedDraw) { | 698 TEST(SchedulerTest, RequestCommitInsideFailedDraw) { |
| 692 SchedulerClientThatsetNeedsDrawInsideDraw client; | 699 SchedulerClientThatsetNeedsDrawInsideDraw client; |
| 693 SchedulerSettings default_scheduler_settings; | 700 SchedulerSettings scheduler_settings; |
| 694 TestScheduler* scheduler = client.CreateScheduler(default_scheduler_settings); | 701 scheduler_settings.use_external_begin_frame_source = true; |
| 702 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); |
| 695 scheduler->SetCanStart(); | 703 scheduler->SetCanStart(); |
| 696 scheduler->SetVisible(true); | 704 scheduler->SetVisible(true); |
| 697 scheduler->SetCanDraw(true); | 705 scheduler->SetCanDraw(true); |
| 698 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); | 706 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); |
| 699 client.Reset(); | 707 client.Reset(); |
| 700 | 708 |
| 701 client.SetDrawWillHappen(false); | 709 client.SetDrawWillHappen(false); |
| 702 | 710 |
| 703 scheduler->SetNeedsRedraw(); | 711 scheduler->SetNeedsRedraw(); |
| 704 EXPECT_TRUE(scheduler->RedrawPending()); | 712 EXPECT_TRUE(scheduler->RedrawPending()); |
| (...skipping 25 matching lines...) Expand all Loading... |
| 730 client.AdvanceFrame(); | 738 client.AdvanceFrame(); |
| 731 client.task_runner().RunPendingTasks(); // Run posted deadline. | 739 client.task_runner().RunPendingTasks(); // Run posted deadline. |
| 732 EXPECT_EQ(3, client.num_draws()); | 740 EXPECT_EQ(3, client.num_draws()); |
| 733 EXPECT_TRUE(scheduler->CommitPending()); | 741 EXPECT_TRUE(scheduler->CommitPending()); |
| 734 EXPECT_FALSE(scheduler->RedrawPending()); | 742 EXPECT_FALSE(scheduler->RedrawPending()); |
| 735 EXPECT_TRUE(client.needs_begin_frames()); | 743 EXPECT_TRUE(client.needs_begin_frames()); |
| 736 } | 744 } |
| 737 | 745 |
| 738 TEST(SchedulerTest, NoSwapWhenDrawFails) { | 746 TEST(SchedulerTest, NoSwapWhenDrawFails) { |
| 739 SchedulerClientThatSetNeedsCommitInsideDraw client; | 747 SchedulerClientThatSetNeedsCommitInsideDraw client; |
| 740 SchedulerSettings default_scheduler_settings; | 748 SchedulerSettings scheduler_settings; |
| 741 TestScheduler* scheduler = client.CreateScheduler(default_scheduler_settings); | 749 scheduler_settings.use_external_begin_frame_source = true; |
| 750 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); |
| 742 scheduler->SetCanStart(); | 751 scheduler->SetCanStart(); |
| 743 scheduler->SetVisible(true); | 752 scheduler->SetVisible(true); |
| 744 scheduler->SetCanDraw(true); | 753 scheduler->SetCanDraw(true); |
| 745 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); | 754 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); |
| 746 client.Reset(); | 755 client.Reset(); |
| 747 | 756 |
| 748 scheduler->SetNeedsRedraw(); | 757 scheduler->SetNeedsRedraw(); |
| 749 EXPECT_TRUE(scheduler->RedrawPending()); | 758 EXPECT_TRUE(scheduler->RedrawPending()); |
| 750 EXPECT_TRUE(client.needs_begin_frames()); | 759 EXPECT_TRUE(client.needs_begin_frames()); |
| 751 EXPECT_EQ(0, client.num_draws()); | 760 EXPECT_EQ(0, client.num_draws()); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 772 public: | 781 public: |
| 773 DrawResult ScheduledActionDrawAndSwapIfPossible() override { | 782 DrawResult ScheduledActionDrawAndSwapIfPossible() override { |
| 774 scheduler_->SetNeedsManageTiles(); | 783 scheduler_->SetNeedsManageTiles(); |
| 775 return FakeSchedulerClient::ScheduledActionDrawAndSwapIfPossible(); | 784 return FakeSchedulerClient::ScheduledActionDrawAndSwapIfPossible(); |
| 776 } | 785 } |
| 777 }; | 786 }; |
| 778 | 787 |
| 779 // Test manage tiles is independant of draws. | 788 // Test manage tiles is independant of draws. |
| 780 TEST(SchedulerTest, ManageTiles) { | 789 TEST(SchedulerTest, ManageTiles) { |
| 781 SchedulerClientNeedsManageTilesInDraw client; | 790 SchedulerClientNeedsManageTilesInDraw client; |
| 782 SchedulerSettings default_scheduler_settings; | 791 SchedulerSettings scheduler_settings; |
| 783 TestScheduler* scheduler = client.CreateScheduler(default_scheduler_settings); | 792 scheduler_settings.use_external_begin_frame_source = true; |
| 793 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); |
| 784 scheduler->SetCanStart(); | 794 scheduler->SetCanStart(); |
| 785 scheduler->SetVisible(true); | 795 scheduler->SetVisible(true); |
| 786 scheduler->SetCanDraw(true); | 796 scheduler->SetCanDraw(true); |
| 787 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); | 797 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); |
| 788 | 798 |
| 789 // Request both draw and manage tiles. ManageTiles shouldn't | 799 // Request both draw and manage tiles. ManageTiles shouldn't |
| 790 // be trigged until BeginImplFrame. | 800 // be trigged until BeginImplFrame. |
| 791 client.Reset(); | 801 client.Reset(); |
| 792 scheduler->SetNeedsManageTiles(); | 802 scheduler->SetNeedsManageTiles(); |
| 793 scheduler->SetNeedsRedraw(); | 803 scheduler->SetNeedsRedraw(); |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 878 EXPECT_EQ(0, client.num_draws()); | 888 EXPECT_EQ(0, client.num_draws()); |
| 879 EXPECT_FALSE(client.HasAction("ScheduledActionDrawAndSwapIfPossible")); | 889 EXPECT_FALSE(client.HasAction("ScheduledActionDrawAndSwapIfPossible")); |
| 880 EXPECT_TRUE(client.HasAction("ScheduledActionManageTiles")); | 890 EXPECT_TRUE(client.HasAction("ScheduledActionManageTiles")); |
| 881 EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending()); | 891 EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending()); |
| 882 } | 892 } |
| 883 | 893 |
| 884 // Test that ManageTiles only happens once per frame. If an external caller | 894 // Test that ManageTiles only happens once per frame. If an external caller |
| 885 // initiates it, then the state machine should not ManageTiles on that frame. | 895 // initiates it, then the state machine should not ManageTiles on that frame. |
| 886 TEST(SchedulerTest, ManageTilesOncePerFrame) { | 896 TEST(SchedulerTest, ManageTilesOncePerFrame) { |
| 887 FakeSchedulerClient client; | 897 FakeSchedulerClient client; |
| 888 SchedulerSettings default_scheduler_settings; | 898 SchedulerSettings scheduler_settings; |
| 889 TestScheduler* scheduler = client.CreateScheduler(default_scheduler_settings); | 899 scheduler_settings.use_external_begin_frame_source = true; |
| 900 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); |
| 890 scheduler->SetCanStart(); | 901 scheduler->SetCanStart(); |
| 891 scheduler->SetVisible(true); | 902 scheduler->SetVisible(true); |
| 892 scheduler->SetCanDraw(true); | 903 scheduler->SetCanDraw(true); |
| 893 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); | 904 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); |
| 894 | 905 |
| 895 // If DidManageTiles during a frame, then ManageTiles should not occur again. | 906 // If DidManageTiles during a frame, then ManageTiles should not occur again. |
| 896 scheduler->SetNeedsManageTiles(); | 907 scheduler->SetNeedsManageTiles(); |
| 897 scheduler->SetNeedsRedraw(); | 908 scheduler->SetNeedsRedraw(); |
| 898 client.Reset(); | 909 client.Reset(); |
| 899 client.AdvanceFrame(); | 910 client.AdvanceFrame(); |
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 998 EXPECT_FALSE(scheduler->RedrawPending()); | 1009 EXPECT_FALSE(scheduler->RedrawPending()); |
| 999 EXPECT_FALSE(scheduler->ManageTilesPending()); | 1010 EXPECT_FALSE(scheduler->ManageTilesPending()); |
| 1000 EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending()); | 1011 EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending()); |
| 1001 scheduler->DidManageTiles(); // Corresponds to ScheduledActionManageTiles | 1012 scheduler->DidManageTiles(); // Corresponds to ScheduledActionManageTiles |
| 1002 } | 1013 } |
| 1003 | 1014 |
| 1004 TEST(SchedulerTest, ShouldUpdateVisibleTiles) { | 1015 TEST(SchedulerTest, ShouldUpdateVisibleTiles) { |
| 1005 FakeSchedulerClient client; | 1016 FakeSchedulerClient client; |
| 1006 SchedulerSettings scheduler_settings; | 1017 SchedulerSettings scheduler_settings; |
| 1007 scheduler_settings.impl_side_painting = true; | 1018 scheduler_settings.impl_side_painting = true; |
| 1019 scheduler_settings.use_external_begin_frame_source = true; |
| 1008 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); | 1020 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); |
| 1009 scheduler->SetCanStart(); | 1021 scheduler->SetCanStart(); |
| 1010 scheduler->SetVisible(true); | 1022 scheduler->SetVisible(true); |
| 1011 scheduler->SetCanDraw(true); | 1023 scheduler->SetCanDraw(true); |
| 1012 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); | 1024 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); |
| 1013 | 1025 |
| 1014 client.SetRedrawWillHappenIfUpdateVisibleTilesHappens(true); | 1026 client.SetRedrawWillHappenIfUpdateVisibleTilesHappens(true); |
| 1015 | 1027 |
| 1016 // SetNeedsCommit should begin the frame. | 1028 // SetNeedsCommit should begin the frame. |
| 1017 client.Reset(); | 1029 client.Reset(); |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1057 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); | 1069 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); |
| 1058 | 1070 |
| 1059 // No more UpdateVisibleTiles(). | 1071 // No more UpdateVisibleTiles(). |
| 1060 client.Reset(); | 1072 client.Reset(); |
| 1061 client.task_runner().RunPendingTasks(); // Run posted deadline. | 1073 client.task_runner().RunPendingTasks(); // Run posted deadline. |
| 1062 EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(false)", client); | 1074 EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(false)", client); |
| 1063 } | 1075 } |
| 1064 | 1076 |
| 1065 TEST(SchedulerTest, TriggerBeginFrameDeadlineEarly) { | 1077 TEST(SchedulerTest, TriggerBeginFrameDeadlineEarly) { |
| 1066 SchedulerClientNeedsManageTilesInDraw client; | 1078 SchedulerClientNeedsManageTilesInDraw client; |
| 1067 SchedulerSettings default_scheduler_settings; | 1079 SchedulerSettings scheduler_settings; |
| 1068 TestScheduler* scheduler = client.CreateScheduler(default_scheduler_settings); | 1080 scheduler_settings.use_external_begin_frame_source = true; |
| 1081 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); |
| 1069 scheduler->SetCanStart(); | 1082 scheduler->SetCanStart(); |
| 1070 scheduler->SetVisible(true); | 1083 scheduler->SetVisible(true); |
| 1071 scheduler->SetCanDraw(true); | 1084 scheduler->SetCanDraw(true); |
| 1072 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); | 1085 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); |
| 1073 | 1086 |
| 1074 client.Reset(); | 1087 client.Reset(); |
| 1075 scheduler->SetNeedsRedraw(); | 1088 scheduler->SetNeedsRedraw(); |
| 1076 client.AdvanceFrame(); | 1089 client.AdvanceFrame(); |
| 1077 | 1090 |
| 1078 // The deadline should be zero since there is no work other than drawing | 1091 // The deadline should be zero since there is no work other than drawing |
| (...skipping 29 matching lines...) Expand all Loading... |
| 1108 void MainFrameInHighLatencyMode(int64 begin_main_frame_to_commit_estimate_in_ms, | 1121 void MainFrameInHighLatencyMode(int64 begin_main_frame_to_commit_estimate_in_ms, |
| 1109 int64 commit_to_activate_estimate_in_ms, | 1122 int64 commit_to_activate_estimate_in_ms, |
| 1110 bool impl_latency_takes_priority, | 1123 bool impl_latency_takes_priority, |
| 1111 bool should_send_begin_main_frame) { | 1124 bool should_send_begin_main_frame) { |
| 1112 // Set up client with specified estimates (draw duration is set to 1). | 1125 // Set up client with specified estimates (draw duration is set to 1). |
| 1113 SchedulerClientWithFixedEstimates client( | 1126 SchedulerClientWithFixedEstimates client( |
| 1114 base::TimeDelta::FromMilliseconds(1), | 1127 base::TimeDelta::FromMilliseconds(1), |
| 1115 base::TimeDelta::FromMilliseconds( | 1128 base::TimeDelta::FromMilliseconds( |
| 1116 begin_main_frame_to_commit_estimate_in_ms), | 1129 begin_main_frame_to_commit_estimate_in_ms), |
| 1117 base::TimeDelta::FromMilliseconds(commit_to_activate_estimate_in_ms)); | 1130 base::TimeDelta::FromMilliseconds(commit_to_activate_estimate_in_ms)); |
| 1118 SchedulerSettings default_scheduler_settings; | 1131 SchedulerSettings scheduler_settings; |
| 1119 TestScheduler* scheduler = client.CreateScheduler(default_scheduler_settings); | 1132 scheduler_settings.use_external_begin_frame_source = true; |
| 1133 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); |
| 1120 scheduler->SetCanStart(); | 1134 scheduler->SetCanStart(); |
| 1121 scheduler->SetVisible(true); | 1135 scheduler->SetVisible(true); |
| 1122 scheduler->SetCanDraw(true); | 1136 scheduler->SetCanDraw(true); |
| 1123 scheduler->SetImplLatencyTakesPriority(impl_latency_takes_priority); | 1137 scheduler->SetImplLatencyTakesPriority(impl_latency_takes_priority); |
| 1124 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); | 1138 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); |
| 1125 | 1139 |
| 1126 // Impl thread hits deadline before commit finishes. | 1140 // Impl thread hits deadline before commit finishes. |
| 1127 client.Reset(); | 1141 client.Reset(); |
| 1128 scheduler->SetNeedsCommit(); | 1142 scheduler->SetNeedsCommit(); |
| 1129 EXPECT_FALSE(scheduler->MainThreadIsInHighLatencyMode()); | 1143 EXPECT_FALSE(scheduler->MainThreadIsInHighLatencyMode()); |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1175 } | 1189 } |
| 1176 | 1190 |
| 1177 TEST(SchedulerTest, PollForCommitCompletion) { | 1191 TEST(SchedulerTest, PollForCommitCompletion) { |
| 1178 // Since we are simulating a long commit, set up a client with draw duration | 1192 // Since we are simulating a long commit, set up a client with draw duration |
| 1179 // estimates that prevent skipping main frames to get to low latency mode. | 1193 // estimates that prevent skipping main frames to get to low latency mode. |
| 1180 SchedulerClientWithFixedEstimates client( | 1194 SchedulerClientWithFixedEstimates client( |
| 1181 base::TimeDelta::FromMilliseconds(1), | 1195 base::TimeDelta::FromMilliseconds(1), |
| 1182 base::TimeDelta::FromMilliseconds(32), | 1196 base::TimeDelta::FromMilliseconds(32), |
| 1183 base::TimeDelta::FromMilliseconds(32)); | 1197 base::TimeDelta::FromMilliseconds(32)); |
| 1184 client.set_log_anticipated_draw_time_change(true); | 1198 client.set_log_anticipated_draw_time_change(true); |
| 1185 SchedulerSettings default_scheduler_settings; | 1199 SchedulerSettings scheduler_settings; |
| 1186 TestScheduler* scheduler = client.CreateScheduler(default_scheduler_settings); | 1200 scheduler_settings.use_external_begin_frame_source = true; |
| 1201 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); |
| 1187 | 1202 |
| 1188 scheduler->SetCanDraw(true); | 1203 scheduler->SetCanDraw(true); |
| 1189 scheduler->SetCanStart(); | 1204 scheduler->SetCanStart(); |
| 1190 scheduler->SetVisible(true); | 1205 scheduler->SetVisible(true); |
| 1191 scheduler->DidCreateAndInitializeOutputSurface(); | 1206 scheduler->DidCreateAndInitializeOutputSurface(); |
| 1192 | 1207 |
| 1193 scheduler->SetNeedsCommit(); | 1208 scheduler->SetNeedsCommit(); |
| 1194 EXPECT_TRUE(scheduler->CommitPending()); | 1209 EXPECT_TRUE(scheduler->CommitPending()); |
| 1195 scheduler->NotifyBeginMainFrameStarted(); | 1210 scheduler->NotifyBeginMainFrameStarted(); |
| 1196 scheduler->NotifyReadyToCommit(); | 1211 scheduler->NotifyReadyToCommit(); |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1247 EXPECT_GT(client.num_actions_(), actions_so_far); | 1262 EXPECT_GT(client.num_actions_(), actions_so_far); |
| 1248 EXPECT_STREQ(client.Action(client.num_actions_() - 1), | 1263 EXPECT_STREQ(client.Action(client.num_actions_() - 1), |
| 1249 "DidAnticipatedDrawTimeChange"); | 1264 "DidAnticipatedDrawTimeChange"); |
| 1250 actions_so_far = client.num_actions_(); | 1265 actions_so_far = client.num_actions_(); |
| 1251 } | 1266 } |
| 1252 } | 1267 } |
| 1253 | 1268 |
| 1254 TEST(SchedulerTest, BeginRetroFrame) { | 1269 TEST(SchedulerTest, BeginRetroFrame) { |
| 1255 FakeSchedulerClient client; | 1270 FakeSchedulerClient client; |
| 1256 SchedulerSettings scheduler_settings; | 1271 SchedulerSettings scheduler_settings; |
| 1272 scheduler_settings.use_external_begin_frame_source = true; |
| 1257 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); | 1273 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); |
| 1258 scheduler->SetCanStart(); | 1274 scheduler->SetCanStart(); |
| 1259 scheduler->SetVisible(true); | 1275 scheduler->SetVisible(true); |
| 1260 scheduler->SetCanDraw(true); | 1276 scheduler->SetCanDraw(true); |
| 1261 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); | 1277 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); |
| 1262 | 1278 |
| 1263 // SetNeedsCommit should begin the frame on the next BeginImplFrame. | 1279 // SetNeedsCommit should begin the frame on the next BeginImplFrame. |
| 1264 client.Reset(); | 1280 client.Reset(); |
| 1265 scheduler->SetNeedsCommit(); | 1281 scheduler->SetNeedsCommit(); |
| 1266 EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client); | 1282 EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client); |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1320 client.Reset(); | 1336 client.Reset(); |
| 1321 | 1337 |
| 1322 client.task_runner().RunPendingTasks(); // Run posted deadline. | 1338 client.task_runner().RunPendingTasks(); // Run posted deadline. |
| 1323 EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(false)", client); | 1339 EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(false)", client); |
| 1324 client.Reset(); | 1340 client.Reset(); |
| 1325 } | 1341 } |
| 1326 | 1342 |
| 1327 TEST(SchedulerTest, BeginRetroFrame_SwapThrottled) { | 1343 TEST(SchedulerTest, BeginRetroFrame_SwapThrottled) { |
| 1328 FakeSchedulerClient client; | 1344 FakeSchedulerClient client; |
| 1329 SchedulerSettings scheduler_settings; | 1345 SchedulerSettings scheduler_settings; |
| 1346 scheduler_settings.use_external_begin_frame_source = true; |
| 1330 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); | 1347 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); |
| 1331 scheduler->SetCanStart(); | 1348 scheduler->SetCanStart(); |
| 1332 scheduler->SetVisible(true); | 1349 scheduler->SetVisible(true); |
| 1333 scheduler->SetCanDraw(true); | 1350 scheduler->SetCanDraw(true); |
| 1334 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); | 1351 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); |
| 1335 | 1352 |
| 1336 // To test swap ack throttling, this test disables automatic swap acks. | 1353 // To test swap ack throttling, this test disables automatic swap acks. |
| 1337 scheduler->SetMaxSwapsPending(1); | 1354 scheduler->SetMaxSwapsPending(1); |
| 1338 client.SetAutomaticSwapAck(false); | 1355 client.SetAutomaticSwapAck(false); |
| 1339 | 1356 |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1407 EXPECT_TRUE(client.task_runner().RunTasksWhile( | 1424 EXPECT_TRUE(client.task_runner().RunTasksWhile( |
| 1408 client.ImplFrameDeadlinePending(true))); | 1425 client.ImplFrameDeadlinePending(true))); |
| 1409 | 1426 |
| 1410 EXPECT_ACTION("ScheduledActionAnimate", client, 0, 2); | 1427 EXPECT_ACTION("ScheduledActionAnimate", client, 0, 2); |
| 1411 EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client, 1, 2); | 1428 EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client, 1, 2); |
| 1412 EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending()); | 1429 EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending()); |
| 1413 EXPECT_TRUE(client.needs_begin_frames()); | 1430 EXPECT_TRUE(client.needs_begin_frames()); |
| 1414 client.Reset(); | 1431 client.Reset(); |
| 1415 } | 1432 } |
| 1416 | 1433 |
| 1417 void BeginFramesNotFromClient(bool begin_frame_scheduling_enabled, | 1434 void BeginFramesNotFromClient(bool use_external_begin_frame_source, |
| 1418 bool throttle_frame_production) { | 1435 bool throttle_frame_production) { |
| 1419 FakeSchedulerClient client; | 1436 FakeSchedulerClient client; |
| 1420 SchedulerSettings scheduler_settings; | 1437 SchedulerSettings scheduler_settings; |
| 1421 scheduler_settings.begin_frame_scheduling_enabled = | 1438 scheduler_settings.use_external_begin_frame_source = |
| 1422 begin_frame_scheduling_enabled; | 1439 use_external_begin_frame_source; |
| 1423 scheduler_settings.throttle_frame_production = throttle_frame_production; | 1440 scheduler_settings.throttle_frame_production = throttle_frame_production; |
| 1424 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); | 1441 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); |
| 1425 scheduler->SetCanStart(); | 1442 scheduler->SetCanStart(); |
| 1426 scheduler->SetVisible(true); | 1443 scheduler->SetVisible(true); |
| 1427 scheduler->SetCanDraw(true); | 1444 scheduler->SetCanDraw(true); |
| 1428 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); | 1445 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); |
| 1429 | 1446 |
| 1430 DCHECK(!client.fake_external_begin_frame_source()); | 1447 DCHECK(!client.fake_external_begin_frame_source()); |
| 1431 | 1448 |
| 1432 // SetNeedsCommit should begin the frame on the next BeginImplFrame | 1449 // SetNeedsCommit should begin the frame on the next BeginImplFrame |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1477 client.Reset(); | 1494 client.Reset(); |
| 1478 | 1495 |
| 1479 // Make sure SetNeedsBeginFrame isn't called on the client | 1496 // Make sure SetNeedsBeginFrame isn't called on the client |
| 1480 // when the BeginFrame is no longer needed. | 1497 // when the BeginFrame is no longer needed. |
| 1481 client.task_runner().RunPendingTasks(); // Run posted deadline. | 1498 client.task_runner().RunPendingTasks(); // Run posted deadline. |
| 1482 EXPECT_NO_ACTION(client); | 1499 EXPECT_NO_ACTION(client); |
| 1483 client.Reset(); | 1500 client.Reset(); |
| 1484 } | 1501 } |
| 1485 | 1502 |
| 1486 TEST(SchedulerTest, SyntheticBeginFrames) { | 1503 TEST(SchedulerTest, SyntheticBeginFrames) { |
| 1487 bool begin_frame_scheduling_enabled = false; | 1504 bool use_external_begin_frame_source = false; |
| 1488 bool throttle_frame_production = true; | 1505 bool throttle_frame_production = true; |
| 1489 BeginFramesNotFromClient(begin_frame_scheduling_enabled, | 1506 BeginFramesNotFromClient(use_external_begin_frame_source, |
| 1490 throttle_frame_production); | 1507 throttle_frame_production); |
| 1491 } | 1508 } |
| 1492 | 1509 |
| 1493 TEST(SchedulerTest, VSyncThrottlingDisabled) { | 1510 TEST(SchedulerTest, VSyncThrottlingDisabled) { |
| 1494 bool begin_frame_scheduling_enabled = true; | 1511 bool use_external_begin_frame_source = true; |
| 1495 bool throttle_frame_production = false; | 1512 bool throttle_frame_production = false; |
| 1496 BeginFramesNotFromClient(begin_frame_scheduling_enabled, | 1513 BeginFramesNotFromClient(use_external_begin_frame_source, |
| 1497 throttle_frame_production); | 1514 throttle_frame_production); |
| 1498 } | 1515 } |
| 1499 | 1516 |
| 1500 TEST(SchedulerTest, SyntheticBeginFrames_And_VSyncThrottlingDisabled) { | 1517 TEST(SchedulerTest, SyntheticBeginFrames_And_VSyncThrottlingDisabled) { |
| 1501 bool begin_frame_scheduling_enabled = false; | 1518 bool use_external_begin_frame_source = false; |
| 1502 bool throttle_frame_production = false; | 1519 bool throttle_frame_production = false; |
| 1503 BeginFramesNotFromClient(begin_frame_scheduling_enabled, | 1520 BeginFramesNotFromClient(use_external_begin_frame_source, |
| 1504 throttle_frame_production); | 1521 throttle_frame_production); |
| 1505 } | 1522 } |
| 1506 | 1523 |
| 1507 void BeginFramesNotFromClient_SwapThrottled(bool begin_frame_scheduling_enabled, | 1524 void BeginFramesNotFromClient_SwapThrottled( |
| 1508 bool throttle_frame_production) { | 1525 bool use_external_begin_frame_source, |
| 1526 bool throttle_frame_production) { |
| 1509 FakeSchedulerClient client; | 1527 FakeSchedulerClient client; |
| 1510 SchedulerSettings scheduler_settings; | 1528 SchedulerSettings scheduler_settings; |
| 1511 scheduler_settings.begin_frame_scheduling_enabled = | 1529 scheduler_settings.use_external_begin_frame_source = |
| 1512 begin_frame_scheduling_enabled; | 1530 use_external_begin_frame_source; |
| 1513 scheduler_settings.throttle_frame_production = throttle_frame_production; | 1531 scheduler_settings.throttle_frame_production = throttle_frame_production; |
| 1514 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); | 1532 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); |
| 1515 scheduler->SetCanStart(); | 1533 scheduler->SetCanStart(); |
| 1516 scheduler->SetVisible(true); | 1534 scheduler->SetVisible(true); |
| 1517 scheduler->SetCanDraw(true); | 1535 scheduler->SetCanDraw(true); |
| 1518 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); | 1536 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); |
| 1519 | 1537 |
| 1520 DCHECK(!client.fake_external_begin_frame_source()); | 1538 DCHECK(!client.fake_external_begin_frame_source()); |
| 1521 | 1539 |
| 1522 // To test swap ack throttling, this test disables automatic swap acks. | 1540 // To test swap ack throttling, this test disables automatic swap acks. |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1566 // BeginImplFrame deadline should draw. | 1584 // BeginImplFrame deadline should draw. |
| 1567 scheduler->SetNeedsRedraw(); | 1585 scheduler->SetNeedsRedraw(); |
| 1568 client.task_runner().RunPendingTasks(); // Run posted deadline. | 1586 client.task_runner().RunPendingTasks(); // Run posted deadline. |
| 1569 EXPECT_ACTION("ScheduledActionAnimate", client, 0, 2); | 1587 EXPECT_ACTION("ScheduledActionAnimate", client, 0, 2); |
| 1570 EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client, 1, 2); | 1588 EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client, 1, 2); |
| 1571 EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending()); | 1589 EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending()); |
| 1572 client.Reset(); | 1590 client.Reset(); |
| 1573 } | 1591 } |
| 1574 | 1592 |
| 1575 TEST(SchedulerTest, SyntheticBeginFrames_SwapThrottled) { | 1593 TEST(SchedulerTest, SyntheticBeginFrames_SwapThrottled) { |
| 1576 bool begin_frame_scheduling_enabled = false; | 1594 bool use_external_begin_frame_source = false; |
| 1577 bool throttle_frame_production = true; | 1595 bool throttle_frame_production = true; |
| 1578 BeginFramesNotFromClient_SwapThrottled(begin_frame_scheduling_enabled, | 1596 BeginFramesNotFromClient_SwapThrottled(use_external_begin_frame_source, |
| 1579 throttle_frame_production); | 1597 throttle_frame_production); |
| 1580 } | 1598 } |
| 1581 | 1599 |
| 1582 TEST(SchedulerTest, VSyncThrottlingDisabled_SwapThrottled) { | 1600 TEST(SchedulerTest, VSyncThrottlingDisabled_SwapThrottled) { |
| 1583 bool begin_frame_scheduling_enabled = true; | 1601 bool use_external_begin_frame_source = true; |
| 1584 bool throttle_frame_production = false; | 1602 bool throttle_frame_production = false; |
| 1585 BeginFramesNotFromClient_SwapThrottled(begin_frame_scheduling_enabled, | 1603 BeginFramesNotFromClient_SwapThrottled(use_external_begin_frame_source, |
| 1586 throttle_frame_production); | 1604 throttle_frame_production); |
| 1587 } | 1605 } |
| 1588 | 1606 |
| 1589 TEST(SchedulerTest, | 1607 TEST(SchedulerTest, |
| 1590 SyntheticBeginFrames_And_VSyncThrottlingDisabled_SwapThrottled) { | 1608 SyntheticBeginFrames_And_VSyncThrottlingDisabled_SwapThrottled) { |
| 1591 bool begin_frame_scheduling_enabled = false; | 1609 bool use_external_begin_frame_source = false; |
| 1592 bool throttle_frame_production = false; | 1610 bool throttle_frame_production = false; |
| 1593 BeginFramesNotFromClient_SwapThrottled(begin_frame_scheduling_enabled, | 1611 BeginFramesNotFromClient_SwapThrottled(use_external_begin_frame_source, |
| 1594 throttle_frame_production); | 1612 throttle_frame_production); |
| 1595 } | 1613 } |
| 1596 | 1614 |
| 1597 TEST(SchedulerTest, DidLoseOutputSurfaceAfterOutputSurfaceIsInitialized) { | 1615 TEST(SchedulerTest, DidLoseOutputSurfaceAfterOutputSurfaceIsInitialized) { |
| 1598 FakeSchedulerClient client; | 1616 FakeSchedulerClient client; |
| 1599 SchedulerSettings scheduler_settings; | 1617 SchedulerSettings scheduler_settings; |
| 1618 scheduler_settings.use_external_begin_frame_source = true; |
| 1600 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); | 1619 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); |
| 1601 scheduler->SetCanStart(); | 1620 scheduler->SetCanStart(); |
| 1602 scheduler->SetVisible(true); | 1621 scheduler->SetVisible(true); |
| 1603 scheduler->SetCanDraw(true); | 1622 scheduler->SetCanDraw(true); |
| 1604 | 1623 |
| 1605 EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client); | 1624 EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client); |
| 1606 client.Reset(); | 1625 client.Reset(); |
| 1607 scheduler->DidCreateAndInitializeOutputSurface(); | 1626 scheduler->DidCreateAndInitializeOutputSurface(); |
| 1608 EXPECT_NO_ACTION(client); | 1627 EXPECT_NO_ACTION(client); |
| 1609 | 1628 |
| 1610 scheduler->DidLoseOutputSurface(); | 1629 scheduler->DidLoseOutputSurface(); |
| 1611 EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client); | 1630 EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client); |
| 1612 } | 1631 } |
| 1613 | 1632 |
| 1614 TEST(SchedulerTest, DidLoseOutputSurfaceAfterBeginFrameStarted) { | 1633 TEST(SchedulerTest, DidLoseOutputSurfaceAfterBeginFrameStarted) { |
| 1615 FakeSchedulerClient client; | 1634 FakeSchedulerClient client; |
| 1616 SchedulerSettings scheduler_settings; | 1635 SchedulerSettings scheduler_settings; |
| 1636 scheduler_settings.use_external_begin_frame_source = true; |
| 1617 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); | 1637 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); |
| 1618 scheduler->SetCanStart(); | 1638 scheduler->SetCanStart(); |
| 1619 scheduler->SetVisible(true); | 1639 scheduler->SetVisible(true); |
| 1620 scheduler->SetCanDraw(true); | 1640 scheduler->SetCanDraw(true); |
| 1621 | 1641 |
| 1622 EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client); | 1642 EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client); |
| 1623 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); | 1643 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); |
| 1624 // SetNeedsCommit should begin the frame. | 1644 // SetNeedsCommit should begin the frame. |
| 1625 client.Reset(); | 1645 client.Reset(); |
| 1626 scheduler->SetNeedsCommit(); | 1646 scheduler->SetNeedsCommit(); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 1645 client.Reset(); | 1665 client.Reset(); |
| 1646 client.task_runner().RunPendingTasks(); // Run posted deadline. | 1666 client.task_runner().RunPendingTasks(); // Run posted deadline. |
| 1647 EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client); | 1667 EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client); |
| 1648 } | 1668 } |
| 1649 | 1669 |
| 1650 void DidLoseOutputSurfaceAfterBeginFrameStartedWithHighLatency( | 1670 void DidLoseOutputSurfaceAfterBeginFrameStartedWithHighLatency( |
| 1651 bool impl_side_painting) { | 1671 bool impl_side_painting) { |
| 1652 FakeSchedulerClient client; | 1672 FakeSchedulerClient client; |
| 1653 SchedulerSettings scheduler_settings; | 1673 SchedulerSettings scheduler_settings; |
| 1654 scheduler_settings.impl_side_painting = impl_side_painting; | 1674 scheduler_settings.impl_side_painting = impl_side_painting; |
| 1675 scheduler_settings.use_external_begin_frame_source = true; |
| 1655 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); | 1676 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); |
| 1656 scheduler->SetCanStart(); | 1677 scheduler->SetCanStart(); |
| 1657 scheduler->SetVisible(true); | 1678 scheduler->SetVisible(true); |
| 1658 scheduler->SetCanDraw(true); | 1679 scheduler->SetCanDraw(true); |
| 1659 | 1680 |
| 1660 EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client); | 1681 EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client); |
| 1661 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); | 1682 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); |
| 1662 | 1683 |
| 1663 // SetNeedsCommit should begin the frame. | 1684 // SetNeedsCommit should begin the frame. |
| 1664 client.Reset(); | 1685 client.Reset(); |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1712 TEST(SchedulerTest, | 1733 TEST(SchedulerTest, |
| 1713 DidLoseOutputSurfaceAfterBeginFrameStartedWithHighLatencyWithImplPaint) { | 1734 DidLoseOutputSurfaceAfterBeginFrameStartedWithHighLatencyWithImplPaint) { |
| 1714 bool impl_side_painting = true; | 1735 bool impl_side_painting = true; |
| 1715 DidLoseOutputSurfaceAfterBeginFrameStartedWithHighLatency(impl_side_painting); | 1736 DidLoseOutputSurfaceAfterBeginFrameStartedWithHighLatency(impl_side_painting); |
| 1716 } | 1737 } |
| 1717 | 1738 |
| 1718 void DidLoseOutputSurfaceAfterReadyToCommit(bool impl_side_painting) { | 1739 void DidLoseOutputSurfaceAfterReadyToCommit(bool impl_side_painting) { |
| 1719 FakeSchedulerClient client; | 1740 FakeSchedulerClient client; |
| 1720 SchedulerSettings scheduler_settings; | 1741 SchedulerSettings scheduler_settings; |
| 1721 scheduler_settings.impl_side_painting = impl_side_painting; | 1742 scheduler_settings.impl_side_painting = impl_side_painting; |
| 1743 scheduler_settings.use_external_begin_frame_source = true; |
| 1722 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); | 1744 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); |
| 1723 scheduler->SetCanStart(); | 1745 scheduler->SetCanStart(); |
| 1724 scheduler->SetVisible(true); | 1746 scheduler->SetVisible(true); |
| 1725 scheduler->SetCanDraw(true); | 1747 scheduler->SetCanDraw(true); |
| 1726 | 1748 |
| 1727 EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client); | 1749 EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client); |
| 1728 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); | 1750 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); |
| 1729 | 1751 |
| 1730 // SetNeedsCommit should begin the frame. | 1752 // SetNeedsCommit should begin the frame. |
| 1731 client.Reset(); | 1753 client.Reset(); |
| (...skipping 30 matching lines...) Expand all Loading... |
| 1762 DidLoseOutputSurfaceAfterReadyToCommit(false); | 1784 DidLoseOutputSurfaceAfterReadyToCommit(false); |
| 1763 } | 1785 } |
| 1764 | 1786 |
| 1765 TEST(SchedulerTest, DidLoseOutputSurfaceAfterReadyToCommitWithImplPainting) { | 1787 TEST(SchedulerTest, DidLoseOutputSurfaceAfterReadyToCommitWithImplPainting) { |
| 1766 DidLoseOutputSurfaceAfterReadyToCommit(true); | 1788 DidLoseOutputSurfaceAfterReadyToCommit(true); |
| 1767 } | 1789 } |
| 1768 | 1790 |
| 1769 TEST(SchedulerTest, DidLoseOutputSurfaceAfterSetNeedsManageTiles) { | 1791 TEST(SchedulerTest, DidLoseOutputSurfaceAfterSetNeedsManageTiles) { |
| 1770 FakeSchedulerClient client; | 1792 FakeSchedulerClient client; |
| 1771 SchedulerSettings scheduler_settings; | 1793 SchedulerSettings scheduler_settings; |
| 1794 scheduler_settings.use_external_begin_frame_source = true; |
| 1772 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); | 1795 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); |
| 1773 scheduler->SetCanStart(); | 1796 scheduler->SetCanStart(); |
| 1774 scheduler->SetVisible(true); | 1797 scheduler->SetVisible(true); |
| 1775 scheduler->SetCanDraw(true); | 1798 scheduler->SetCanDraw(true); |
| 1776 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); | 1799 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); |
| 1777 | 1800 |
| 1778 client.Reset(); | 1801 client.Reset(); |
| 1779 scheduler->SetNeedsManageTiles(); | 1802 scheduler->SetNeedsManageTiles(); |
| 1780 scheduler->SetNeedsRedraw(); | 1803 scheduler->SetNeedsRedraw(); |
| 1781 EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client); | 1804 EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 1792 | 1815 |
| 1793 client.Reset(); | 1816 client.Reset(); |
| 1794 client.task_runner().RunPendingTasks(); // Run posted deadline. | 1817 client.task_runner().RunPendingTasks(); // Run posted deadline. |
| 1795 EXPECT_ACTION("ScheduledActionManageTiles", client, 0, 2); | 1818 EXPECT_ACTION("ScheduledActionManageTiles", client, 0, 2); |
| 1796 EXPECT_ACTION("ScheduledActionBeginOutputSurfaceCreation", client, 1, 2); | 1819 EXPECT_ACTION("ScheduledActionBeginOutputSurfaceCreation", client, 1, 2); |
| 1797 } | 1820 } |
| 1798 | 1821 |
| 1799 TEST(SchedulerTest, DidLoseOutputSurfaceAfterBeginRetroFramePosted) { | 1822 TEST(SchedulerTest, DidLoseOutputSurfaceAfterBeginRetroFramePosted) { |
| 1800 FakeSchedulerClient client; | 1823 FakeSchedulerClient client; |
| 1801 SchedulerSettings scheduler_settings; | 1824 SchedulerSettings scheduler_settings; |
| 1825 scheduler_settings.use_external_begin_frame_source = true; |
| 1802 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); | 1826 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); |
| 1803 scheduler->SetCanStart(); | 1827 scheduler->SetCanStart(); |
| 1804 scheduler->SetVisible(true); | 1828 scheduler->SetVisible(true); |
| 1805 scheduler->SetCanDraw(true); | 1829 scheduler->SetCanDraw(true); |
| 1806 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); | 1830 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); |
| 1807 | 1831 |
| 1808 // SetNeedsCommit should begin the frame on the next BeginImplFrame. | 1832 // SetNeedsCommit should begin the frame on the next BeginImplFrame. |
| 1809 client.Reset(); | 1833 client.Reset(); |
| 1810 scheduler->SetNeedsCommit(); | 1834 scheduler->SetNeedsCommit(); |
| 1811 EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client); | 1835 EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client); |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1850 | 1874 |
| 1851 // Posted BeginRetroFrame is aborted. | 1875 // Posted BeginRetroFrame is aborted. |
| 1852 client.Reset(); | 1876 client.Reset(); |
| 1853 client.task_runner().RunPendingTasks(); | 1877 client.task_runner().RunPendingTasks(); |
| 1854 EXPECT_NO_ACTION(client); | 1878 EXPECT_NO_ACTION(client); |
| 1855 } | 1879 } |
| 1856 | 1880 |
| 1857 TEST(SchedulerTest, DidLoseOutputSurfaceDuringBeginRetroFrameRunning) { | 1881 TEST(SchedulerTest, DidLoseOutputSurfaceDuringBeginRetroFrameRunning) { |
| 1858 FakeSchedulerClient client; | 1882 FakeSchedulerClient client; |
| 1859 SchedulerSettings scheduler_settings; | 1883 SchedulerSettings scheduler_settings; |
| 1884 scheduler_settings.use_external_begin_frame_source = true; |
| 1860 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); | 1885 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); |
| 1861 scheduler->SetCanStart(); | 1886 scheduler->SetCanStart(); |
| 1862 scheduler->SetVisible(true); | 1887 scheduler->SetVisible(true); |
| 1863 scheduler->SetCanDraw(true); | 1888 scheduler->SetCanDraw(true); |
| 1864 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); | 1889 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); |
| 1865 | 1890 |
| 1866 // SetNeedsCommit should begin the frame on the next BeginImplFrame. | 1891 // SetNeedsCommit should begin the frame on the next BeginImplFrame. |
| 1867 client.Reset(); | 1892 client.Reset(); |
| 1868 scheduler->SetNeedsCommit(); | 1893 scheduler->SetNeedsCommit(); |
| 1869 EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client); | 1894 EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client); |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1923 // No more BeginRetroFrame because BeginRetroFrame queue is cleared. | 1948 // No more BeginRetroFrame because BeginRetroFrame queue is cleared. |
| 1924 client.Reset(); | 1949 client.Reset(); |
| 1925 client.task_runner().RunPendingTasks(); | 1950 client.task_runner().RunPendingTasks(); |
| 1926 EXPECT_NO_ACTION(client); | 1951 EXPECT_NO_ACTION(client); |
| 1927 } | 1952 } |
| 1928 | 1953 |
| 1929 TEST(SchedulerTest, | 1954 TEST(SchedulerTest, |
| 1930 StopBeginFrameAfterDidLoseOutputSurfaceWithSyntheticBeginFrameSource) { | 1955 StopBeginFrameAfterDidLoseOutputSurfaceWithSyntheticBeginFrameSource) { |
| 1931 FakeSchedulerClient client; | 1956 FakeSchedulerClient client; |
| 1932 SchedulerSettings scheduler_settings; | 1957 SchedulerSettings scheduler_settings; |
| 1933 scheduler_settings.begin_frame_scheduling_enabled = false; | |
| 1934 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); | 1958 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); |
| 1935 scheduler->SetCanStart(); | 1959 scheduler->SetCanStart(); |
| 1936 scheduler->SetVisible(true); | 1960 scheduler->SetVisible(true); |
| 1937 scheduler->SetCanDraw(true); | 1961 scheduler->SetCanDraw(true); |
| 1938 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); | 1962 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); |
| 1939 | 1963 |
| 1940 // SetNeedsCommit should begin the frame on the next BeginImplFrame. | 1964 // SetNeedsCommit should begin the frame on the next BeginImplFrame. |
| 1941 client.Reset(); | 1965 client.Reset(); |
| 1942 EXPECT_FALSE(scheduler->frame_source().NeedsBeginFrames()); | 1966 EXPECT_FALSE(scheduler->frame_source().NeedsBeginFrames()); |
| 1943 scheduler->SetNeedsCommit(); | 1967 scheduler->SetNeedsCommit(); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 1965 client.Reset(); | 1989 client.Reset(); |
| 1966 client.task_runner().RunPendingTasks(); // Run posted deadline. | 1990 client.task_runner().RunPendingTasks(); // Run posted deadline. |
| 1967 EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client); | 1991 EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client); |
| 1968 EXPECT_FALSE(scheduler->frame_source().NeedsBeginFrames()); | 1992 EXPECT_FALSE(scheduler->frame_source().NeedsBeginFrames()); |
| 1969 } | 1993 } |
| 1970 | 1994 |
| 1971 TEST(SchedulerTest, ScheduledActionActivateAfterBecomingInvisible) { | 1995 TEST(SchedulerTest, ScheduledActionActivateAfterBecomingInvisible) { |
| 1972 FakeSchedulerClient client; | 1996 FakeSchedulerClient client; |
| 1973 SchedulerSettings scheduler_settings; | 1997 SchedulerSettings scheduler_settings; |
| 1974 scheduler_settings.impl_side_painting = true; | 1998 scheduler_settings.impl_side_painting = true; |
| 1999 scheduler_settings.use_external_begin_frame_source = true; |
| 1975 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); | 2000 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); |
| 1976 scheduler->SetCanStart(); | 2001 scheduler->SetCanStart(); |
| 1977 scheduler->SetVisible(true); | 2002 scheduler->SetVisible(true); |
| 1978 scheduler->SetCanDraw(true); | 2003 scheduler->SetCanDraw(true); |
| 1979 | 2004 |
| 1980 EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client); | 2005 EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client); |
| 1981 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); | 2006 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); |
| 1982 | 2007 |
| 1983 // SetNeedsCommit should begin the frame. | 2008 // SetNeedsCommit should begin the frame. |
| 1984 client.Reset(); | 2009 client.Reset(); |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2065 before_deadline = client.now_src()->Now(); | 2090 before_deadline = client.now_src()->Now(); |
| 2066 EXPECT_TRUE(client.task_runner().RunTasksWhile( | 2091 EXPECT_TRUE(client.task_runner().RunTasksWhile( |
| 2067 client.ImplFrameDeadlinePending(true))); | 2092 client.ImplFrameDeadlinePending(true))); |
| 2068 after_deadline = client.now_src()->Now(); | 2093 after_deadline = client.now_src()->Now(); |
| 2069 } | 2094 } |
| 2070 | 2095 |
| 2071 TEST(SchedulerTest, | 2096 TEST(SchedulerTest, |
| 2072 SimulateWindowsLowResolutionTimerOnBattery_PrioritizeImplLatencyOff) { | 2097 SimulateWindowsLowResolutionTimerOnBattery_PrioritizeImplLatencyOff) { |
| 2073 FakeSchedulerClient client; | 2098 FakeSchedulerClient client; |
| 2074 SchedulerSettings settings; | 2099 SchedulerSettings settings; |
| 2100 settings.use_external_begin_frame_source = true; |
| 2075 TestScheduler* scheduler = client.CreateScheduler(settings); | 2101 TestScheduler* scheduler = client.CreateScheduler(settings); |
| 2076 | 2102 |
| 2077 scheduler->SetCanStart(); | 2103 scheduler->SetCanStart(); |
| 2078 scheduler->SetVisible(true); | 2104 scheduler->SetVisible(true); |
| 2079 scheduler->SetCanDraw(true); | 2105 scheduler->SetCanDraw(true); |
| 2080 | 2106 |
| 2081 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); | 2107 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); |
| 2082 | 2108 |
| 2083 // Set needs commit so that the scheduler tries to wait for the main thread | 2109 // Set needs commit so that the scheduler tries to wait for the main thread |
| 2084 scheduler->SetNeedsCommit(); | 2110 scheduler->SetNeedsCommit(); |
| (...skipping 25 matching lines...) Expand all Loading... |
| 2110 client.task_runner().RunPendingTasks(); | 2136 client.task_runner().RunPendingTasks(); |
| 2111 // Deadline task finally completes | 2137 // Deadline task finally completes |
| 2112 EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending()); | 2138 EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending()); |
| 2113 } | 2139 } |
| 2114 | 2140 |
| 2115 TEST(SchedulerTest, | 2141 TEST(SchedulerTest, |
| 2116 SimulateWindowsLowResolutionTimerOnBattery_PrioritizeImplLatencyOn) { | 2142 SimulateWindowsLowResolutionTimerOnBattery_PrioritizeImplLatencyOn) { |
| 2117 FakeSchedulerClient client; | 2143 FakeSchedulerClient client; |
| 2118 SchedulerSettings settings; | 2144 SchedulerSettings settings; |
| 2119 settings.disable_hi_res_timer_tasks_on_battery = true; | 2145 settings.disable_hi_res_timer_tasks_on_battery = true; |
| 2146 settings.use_external_begin_frame_source = true; |
| 2120 TestScheduler* scheduler = client.CreateScheduler(settings); | 2147 TestScheduler* scheduler = client.CreateScheduler(settings); |
| 2121 | 2148 |
| 2122 scheduler->SetCanStart(); | 2149 scheduler->SetCanStart(); |
| 2123 scheduler->SetVisible(true); | 2150 scheduler->SetVisible(true); |
| 2124 scheduler->SetCanDraw(true); | 2151 scheduler->SetCanDraw(true); |
| 2125 | 2152 |
| 2126 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); | 2153 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); |
| 2127 | 2154 |
| 2128 // Set needs commit so that the scheduler tries to wait for the main thread | 2155 // Set needs commit so that the scheduler tries to wait for the main thread |
| 2129 scheduler->SetNeedsCommit(); | 2156 scheduler->SetNeedsCommit(); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 2145 | 2172 |
| 2146 // Deadline task is pending | 2173 // Deadline task is pending |
| 2147 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); | 2174 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); |
| 2148 client.task_runner().RunPendingTasks(); | 2175 client.task_runner().RunPendingTasks(); |
| 2149 // Deadline task runs immediately | 2176 // Deadline task runs immediately |
| 2150 EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending()); | 2177 EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending()); |
| 2151 } | 2178 } |
| 2152 | 2179 |
| 2153 } // namespace | 2180 } // namespace |
| 2154 } // namespace cc | 2181 } // namespace cc |
| OLD | NEW |