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

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

Issue 577643002: Making OutputSurface a begin frame source and vsync source. (Closed)
Patch Set: Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « cc/scheduler/scheduler_state_machine.h ('k') | cc/surfaces/display.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 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"
11 #include "base/memory/scoped_vector.h" 11 #include "base/memory/scoped_vector.h"
12 #include "base/message_loop/message_loop.h" 12 #include "base/message_loop/message_loop.h"
13 #include "base/run_loop.h" 13 #include "base/run_loop.h"
14 #include "base/time/time.h" 14 #include "base/time/time.h"
15 #include "cc/test/begin_frame_args_test.h" 15 #include "cc/test/begin_frame_args_test.h"
16 #include "cc/test/fake_output_surface.h"
16 #include "cc/test/ordered_simple_task_runner.h" 17 #include "cc/test/ordered_simple_task_runner.h"
17 #include "cc/test/scheduler_test_common.h" 18 #include "cc/test/scheduler_test_common.h"
18 #include "testing/gmock/include/gmock/gmock.h" 19 #include "testing/gmock/include/gmock/gmock.h"
19 #include "testing/gtest/include/gtest/gtest.h" 20 #include "testing/gtest/include/gtest/gtest.h"
20 21
21 #define EXPECT_ACTION(action, client, action_index, expected_num_actions) \ 22 #define EXPECT_ACTION(action, client, action_index, expected_num_actions) \
22 do { \ 23 do { \
23 EXPECT_EQ(expected_num_actions, client.num_actions_()); \ 24 EXPECT_EQ(expected_num_actions, client.num_actions_()); \
24 if (action_index >= 0) { \ 25 if (action_index >= 0) { \
25 ASSERT_LT(action_index, client.num_actions_()) << scheduler; \ 26 ASSERT_LT(action_index, client.num_actions_()) << scheduler; \
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
101 const char* Action(int i) const { return actions_[i]; } 102 const char* Action(int i) const { return actions_[i]; }
102 std::string StateForAction(int i) const { return states_[i]->ToString(); } 103 std::string StateForAction(int i) const { return states_[i]->ToString(); }
103 base::TimeTicks posted_begin_impl_frame_deadline() const { 104 base::TimeTicks posted_begin_impl_frame_deadline() const {
104 return posted_begin_impl_frame_deadline_; 105 return posted_begin_impl_frame_deadline_;
105 } 106 }
106 107
107 bool ExternalBeginFrame() { 108 bool ExternalBeginFrame() {
108 return scheduler_->settings().begin_frame_scheduling_enabled && 109 return scheduler_->settings().begin_frame_scheduling_enabled &&
109 scheduler_->settings().throttle_frame_production; 110 scheduler_->settings().throttle_frame_production;
110 } 111 }
111 virtual FakeBeginFrameSource* GetExternalBeginFrameSource() OVERRIDE {
112 return &fake_frame_source_;
113 }
114 112
115 void AdvanceFrame() { 113 void AdvanceFrame() {
116 if (ExternalBeginFrame()) { 114 if (ExternalBeginFrame()) {
117 fake_frame_source_.TestSendBeginFrame( 115 fake_frame_source_.TestSendBeginFrame(
118 CreateBeginFrameArgsForTesting(now_src_)); 116 CreateBeginFrameArgsForTesting(now_src_));
119 } 117 }
120 118
121 EXPECT_TRUE(task_runner().RunTasksWhile(ImplFrameDeadlinePending(false))); 119 EXPECT_TRUE(task_runner().RunTasksWhile(ImplFrameDeadlinePending(false)));
122 EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending()); 120 EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending());
123 } 121 }
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
229 } 227 }
230 228
231 virtual void DidBeginImplFrameDeadline() OVERRIDE {} 229 virtual void DidBeginImplFrameDeadline() OVERRIDE {}
232 230
233 base::Callback<bool(void)> ImplFrameDeadlinePending(bool state) { 231 base::Callback<bool(void)> ImplFrameDeadlinePending(bool state) {
234 return base::Bind(&FakeSchedulerClient::ImplFrameDeadlinePendingCallback, 232 return base::Bind(&FakeSchedulerClient::ImplFrameDeadlinePendingCallback,
235 base::Unretained(this), 233 base::Unretained(this),
236 state); 234 state);
237 } 235 }
238 236
237 scoped_ptr<FakeOutputSurface> output_surface_;
238
239 protected: 239 protected:
240 bool ImplFrameDeadlinePendingCallback(bool state) { 240 bool ImplFrameDeadlinePendingCallback(bool state) {
241 return scheduler_->BeginImplFrameDeadlinePending() == state; 241 return scheduler_->BeginImplFrameDeadlinePending() == state;
242 } 242 }
243 243
244 bool draw_will_happen_; 244 bool draw_will_happen_;
245 bool swap_will_happen_if_draw_happens_; 245 bool swap_will_happen_if_draw_happens_;
246 bool automatic_swap_ack_; 246 bool automatic_swap_ack_;
247 int num_draws_; 247 int num_draws_;
248 bool log_anticipated_draw_time_change_; 248 bool log_anticipated_draw_time_change_;
249 bool swap_contains_incomplete_tile_; 249 bool swap_contains_incomplete_tile_;
250 bool redraw_will_happen_if_update_visible_tiles_happens_; 250 bool redraw_will_happen_if_update_visible_tiles_happens_;
251 base::TimeTicks posted_begin_impl_frame_deadline_; 251 base::TimeTicks posted_begin_impl_frame_deadline_;
252 std::vector<const char*> actions_; 252 std::vector<const char*> actions_;
253 std::vector<scoped_refptr<base::debug::ConvertableToTraceFormat> > states_; 253 std::vector<scoped_refptr<base::debug::ConvertableToTraceFormat> > states_;
254 scoped_ptr<TestScheduler> scheduler_; 254 scoped_ptr<TestScheduler> scheduler_;
255 scoped_refptr<TestNowSource> now_src_; 255 scoped_refptr<TestNowSource> now_src_;
256 FakeBeginFrameSourceForFakeSchedulerClient fake_frame_source_; 256 FakeBeginFrameSourceForFakeSchedulerClient fake_frame_source_;
257 }; 257 };
258 258
259 void InitializeOutputSurfaceAndFirstCommit(Scheduler* scheduler, 259 void InitializeOutputSurfaceAndFirstCommit(Scheduler* scheduler,
260 FakeSchedulerClient* client) { 260 FakeSchedulerClient* client) {
261 TRACE_EVENT0("cc", 261 TRACE_EVENT0("cc",
262 "SchedulerUnitTest::InitializeOutputSurfaceAndFirstCommit"); 262 "SchedulerUnitTest::InitializeOutputSurfaceAndFirstCommit");
263 263
264 scheduler->DidCreateAndInitializeOutputSurface(); 264 client->output_surface_ = FakeOutputSurface::Create3d();
265 scheduler->DidCreateAndInitializeOutputSurface(client->output_surface_.get());
265 scheduler->SetNeedsCommit(); 266 scheduler->SetNeedsCommit();
266 scheduler->NotifyBeginMainFrameStarted(); 267 scheduler->NotifyBeginMainFrameStarted();
267 scheduler->NotifyReadyToCommit(); 268 scheduler->NotifyReadyToCommit();
268 if (scheduler->settings().impl_side_painting) 269 if (scheduler->settings().impl_side_painting)
269 scheduler->NotifyReadyToActivate(); 270 scheduler->NotifyReadyToActivate();
270 271
271 // Go through the motions to draw the commit. 272 // Go through the motions to draw the commit.
272 client->AdvanceFrame(); 273 client->AdvanceFrame();
273 274
274 // Run the posted deadline task. 275 // Run the posted deadline task.
(...skipping 14 matching lines...) Expand all
289 TEST(SchedulerTest, InitializeOutputSurfaceDoesNotBeginImplFrame) { 290 TEST(SchedulerTest, InitializeOutputSurfaceDoesNotBeginImplFrame) {
290 FakeSchedulerClient client; 291 FakeSchedulerClient client;
291 SchedulerSettings default_scheduler_settings; 292 SchedulerSettings default_scheduler_settings;
292 TestScheduler* scheduler = client.CreateScheduler(default_scheduler_settings); 293 TestScheduler* scheduler = client.CreateScheduler(default_scheduler_settings);
293 scheduler->SetCanStart(); 294 scheduler->SetCanStart();
294 scheduler->SetVisible(true); 295 scheduler->SetVisible(true);
295 scheduler->SetCanDraw(true); 296 scheduler->SetCanDraw(true);
296 297
297 EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client); 298 EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client);
298 client.Reset(); 299 client.Reset();
299 scheduler->DidCreateAndInitializeOutputSurface(); 300 client.output_surface_ = FakeOutputSurface::Create3d();
301 scheduler->DidCreateAndInitializeOutputSurface(client.output_surface_.get());
300 EXPECT_NO_ACTION(client); 302 EXPECT_NO_ACTION(client);
301 } 303 }
302 304
303 TEST(SchedulerTest, RequestCommit) { 305 TEST(SchedulerTest, RequestCommit) {
304 FakeSchedulerClient client; 306 FakeSchedulerClient client;
305 SchedulerSettings scheduler_settings; 307 SchedulerSettings scheduler_settings;
306 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); 308 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings);
307 scheduler->SetCanStart(); 309 scheduler->SetCanStart();
308 scheduler->SetVisible(true); 310 scheduler->SetVisible(true);
309 scheduler->SetCanDraw(true); 311 scheduler->SetCanDraw(true);
(...skipping 812 matching lines...) Expand 10 before | Expand all | Expand 10 after
1122 base::TimeDelta::FromMilliseconds(1), 1124 base::TimeDelta::FromMilliseconds(1),
1123 base::TimeDelta::FromMilliseconds(32), 1125 base::TimeDelta::FromMilliseconds(32),
1124 base::TimeDelta::FromMilliseconds(32)); 1126 base::TimeDelta::FromMilliseconds(32));
1125 client.set_log_anticipated_draw_time_change(true); 1127 client.set_log_anticipated_draw_time_change(true);
1126 SchedulerSettings default_scheduler_settings; 1128 SchedulerSettings default_scheduler_settings;
1127 TestScheduler* scheduler = client.CreateScheduler(default_scheduler_settings); 1129 TestScheduler* scheduler = client.CreateScheduler(default_scheduler_settings);
1128 1130
1129 scheduler->SetCanDraw(true); 1131 scheduler->SetCanDraw(true);
1130 scheduler->SetCanStart(); 1132 scheduler->SetCanStart();
1131 scheduler->SetVisible(true); 1133 scheduler->SetVisible(true);
1132 scheduler->DidCreateAndInitializeOutputSurface(); 1134 client.output_surface_ = FakeOutputSurface::Create3d();
1135 scheduler->DidCreateAndInitializeOutputSurface(client.output_surface_.get());
1133 1136
1134 scheduler->SetNeedsCommit(); 1137 scheduler->SetNeedsCommit();
1135 EXPECT_TRUE(scheduler->CommitPending()); 1138 EXPECT_TRUE(scheduler->CommitPending());
1136 scheduler->NotifyBeginMainFrameStarted(); 1139 scheduler->NotifyBeginMainFrameStarted();
1137 scheduler->NotifyReadyToCommit(); 1140 scheduler->NotifyReadyToCommit();
1138 scheduler->SetNeedsRedraw(); 1141 scheduler->SetNeedsRedraw();
1139 1142
1140 BeginFrameArgs frame_args = CreateBeginFrameArgsForTesting(client.now_src()); 1143 BeginFrameArgs frame_args = CreateBeginFrameArgsForTesting(client.now_src());
1141 frame_args.interval = base::TimeDelta::FromMilliseconds(1000); 1144 frame_args.interval = base::TimeDelta::FromMilliseconds(1000);
1142 client.GetExternalBeginFrameSource()->TestSendBeginFrame(frame_args); 1145 client.output_surface_->TestSendBeginFrame(frame_args);
1143 1146
1144 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); 1147 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
1145 client.task_runner().RunPendingTasks(); // Run posted deadline. 1148 client.task_runner().RunPendingTasks(); // Run posted deadline.
1146 EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending()); 1149 EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
1147 1150
1148 scheduler->DidSwapBuffers(); 1151 scheduler->DidSwapBuffers();
1149 scheduler->DidSwapBuffersComplete(); 1152 scheduler->DidSwapBuffersComplete();
1150 1153
1151 // At this point, we've drawn a frame. Start another commit, but hold off on 1154 // At this point, we've drawn a frame. Start another commit, but hold off on
1152 // the NotifyReadyToCommit for now. 1155 // the NotifyReadyToCommit for now.
1153 EXPECT_FALSE(scheduler->CommitPending()); 1156 EXPECT_FALSE(scheduler->CommitPending());
1154 scheduler->SetNeedsCommit(); 1157 scheduler->SetNeedsCommit();
1155 client.GetExternalBeginFrameSource()->TestSendBeginFrame(frame_args); 1158 client.output_surface_->TestSendBeginFrame(frame_args);
1156 EXPECT_TRUE(scheduler->CommitPending()); 1159 EXPECT_TRUE(scheduler->CommitPending());
1157 1160
1158 // Draw and swap the frame, but don't ack the swap to simulate the Browser 1161 // Draw and swap the frame, but don't ack the swap to simulate the Browser
1159 // blocking on the renderer. 1162 // blocking on the renderer.
1160 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); 1163 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
1161 client.task_runner().RunPendingTasks(); // Run posted deadline. 1164 client.task_runner().RunPendingTasks(); // Run posted deadline.
1162 EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending()); 1165 EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
1163 scheduler->DidSwapBuffers(); 1166 scheduler->DidSwapBuffers();
1164 1167
1165 // Spin the event loop a few times and make sure we get more 1168 // Spin the event loop a few times and make sure we get more
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
1204 // SetNeedsCommit should begin the frame on the next BeginImplFrame. 1207 // SetNeedsCommit should begin the frame on the next BeginImplFrame.
1205 client.Reset(); 1208 client.Reset();
1206 scheduler->SetNeedsCommit(); 1209 scheduler->SetNeedsCommit();
1207 EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client); 1210 EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client);
1208 client.Reset(); 1211 client.Reset();
1209 1212
1210 // Create a BeginFrame with a long deadline to avoid race conditions. 1213 // Create a BeginFrame with a long deadline to avoid race conditions.
1211 // This is the first BeginFrame, which will be handled immediately. 1214 // This is the first BeginFrame, which will be handled immediately.
1212 BeginFrameArgs args = CreateBeginFrameArgsForTesting(client.now_src()); 1215 BeginFrameArgs args = CreateBeginFrameArgsForTesting(client.now_src());
1213 args.deadline += base::TimeDelta::FromHours(1); 1216 args.deadline += base::TimeDelta::FromHours(1);
1214 client.GetExternalBeginFrameSource()->TestSendBeginFrame(args); 1217 client.output_surface_->TestSendBeginFrame(args);
1215 EXPECT_ACTION("WillBeginImplFrame", client, 0, 2); 1218 EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
1216 EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2); 1219 EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2);
1217 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); 1220 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
1218 EXPECT_TRUE(client.needs_begin_frames()); 1221 EXPECT_TRUE(client.needs_begin_frames());
1219 client.Reset(); 1222 client.Reset();
1220 1223
1221 // Queue BeginFrames while we are still handling the previous BeginFrame. 1224 // Queue BeginFrames while we are still handling the previous BeginFrame.
1222 args.frame_time += base::TimeDelta::FromSeconds(1); 1225 args.frame_time += base::TimeDelta::FromSeconds(1);
1223 client.GetExternalBeginFrameSource()->TestSendBeginFrame(args); 1226 client.output_surface_->TestSendBeginFrame(args);
1224 args.frame_time += base::TimeDelta::FromSeconds(1); 1227 args.frame_time += base::TimeDelta::FromSeconds(1);
1225 client.GetExternalBeginFrameSource()->TestSendBeginFrame(args); 1228 client.output_surface_->TestSendBeginFrame(args);
1226 1229
1227 // If we don't swap on the deadline, we wait for the next BeginImplFrame. 1230 // If we don't swap on the deadline, we wait for the next BeginImplFrame.
1228 client.task_runner().RunPendingTasks(); // Run posted deadline. 1231 client.task_runner().RunPendingTasks(); // Run posted deadline.
1229 EXPECT_NO_ACTION(client); 1232 EXPECT_NO_ACTION(client);
1230 EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending()); 1233 EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
1231 EXPECT_TRUE(client.needs_begin_frames()); 1234 EXPECT_TRUE(client.needs_begin_frames());
1232 client.Reset(); 1235 client.Reset();
1233 1236
1234 // NotifyReadyToCommit should trigger the commit. 1237 // NotifyReadyToCommit should trigger the commit.
1235 scheduler->NotifyBeginMainFrameStarted(); 1238 scheduler->NotifyBeginMainFrameStarted();
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
1281 // SetNeedsCommit should begin the frame on the next BeginImplFrame. 1284 // SetNeedsCommit should begin the frame on the next BeginImplFrame.
1282 client.Reset(); 1285 client.Reset();
1283 scheduler->SetNeedsCommit(); 1286 scheduler->SetNeedsCommit();
1284 EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client); 1287 EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client);
1285 client.Reset(); 1288 client.Reset();
1286 1289
1287 // Create a BeginFrame with a long deadline to avoid race conditions. 1290 // Create a BeginFrame with a long deadline to avoid race conditions.
1288 // This is the first BeginFrame, which will be handled immediately. 1291 // This is the first BeginFrame, which will be handled immediately.
1289 BeginFrameArgs args = CreateBeginFrameArgsForTesting(client.now_src()); 1292 BeginFrameArgs args = CreateBeginFrameArgsForTesting(client.now_src());
1290 args.deadline += base::TimeDelta::FromHours(1); 1293 args.deadline += base::TimeDelta::FromHours(1);
1291 client.GetExternalBeginFrameSource()->TestSendBeginFrame(args); 1294 client.output_surface_->TestSendBeginFrame(args);
1292 EXPECT_ACTION("WillBeginImplFrame", client, 0, 2); 1295 EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
1293 EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2); 1296 EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2);
1294 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); 1297 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
1295 EXPECT_TRUE(client.needs_begin_frames()); 1298 EXPECT_TRUE(client.needs_begin_frames());
1296 client.Reset(); 1299 client.Reset();
1297 1300
1298 // Queue BeginFrame while we are still handling the previous BeginFrame. 1301 // Queue BeginFrame while we are still handling the previous BeginFrame.
1299 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); 1302 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
1300 args.frame_time += base::TimeDelta::FromSeconds(1); 1303 args.frame_time += base::TimeDelta::FromSeconds(1);
1301 client.GetExternalBeginFrameSource()->TestSendBeginFrame(args); 1304 client.output_surface_->TestSendBeginFrame(args);
1302 EXPECT_NO_ACTION(client); 1305 EXPECT_NO_ACTION(client);
1303 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); 1306 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
1304 client.Reset(); 1307 client.Reset();
1305 1308
1306 // NotifyReadyToCommit should trigger the pending commit and draw. 1309 // NotifyReadyToCommit should trigger the pending commit and draw.
1307 scheduler->NotifyBeginMainFrameStarted(); 1310 scheduler->NotifyBeginMainFrameStarted();
1308 scheduler->NotifyReadyToCommit(); 1311 scheduler->NotifyReadyToCommit();
1309 EXPECT_SINGLE_ACTION("ScheduledActionCommit", client); 1312 EXPECT_SINGLE_ACTION("ScheduledActionCommit", client);
1310 EXPECT_TRUE(client.needs_begin_frames()); 1313 EXPECT_TRUE(client.needs_begin_frames());
1311 client.Reset(); 1314 client.Reset();
(...skipping 10 matching lines...) Expand all
1322 // but not a BeginMainFrame or draw. 1325 // but not a BeginMainFrame or draw.
1323 scheduler->SetNeedsCommit(); 1326 scheduler->SetNeedsCommit();
1324 client.task_runner().RunPendingTasks(); // Run posted BeginRetroFrame. 1327 client.task_runner().RunPendingTasks(); // Run posted BeginRetroFrame.
1325 EXPECT_ACTION("WillBeginImplFrame", client, 0, 1); 1328 EXPECT_ACTION("WillBeginImplFrame", client, 0, 1);
1326 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); 1329 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
1327 EXPECT_TRUE(client.needs_begin_frames()); 1330 EXPECT_TRUE(client.needs_begin_frames());
1328 client.Reset(); 1331 client.Reset();
1329 1332
1330 // Queue BeginFrame while we are still handling the previous BeginFrame. 1333 // Queue BeginFrame while we are still handling the previous BeginFrame.
1331 args.frame_time += base::TimeDelta::FromSeconds(1); 1334 args.frame_time += base::TimeDelta::FromSeconds(1);
1332 client.GetExternalBeginFrameSource()->TestSendBeginFrame(args); 1335 client.output_surface_->TestSendBeginFrame(args);
1333 EXPECT_NO_ACTION(client); 1336 EXPECT_NO_ACTION(client);
1334 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); 1337 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
1335 EXPECT_TRUE(client.needs_begin_frames()); 1338 EXPECT_TRUE(client.needs_begin_frames());
1336 client.Reset(); 1339 client.Reset();
1337 1340
1338 // Take us out of a swap throttled state. 1341 // Take us out of a swap throttled state.
1339 scheduler->DidSwapBuffersComplete(); 1342 scheduler->DidSwapBuffersComplete();
1340 EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 0, 1); 1343 EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 0, 1);
1341 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); 1344 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
1342 EXPECT_TRUE(client.needs_begin_frames()); 1345 EXPECT_TRUE(client.needs_begin_frames());
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after
1548 TEST(SchedulerTest, DidLoseOutputSurfaceAfterOutputSurfaceIsInitialized) { 1551 TEST(SchedulerTest, DidLoseOutputSurfaceAfterOutputSurfaceIsInitialized) {
1549 FakeSchedulerClient client; 1552 FakeSchedulerClient client;
1550 SchedulerSettings scheduler_settings; 1553 SchedulerSettings scheduler_settings;
1551 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); 1554 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings);
1552 scheduler->SetCanStart(); 1555 scheduler->SetCanStart();
1553 scheduler->SetVisible(true); 1556 scheduler->SetVisible(true);
1554 scheduler->SetCanDraw(true); 1557 scheduler->SetCanDraw(true);
1555 1558
1556 EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client); 1559 EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client);
1557 client.Reset(); 1560 client.Reset();
1558 scheduler->DidCreateAndInitializeOutputSurface(); 1561 client.output_surface_ = FakeOutputSurface::Create3d();
1562 scheduler->DidCreateAndInitializeOutputSurface(client.output_surface_.get());
1559 EXPECT_NO_ACTION(client); 1563 EXPECT_NO_ACTION(client);
1560 1564
1565 client.output_surface_.reset();
1561 scheduler->DidLoseOutputSurface(); 1566 scheduler->DidLoseOutputSurface();
1562 EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client); 1567 EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client);
1563 } 1568 }
1564 1569
1565 TEST(SchedulerTest, DidLoseOutputSurfaceAfterBeginFrameStarted) { 1570 TEST(SchedulerTest, DidLoseOutputSurfaceAfterBeginFrameStarted) {
1566 FakeSchedulerClient client; 1571 FakeSchedulerClient client;
1567 SchedulerSettings scheduler_settings; 1572 SchedulerSettings scheduler_settings;
1568 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); 1573 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings);
1569 scheduler->SetCanStart(); 1574 scheduler->SetCanStart();
1570 scheduler->SetVisible(true); 1575 scheduler->SetVisible(true);
1571 scheduler->SetCanDraw(true); 1576 scheduler->SetCanDraw(true);
1572 1577
1573 EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client); 1578 EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client);
1574 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); 1579 InitializeOutputSurfaceAndFirstCommit(scheduler, &client);
1575 // SetNeedsCommit should begin the frame. 1580 // SetNeedsCommit should begin the frame.
1576 client.Reset(); 1581 client.Reset();
1577 scheduler->SetNeedsCommit(); 1582 scheduler->SetNeedsCommit();
1578 EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client); 1583 EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client);
1579 1584
1580 client.Reset(); 1585 client.Reset();
1581 client.AdvanceFrame(); 1586 client.AdvanceFrame();
1582 EXPECT_ACTION("WillBeginImplFrame", client, 0, 2); 1587 EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
1583 EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2); 1588 EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2);
1584 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); 1589 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
1585 1590
1586 client.Reset(); 1591 client.Reset();
1592 client.output_surface_.reset();
1587 scheduler->DidLoseOutputSurface(); 1593 scheduler->DidLoseOutputSurface();
1588 // Do nothing when impl frame is in deadine pending state. 1594 // Do nothing when impl frame is in deadine pending state.
1589 EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(false)", client); 1595 EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(false)", client);
1590 1596
1591 client.Reset(); 1597 client.Reset();
1592 scheduler->NotifyBeginMainFrameStarted(); 1598 scheduler->NotifyBeginMainFrameStarted();
1593 scheduler->NotifyReadyToCommit(); 1599 scheduler->NotifyReadyToCommit();
1594 EXPECT_ACTION("ScheduledActionCommit", client, 0, 1); 1600 EXPECT_ACTION("ScheduledActionCommit", client, 0, 1);
1595 1601
1596 client.Reset(); 1602 client.Reset();
(...skipping 19 matching lines...) Expand all
1616 scheduler->SetNeedsCommit(); 1622 scheduler->SetNeedsCommit();
1617 EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client); 1623 EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client);
1618 1624
1619 client.Reset(); 1625 client.Reset();
1620 client.AdvanceFrame(); 1626 client.AdvanceFrame();
1621 EXPECT_ACTION("WillBeginImplFrame", client, 0, 2); 1627 EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
1622 EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2); 1628 EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2);
1623 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); 1629 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
1624 1630
1625 client.Reset(); 1631 client.Reset();
1632 client.output_surface_.reset();
1626 scheduler->DidLoseOutputSurface(); 1633 scheduler->DidLoseOutputSurface();
1627 // Do nothing when impl frame is in deadine pending state. 1634 // Do nothing when impl frame is in deadine pending state.
1628 EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(false)", client); 1635 EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(false)", client);
1629 1636
1630 client.Reset(); 1637 client.Reset();
1631 // Run posted deadline. 1638 // Run posted deadline.
1632 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); 1639 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
1633 client.task_runner().RunTasksWhile(client.ImplFrameDeadlinePending(true)); 1640 client.task_runner().RunTasksWhile(client.ImplFrameDeadlinePending(true));
1634 // OnBeginImplFrameDeadline didn't schedule any actions because main frame is 1641 // OnBeginImplFrameDeadline didn't schedule any actions because main frame is
1635 // not yet completed. 1642 // not yet completed.
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
1688 EXPECT_ACTION("WillBeginImplFrame", client, 0, 2); 1695 EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
1689 EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2); 1696 EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2);
1690 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); 1697 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
1691 1698
1692 client.Reset(); 1699 client.Reset();
1693 scheduler->NotifyBeginMainFrameStarted(); 1700 scheduler->NotifyBeginMainFrameStarted();
1694 scheduler->NotifyReadyToCommit(); 1701 scheduler->NotifyReadyToCommit();
1695 EXPECT_SINGLE_ACTION("ScheduledActionCommit", client); 1702 EXPECT_SINGLE_ACTION("ScheduledActionCommit", client);
1696 1703
1697 client.Reset(); 1704 client.Reset();
1705 client.output_surface_.reset();
1698 scheduler->DidLoseOutputSurface(); 1706 scheduler->DidLoseOutputSurface();
1699 if (impl_side_painting) { 1707 if (impl_side_painting) {
1700 // Sync tree should be forced to activate. 1708 // Sync tree should be forced to activate.
1701 EXPECT_ACTION("SetNeedsBeginFrames(false)", client, 0, 2); 1709 EXPECT_ACTION("SetNeedsBeginFrames(false)", client, 0, 2);
1702 EXPECT_ACTION("ScheduledActionActivateSyncTree", client, 1, 2); 1710 EXPECT_ACTION("ScheduledActionActivateSyncTree", client, 1, 2);
1703 } else { 1711 } else {
1704 EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(false)", client); 1712 EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(false)", client);
1705 } 1713 }
1706 1714
1707 client.Reset(); 1715 client.Reset();
(...skipping 23 matching lines...) Expand all
1731 scheduler->SetNeedsRedraw(); 1739 scheduler->SetNeedsRedraw();
1732 EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client); 1740 EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client);
1733 1741
1734 client.Reset(); 1742 client.Reset();
1735 client.AdvanceFrame(); 1743 client.AdvanceFrame();
1736 EXPECT_ACTION("WillBeginImplFrame", client, 0, 2); 1744 EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
1737 EXPECT_ACTION("ScheduledActionAnimate", client, 1, 2); 1745 EXPECT_ACTION("ScheduledActionAnimate", client, 1, 2);
1738 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); 1746 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
1739 1747
1740 client.Reset(); 1748 client.Reset();
1749 client.output_surface_.reset();
1741 scheduler->DidLoseOutputSurface(); 1750 scheduler->DidLoseOutputSurface();
1742 EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(false)", client); 1751 EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(false)", client);
1743 1752
1744 client.Reset(); 1753 client.Reset();
1745 client.task_runner().RunPendingTasks(); // Run posted deadline. 1754 client.task_runner().RunPendingTasks(); // Run posted deadline.
1746 EXPECT_ACTION("ScheduledActionManageTiles", client, 0, 2); 1755 EXPECT_ACTION("ScheduledActionManageTiles", client, 0, 2);
1747 EXPECT_ACTION("ScheduledActionBeginOutputSurfaceCreation", client, 1, 2); 1756 EXPECT_ACTION("ScheduledActionBeginOutputSurfaceCreation", client, 1, 2);
1748 } 1757 }
1749 1758
1750 TEST(SchedulerTest, DidLoseOutputSurfaceAfterBeginRetroFramePosted) { 1759 TEST(SchedulerTest, DidLoseOutputSurfaceAfterBeginRetroFramePosted) {
1751 FakeSchedulerClient client; 1760 FakeSchedulerClient client;
1752 SchedulerSettings scheduler_settings; 1761 SchedulerSettings scheduler_settings;
1753 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); 1762 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings);
1754 scheduler->SetCanStart(); 1763 scheduler->SetCanStart();
1755 scheduler->SetVisible(true); 1764 scheduler->SetVisible(true);
1756 scheduler->SetCanDraw(true); 1765 scheduler->SetCanDraw(true);
1757 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); 1766 InitializeOutputSurfaceAndFirstCommit(scheduler, &client);
1758 1767
1759 // SetNeedsCommit should begin the frame on the next BeginImplFrame. 1768 // SetNeedsCommit should begin the frame on the next BeginImplFrame.
1760 client.Reset(); 1769 client.Reset();
1761 scheduler->SetNeedsCommit(); 1770 scheduler->SetNeedsCommit();
1762 EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client); 1771 EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client);
1763 1772
1764 // Create a BeginFrame with a long deadline to avoid race conditions. 1773 // Create a BeginFrame with a long deadline to avoid race conditions.
1765 // This is the first BeginFrame, which will be handled immediately. 1774 // This is the first BeginFrame, which will be handled immediately.
1766 client.Reset(); 1775 client.Reset();
1767 BeginFrameArgs args = CreateBeginFrameArgsForTesting(client.now_src()); 1776 BeginFrameArgs args = CreateBeginFrameArgsForTesting(client.now_src());
1768 args.deadline += base::TimeDelta::FromHours(1); 1777 args.deadline += base::TimeDelta::FromHours(1);
1769 client.GetExternalBeginFrameSource()->TestSendBeginFrame(args); 1778 client.output_surface_->TestSendBeginFrame(args);
1770 EXPECT_ACTION("WillBeginImplFrame", client, 0, 2); 1779 EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
1771 EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2); 1780 EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2);
1772 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); 1781 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
1773 EXPECT_TRUE(client.needs_begin_frames()); 1782 EXPECT_TRUE(client.needs_begin_frames());
1774 1783
1775 // Queue BeginFrames while we are still handling the previous BeginFrame. 1784 // Queue BeginFrames while we are still handling the previous BeginFrame.
1776 args.frame_time += base::TimeDelta::FromSeconds(1); 1785 args.frame_time += base::TimeDelta::FromSeconds(1);
1777 client.GetExternalBeginFrameSource()->TestSendBeginFrame(args); 1786 client.output_surface_->TestSendBeginFrame(args);
1778 args.frame_time += base::TimeDelta::FromSeconds(1); 1787 args.frame_time += base::TimeDelta::FromSeconds(1);
1779 client.GetExternalBeginFrameSource()->TestSendBeginFrame(args); 1788 client.output_surface_->TestSendBeginFrame(args);
1780 1789
1781 // If we don't swap on the deadline, we wait for the next BeginImplFrame. 1790 // If we don't swap on the deadline, we wait for the next BeginImplFrame.
1782 client.Reset(); 1791 client.Reset();
1783 client.task_runner().RunPendingTasks(); // Run posted deadline. 1792 client.task_runner().RunPendingTasks(); // Run posted deadline.
1784 EXPECT_NO_ACTION(client); 1793 EXPECT_NO_ACTION(client);
1785 EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending()); 1794 EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
1786 EXPECT_TRUE(client.needs_begin_frames()); 1795 EXPECT_TRUE(client.needs_begin_frames());
1787 1796
1788 // NotifyReadyToCommit should trigger the commit. 1797 // NotifyReadyToCommit should trigger the commit.
1789 client.Reset(); 1798 client.Reset();
1790 scheduler->NotifyBeginMainFrameStarted(); 1799 scheduler->NotifyBeginMainFrameStarted();
1791 scheduler->NotifyReadyToCommit(); 1800 scheduler->NotifyReadyToCommit();
1792 EXPECT_SINGLE_ACTION("ScheduledActionCommit", client); 1801 EXPECT_SINGLE_ACTION("ScheduledActionCommit", client);
1793 EXPECT_TRUE(client.needs_begin_frames()); 1802 EXPECT_TRUE(client.needs_begin_frames());
1794 1803
1795 client.Reset(); 1804 client.Reset();
1796 EXPECT_FALSE(scheduler->IsBeginRetroFrameArgsEmpty()); 1805 EXPECT_FALSE(scheduler->IsBeginRetroFrameArgsEmpty());
1806 client.output_surface_.reset();
1797 scheduler->DidLoseOutputSurface(); 1807 scheduler->DidLoseOutputSurface();
1798 EXPECT_ACTION("SetNeedsBeginFrames(false)", client, 0, 2); 1808 EXPECT_ACTION("SetNeedsBeginFrames(false)", client, 0, 2);
1799 EXPECT_ACTION("ScheduledActionBeginOutputSurfaceCreation", client, 1, 2); 1809 EXPECT_ACTION("ScheduledActionBeginOutputSurfaceCreation", client, 1, 2);
1800 EXPECT_TRUE(scheduler->IsBeginRetroFrameArgsEmpty()); 1810 EXPECT_TRUE(scheduler->IsBeginRetroFrameArgsEmpty());
1801 1811
1802 // Posted BeginRetroFrame is aborted. 1812 // Posted BeginRetroFrame is aborted.
1803 client.Reset(); 1813 client.Reset();
1804 client.task_runner().RunPendingTasks(); 1814 client.task_runner().RunPendingTasks();
1805 EXPECT_NO_ACTION(client); 1815 EXPECT_NO_ACTION(client);
1806 } 1816 }
(...skipping 10 matching lines...) Expand all
1817 // SetNeedsCommit should begin the frame on the next BeginImplFrame. 1827 // SetNeedsCommit should begin the frame on the next BeginImplFrame.
1818 client.Reset(); 1828 client.Reset();
1819 scheduler->SetNeedsCommit(); 1829 scheduler->SetNeedsCommit();
1820 EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client); 1830 EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client);
1821 1831
1822 // Create a BeginFrame with a long deadline to avoid race conditions. 1832 // Create a BeginFrame with a long deadline to avoid race conditions.
1823 // This is the first BeginFrame, which will be handled immediately. 1833 // This is the first BeginFrame, which will be handled immediately.
1824 client.Reset(); 1834 client.Reset();
1825 BeginFrameArgs args = CreateBeginFrameArgsForTesting(client.now_src()); 1835 BeginFrameArgs args = CreateBeginFrameArgsForTesting(client.now_src());
1826 args.deadline += base::TimeDelta::FromHours(1); 1836 args.deadline += base::TimeDelta::FromHours(1);
1827 client.GetExternalBeginFrameSource()->TestSendBeginFrame(args); 1837 client.output_surface_->TestSendBeginFrame(args);
1828 EXPECT_ACTION("WillBeginImplFrame", client, 0, 2); 1838 EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
1829 EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2); 1839 EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2);
1830 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); 1840 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
1831 EXPECT_TRUE(client.needs_begin_frames()); 1841 EXPECT_TRUE(client.needs_begin_frames());
1832 1842
1833 // Queue BeginFrames while we are still handling the previous BeginFrame. 1843 // Queue BeginFrames while we are still handling the previous BeginFrame.
1834 args.frame_time += base::TimeDelta::FromSeconds(1); 1844 args.frame_time += base::TimeDelta::FromSeconds(1);
1835 client.GetExternalBeginFrameSource()->TestSendBeginFrame(args); 1845 client.output_surface_->TestSendBeginFrame(args);
1836 args.frame_time += base::TimeDelta::FromSeconds(1); 1846 args.frame_time += base::TimeDelta::FromSeconds(1);
1837 client.GetExternalBeginFrameSource()->TestSendBeginFrame(args); 1847 client.output_surface_->TestSendBeginFrame(args);
1838 1848
1839 // If we don't swap on the deadline, we wait for the next BeginImplFrame. 1849 // If we don't swap on the deadline, we wait for the next BeginImplFrame.
1840 client.Reset(); 1850 client.Reset();
1841 client.task_runner().RunPendingTasks(); // Run posted deadline. 1851 client.task_runner().RunPendingTasks(); // Run posted deadline.
1842 EXPECT_NO_ACTION(client); 1852 EXPECT_NO_ACTION(client);
1843 EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending()); 1853 EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
1844 EXPECT_TRUE(client.needs_begin_frames()); 1854 EXPECT_TRUE(client.needs_begin_frames());
1845 1855
1846 // NotifyReadyToCommit should trigger the commit. 1856 // NotifyReadyToCommit should trigger the commit.
1847 client.Reset(); 1857 client.Reset();
1848 scheduler->NotifyBeginMainFrameStarted(); 1858 scheduler->NotifyBeginMainFrameStarted();
1849 scheduler->NotifyReadyToCommit(); 1859 scheduler->NotifyReadyToCommit();
1850 EXPECT_SINGLE_ACTION("ScheduledActionCommit", client); 1860 EXPECT_SINGLE_ACTION("ScheduledActionCommit", client);
1851 EXPECT_TRUE(client.needs_begin_frames()); 1861 EXPECT_TRUE(client.needs_begin_frames());
1852 1862
1853 // BeginImplFrame should prepare the draw. 1863 // BeginImplFrame should prepare the draw.
1854 client.Reset(); 1864 client.Reset();
1855 client.task_runner().RunPendingTasks(); // Run posted BeginRetroFrame. 1865 client.task_runner().RunPendingTasks(); // Run posted BeginRetroFrame.
1856 EXPECT_ACTION("WillBeginImplFrame", client, 0, 2); 1866 EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
1857 EXPECT_ACTION("ScheduledActionAnimate", client, 1, 2); 1867 EXPECT_ACTION("ScheduledActionAnimate", client, 1, 2);
1858 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); 1868 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
1859 EXPECT_TRUE(client.needs_begin_frames()); 1869 EXPECT_TRUE(client.needs_begin_frames());
1860 1870
1861 client.Reset(); 1871 client.Reset();
1862 EXPECT_FALSE(scheduler->IsBeginRetroFrameArgsEmpty()); 1872 EXPECT_FALSE(scheduler->IsBeginRetroFrameArgsEmpty());
1863 scheduler->DidLoseOutputSurface(); 1873 scheduler->DidLoseOutputSurface();
1874 client.output_surface_.reset();
1864 EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(false)", client); 1875 EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(false)", client);
1865 EXPECT_TRUE(scheduler->IsBeginRetroFrameArgsEmpty()); 1876 EXPECT_TRUE(scheduler->IsBeginRetroFrameArgsEmpty());
1866 1877
1867 // BeginImplFrame deadline should abort drawing. 1878 // BeginImplFrame deadline should abort drawing.
1868 client.Reset(); 1879 client.Reset();
1869 client.task_runner().RunPendingTasks(); // Run posted deadline. 1880 client.task_runner().RunPendingTasks(); // Run posted deadline.
1870 EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client); 1881 EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client);
1871 EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending()); 1882 EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
1872 EXPECT_FALSE(client.needs_begin_frames()); 1883 EXPECT_FALSE(client.needs_begin_frames());
1873 1884
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
1914 EXPECT_FALSE(scheduler->frame_source().NeedsBeginFrames()); 1925 EXPECT_FALSE(scheduler->frame_source().NeedsBeginFrames());
1915 1926
1916 client.Reset(); 1927 client.Reset();
1917 client.task_runner().RunPendingTasks(); // Run posted deadline. 1928 client.task_runner().RunPendingTasks(); // Run posted deadline.
1918 EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client); 1929 EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client);
1919 EXPECT_FALSE(scheduler->frame_source().NeedsBeginFrames()); 1930 EXPECT_FALSE(scheduler->frame_source().NeedsBeginFrames());
1920 } 1931 }
1921 1932
1922 } // namespace 1933 } // namespace
1923 } // namespace cc 1934 } // namespace cc
OLDNEW
« no previous file with comments | « cc/scheduler/scheduler_state_machine.h ('k') | cc/surfaces/display.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698