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

Side by Side Diff: cc/scheduler/scheduler_unittest.cc

Issue 696413003: cc: Introduce forward_begin_frames_to_children and use_external_begin_frame_source (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@sep
Patch Set: rebase on master Created 6 years, 1 month 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
« no previous file with comments | « cc/scheduler/scheduler_settings.cc ('k') | cc/test/layer_tree_test.cc » ('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 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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « cc/scheduler/scheduler_settings.cc ('k') | cc/test/layer_tree_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698