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

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: 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
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 #include "cc/scheduler/scheduler.h" 4 #include "cc/scheduler/scheduler.h"
5 5
6 #include <string> 6 #include <string>
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/debug/trace_event.h" 9 #include "base/debug/trace_event.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
107 actions_.clear(); 107 actions_.clear();
108 states_.clear(); 108 states_.clear();
109 draw_will_happen_ = true; 109 draw_will_happen_ = true;
110 swap_will_happen_if_draw_happens_ = true; 110 swap_will_happen_if_draw_happens_ = true;
111 num_draws_ = 0; 111 num_draws_ = 0;
112 log_anticipated_draw_time_change_ = false; 112 log_anticipated_draw_time_change_ = false;
113 } 113 }
114 114
115 TestScheduler* CreateScheduler(const SchedulerSettings& settings) { 115 TestScheduler* CreateScheduler(const SchedulerSettings& settings) {
116 scoped_ptr<FakeExternalBeginFrameSource> fake_external_begin_frame_source; 116 scoped_ptr<FakeExternalBeginFrameSource> fake_external_begin_frame_source;
117 if (settings.begin_frame_scheduling_enabled && 117 if (settings.begin_frame_receiver && settings.throttle_frame_production) {
118 settings.throttle_frame_production) {
119 fake_external_begin_frame_source.reset( 118 fake_external_begin_frame_source.reset(
120 new FakeExternalBeginFrameSource(this)); 119 new FakeExternalBeginFrameSource(this));
121 fake_external_begin_frame_source_ = 120 fake_external_begin_frame_source_ =
122 fake_external_begin_frame_source.get(); 121 fake_external_begin_frame_source.get();
123 } 122 }
124 scheduler_ = TestScheduler::Create(now_src_, 123 scheduler_ = TestScheduler::Create(now_src_,
125 this, 124 this,
126 settings, 125 settings,
127 0, 126 0,
128 task_runner_, 127 task_runner_,
(...skipping 14 matching lines...) Expand all
143 } 142 }
144 int num_draws() const { return num_draws_; } 143 int num_draws() const { return num_draws_; }
145 int num_actions_() const { return static_cast<int>(actions_.size()); } 144 int num_actions_() const { return static_cast<int>(actions_.size()); }
146 const char* Action(int i) const { return actions_[i]; } 145 const char* Action(int i) const { return actions_[i]; }
147 std::string StateForAction(int i) const { return states_[i]->ToString(); } 146 std::string StateForAction(int i) const { return states_[i]->ToString(); }
148 base::TimeTicks posted_begin_impl_frame_deadline() const { 147 base::TimeTicks posted_begin_impl_frame_deadline() const {
149 return posted_begin_impl_frame_deadline_; 148 return posted_begin_impl_frame_deadline_;
150 } 149 }
151 150
152 bool ExternalBeginFrame() { 151 bool ExternalBeginFrame() {
153 return scheduler_->settings().begin_frame_scheduling_enabled && 152 return scheduler_->settings().begin_frame_receiver &&
154 scheduler_->settings().throttle_frame_production; 153 scheduler_->settings().throttle_frame_production;
155 } 154 }
156 155
157 FakeExternalBeginFrameSource* ExternalBeginFrameSource() { 156 FakeExternalBeginFrameSource* ExternalBeginFrameSource() {
158 return fake_external_begin_frame_source_; 157 return fake_external_begin_frame_source_;
159 } 158 }
160 159
161 base::PowerMonitor* PowerMonitor() { return &power_monitor_; } 160 base::PowerMonitor* PowerMonitor() { return &power_monitor_; }
162 161
163 FakePowerMonitorSource* PowerMonitorSource() { 162 FakePowerMonitorSource* PowerMonitorSource() {
(...skipping 1243 matching lines...) Expand 10 before | Expand all | Expand 10 after
1407 EXPECT_TRUE(client.task_runner().RunTasksWhile( 1406 EXPECT_TRUE(client.task_runner().RunTasksWhile(
1408 client.ImplFrameDeadlinePending(true))); 1407 client.ImplFrameDeadlinePending(true)));
1409 1408
1410 EXPECT_ACTION("ScheduledActionAnimate", client, 0, 2); 1409 EXPECT_ACTION("ScheduledActionAnimate", client, 0, 2);
1411 EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client, 1, 2); 1410 EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client, 1, 2);
1412 EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending()); 1411 EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
1413 EXPECT_TRUE(client.needs_begin_frames()); 1412 EXPECT_TRUE(client.needs_begin_frames());
1414 client.Reset(); 1413 client.Reset();
1415 } 1414 }
1416 1415
1417 void BeginFramesNotFromClient(bool begin_frame_scheduling_enabled, 1416 void BeginFramesNotFromClient(bool begin_frame_receiver,
1418 bool throttle_frame_production) { 1417 bool throttle_frame_production) {
1419 FakeSchedulerClient client; 1418 FakeSchedulerClient client;
1420 SchedulerSettings scheduler_settings; 1419 SchedulerSettings scheduler_settings;
1421 scheduler_settings.begin_frame_scheduling_enabled = 1420 scheduler_settings.begin_frame_receiver = begin_frame_receiver;
1422 begin_frame_scheduling_enabled;
1423 scheduler_settings.throttle_frame_production = throttle_frame_production; 1421 scheduler_settings.throttle_frame_production = throttle_frame_production;
1424 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); 1422 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings);
1425 scheduler->SetCanStart(); 1423 scheduler->SetCanStart();
1426 scheduler->SetVisible(true); 1424 scheduler->SetVisible(true);
1427 scheduler->SetCanDraw(true); 1425 scheduler->SetCanDraw(true);
1428 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); 1426 InitializeOutputSurfaceAndFirstCommit(scheduler, &client);
1429 1427
1430 DCHECK(!client.ExternalBeginFrameSource()); 1428 DCHECK(!client.ExternalBeginFrameSource());
1431 1429
1432 // SetNeedsCommit should begin the frame on the next BeginImplFrame 1430 // SetNeedsCommit should begin the frame on the next BeginImplFrame
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
1477 client.Reset(); 1475 client.Reset();
1478 1476
1479 // Make sure SetNeedsBeginFrame isn't called on the client 1477 // Make sure SetNeedsBeginFrame isn't called on the client
1480 // when the BeginFrame is no longer needed. 1478 // when the BeginFrame is no longer needed.
1481 client.task_runner().RunPendingTasks(); // Run posted deadline. 1479 client.task_runner().RunPendingTasks(); // Run posted deadline.
1482 EXPECT_NO_ACTION(client); 1480 EXPECT_NO_ACTION(client);
1483 client.Reset(); 1481 client.Reset();
1484 } 1482 }
1485 1483
1486 TEST(SchedulerTest, SyntheticBeginFrames) { 1484 TEST(SchedulerTest, SyntheticBeginFrames) {
1487 bool begin_frame_scheduling_enabled = false; 1485 bool begin_frame_receiver = false;
1488 bool throttle_frame_production = true; 1486 bool throttle_frame_production = true;
1489 BeginFramesNotFromClient(begin_frame_scheduling_enabled, 1487 BeginFramesNotFromClient(begin_frame_receiver, throttle_frame_production);
1490 throttle_frame_production);
1491 } 1488 }
1492 1489
1493 TEST(SchedulerTest, VSyncThrottlingDisabled) { 1490 TEST(SchedulerTest, VSyncThrottlingDisabled) {
1494 bool begin_frame_scheduling_enabled = true; 1491 bool begin_frame_receiver = true;
1495 bool throttle_frame_production = false; 1492 bool throttle_frame_production = false;
1496 BeginFramesNotFromClient(begin_frame_scheduling_enabled, 1493 BeginFramesNotFromClient(begin_frame_receiver, throttle_frame_production);
1497 throttle_frame_production);
1498 } 1494 }
1499 1495
1500 TEST(SchedulerTest, SyntheticBeginFrames_And_VSyncThrottlingDisabled) { 1496 TEST(SchedulerTest, SyntheticBeginFrames_And_VSyncThrottlingDisabled) {
1501 bool begin_frame_scheduling_enabled = false; 1497 bool begin_frame_receiver = false;
1502 bool throttle_frame_production = false; 1498 bool throttle_frame_production = false;
1503 BeginFramesNotFromClient(begin_frame_scheduling_enabled, 1499 BeginFramesNotFromClient(begin_frame_receiver, throttle_frame_production);
1504 throttle_frame_production);
1505 } 1500 }
1506 1501
1507 void BeginFramesNotFromClient_SwapThrottled(bool begin_frame_scheduling_enabled, 1502 void BeginFramesNotFromClient_SwapThrottled(bool begin_frame_receiver,
1508 bool throttle_frame_production) { 1503 bool throttle_frame_production) {
1509 FakeSchedulerClient client; 1504 FakeSchedulerClient client;
1510 SchedulerSettings scheduler_settings; 1505 SchedulerSettings scheduler_settings;
1511 scheduler_settings.begin_frame_scheduling_enabled = 1506 scheduler_settings.begin_frame_receiver = begin_frame_receiver;
1512 begin_frame_scheduling_enabled;
1513 scheduler_settings.throttle_frame_production = throttle_frame_production; 1507 scheduler_settings.throttle_frame_production = throttle_frame_production;
1514 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); 1508 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings);
1515 scheduler->SetCanStart(); 1509 scheduler->SetCanStart();
1516 scheduler->SetVisible(true); 1510 scheduler->SetVisible(true);
1517 scheduler->SetCanDraw(true); 1511 scheduler->SetCanDraw(true);
1518 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); 1512 InitializeOutputSurfaceAndFirstCommit(scheduler, &client);
1519 1513
1520 DCHECK(!client.ExternalBeginFrameSource()); 1514 DCHECK(!client.ExternalBeginFrameSource());
1521 1515
1522 // To test swap ack throttling, this test disables automatic swap acks. 1516 // 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. 1560 // BeginImplFrame deadline should draw.
1567 scheduler->SetNeedsRedraw(); 1561 scheduler->SetNeedsRedraw();
1568 client.task_runner().RunPendingTasks(); // Run posted deadline. 1562 client.task_runner().RunPendingTasks(); // Run posted deadline.
1569 EXPECT_ACTION("ScheduledActionAnimate", client, 0, 2); 1563 EXPECT_ACTION("ScheduledActionAnimate", client, 0, 2);
1570 EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client, 1, 2); 1564 EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client, 1, 2);
1571 EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending()); 1565 EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
1572 client.Reset(); 1566 client.Reset();
1573 } 1567 }
1574 1568
1575 TEST(SchedulerTest, SyntheticBeginFrames_SwapThrottled) { 1569 TEST(SchedulerTest, SyntheticBeginFrames_SwapThrottled) {
1576 bool begin_frame_scheduling_enabled = false; 1570 bool begin_frame_receiver = false;
1577 bool throttle_frame_production = true; 1571 bool throttle_frame_production = true;
1578 BeginFramesNotFromClient_SwapThrottled(begin_frame_scheduling_enabled, 1572 BeginFramesNotFromClient_SwapThrottled(begin_frame_receiver,
1579 throttle_frame_production); 1573 throttle_frame_production);
1580 } 1574 }
1581 1575
1582 TEST(SchedulerTest, VSyncThrottlingDisabled_SwapThrottled) { 1576 TEST(SchedulerTest, VSyncThrottlingDisabled_SwapThrottled) {
1583 bool begin_frame_scheduling_enabled = true; 1577 bool begin_frame_receiver = true;
1584 bool throttle_frame_production = false; 1578 bool throttle_frame_production = false;
1585 BeginFramesNotFromClient_SwapThrottled(begin_frame_scheduling_enabled, 1579 BeginFramesNotFromClient_SwapThrottled(begin_frame_receiver,
1586 throttle_frame_production); 1580 throttle_frame_production);
1587 } 1581 }
1588 1582
1589 TEST(SchedulerTest, 1583 TEST(SchedulerTest,
1590 SyntheticBeginFrames_And_VSyncThrottlingDisabled_SwapThrottled) { 1584 SyntheticBeginFrames_And_VSyncThrottlingDisabled_SwapThrottled) {
1591 bool begin_frame_scheduling_enabled = false; 1585 bool begin_frame_receiver = false;
1592 bool throttle_frame_production = false; 1586 bool throttle_frame_production = false;
1593 BeginFramesNotFromClient_SwapThrottled(begin_frame_scheduling_enabled, 1587 BeginFramesNotFromClient_SwapThrottled(begin_frame_receiver,
1594 throttle_frame_production); 1588 throttle_frame_production);
1595 } 1589 }
1596 1590
1597 TEST(SchedulerTest, DidLoseOutputSurfaceAfterOutputSurfaceIsInitialized) { 1591 TEST(SchedulerTest, DidLoseOutputSurfaceAfterOutputSurfaceIsInitialized) {
1598 FakeSchedulerClient client; 1592 FakeSchedulerClient client;
1599 SchedulerSettings scheduler_settings; 1593 SchedulerSettings scheduler_settings;
1600 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); 1594 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings);
1601 scheduler->SetCanStart(); 1595 scheduler->SetCanStart();
1602 scheduler->SetVisible(true); 1596 scheduler->SetVisible(true);
1603 scheduler->SetCanDraw(true); 1597 scheduler->SetCanDraw(true);
(...skipping 319 matching lines...) Expand 10 before | Expand all | Expand 10 after
1923 // No more BeginRetroFrame because BeginRetroFrame queue is cleared. 1917 // No more BeginRetroFrame because BeginRetroFrame queue is cleared.
1924 client.Reset(); 1918 client.Reset();
1925 client.task_runner().RunPendingTasks(); 1919 client.task_runner().RunPendingTasks();
1926 EXPECT_NO_ACTION(client); 1920 EXPECT_NO_ACTION(client);
1927 } 1921 }
1928 1922
1929 TEST(SchedulerTest, 1923 TEST(SchedulerTest,
1930 StopBeginFrameAfterDidLoseOutputSurfaceWithSyntheticBeginFrameSource) { 1924 StopBeginFrameAfterDidLoseOutputSurfaceWithSyntheticBeginFrameSource) {
1931 FakeSchedulerClient client; 1925 FakeSchedulerClient client;
1932 SchedulerSettings scheduler_settings; 1926 SchedulerSettings scheduler_settings;
1933 scheduler_settings.begin_frame_scheduling_enabled = false; 1927 scheduler_settings.begin_frame_receiver = false;
1934 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); 1928 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings);
1935 scheduler->SetCanStart(); 1929 scheduler->SetCanStart();
1936 scheduler->SetVisible(true); 1930 scheduler->SetVisible(true);
1937 scheduler->SetCanDraw(true); 1931 scheduler->SetCanDraw(true);
1938 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); 1932 InitializeOutputSurfaceAndFirstCommit(scheduler, &client);
1939 1933
1940 // SetNeedsCommit should begin the frame on the next BeginImplFrame. 1934 // SetNeedsCommit should begin the frame on the next BeginImplFrame.
1941 client.Reset(); 1935 client.Reset();
1942 EXPECT_FALSE(scheduler->frame_source().NeedsBeginFrames()); 1936 EXPECT_FALSE(scheduler->frame_source().NeedsBeginFrames());
1943 scheduler->SetNeedsCommit(); 1937 scheduler->SetNeedsCommit();
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after
2145 2139
2146 // Deadline task is pending 2140 // Deadline task is pending
2147 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); 2141 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
2148 client.task_runner().RunPendingTasks(); 2142 client.task_runner().RunPendingTasks();
2149 // Deadline task runs immediately 2143 // Deadline task runs immediately
2150 EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending()); 2144 EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
2151 } 2145 }
2152 2146
2153 } // namespace 2147 } // namespace
2154 } // namespace cc 2148 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698