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

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

Issue 2632563003: [cc] Calculate the correct latest_confirmed_sequence_number in cc::Scheduler. (Closed)
Patch Set: handle BeginFrameDropped and add test for it. Created 3 years, 10 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
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
5 #include "cc/scheduler/scheduler_state_machine.h" 5 #include "cc/scheduler/scheduler_state_machine.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include "base/trace_event/trace_event.h" 9 #include "base/trace_event/trace_event.h"
10 #include "cc/output/begin_frame_args.h"
10 #include "cc/scheduler/scheduler.h" 11 #include "cc/scheduler/scheduler.h"
11 #include "cc/test/begin_frame_args_test.h" 12 #include "cc/test/begin_frame_args_test.h"
12 #include "testing/gtest/include/gtest/gtest.h" 13 #include "testing/gtest/include/gtest/gtest.h"
13 14
14 // Macro to compare two enum values and get nice output. 15 // Macro to compare two enum values and get nice output.
15 // Without: 16 // Without:
16 // Value of: actual() Actual: 7 17 // Value of: actual() Actual: 7
17 // Expected: expected() Which is: 0 18 // Expected: expected() Which is: 0
18 // With: 19 // With:
19 // Value of: actual() Actual: "ACTION_DRAW" 20 // Value of: actual() Actual: "ACTION_DRAW"
20 // Expected: expected() Which is: "ACTION_NONE" 21 // Expected: expected() Which is: "ACTION_NONE"
21 #define EXPECT_ENUM_EQ(enum_tostring, expected, actual) \ 22 #define EXPECT_ENUM_EQ(enum_tostring, expected, actual) \
22 EXPECT_STREQ(SchedulerStateMachine::enum_tostring(expected), \ 23 EXPECT_STREQ(SchedulerStateMachine::enum_tostring(expected), \
23 SchedulerStateMachine::enum_tostring(actual)) 24 SchedulerStateMachine::enum_tostring(actual))
24 25
26 #define EXPECT_SEQUENCE_NUMBERS(current, main_frame, pending_tree, \
27 active_tree, compositor_frame) \
28 EXPECT_EQ(current, state.begin_frame_sequence_number()); \
29 EXPECT_EQ(main_frame, \
30 state.last_begin_frame_sequence_number_begin_main_frame_sent()); \
31 EXPECT_EQ(pending_tree, \
32 state.last_begin_frame_sequence_number_pending_tree_was_fresh()); \
33 EXPECT_EQ(active_tree, \
34 state.last_begin_frame_sequence_number_active_tree_was_fresh()); \
35 EXPECT_EQ( \
36 compositor_frame, \
37 state.last_begin_frame_sequence_number_compositor_frame_was_fresh())
38
25 #define EXPECT_IMPL_FRAME_STATE(expected) \ 39 #define EXPECT_IMPL_FRAME_STATE(expected) \
26 EXPECT_ENUM_EQ(BeginImplFrameStateToString, expected, \ 40 EXPECT_ENUM_EQ(BeginImplFrameStateToString, expected, \
27 state.begin_impl_frame_state()) \ 41 state.begin_impl_frame_state()) \
28 << state.AsValue()->ToString() 42 << state.AsValue()->ToString()
29 43
30 #define EXPECT_MAIN_FRAME_STATE(expected) \ 44 #define EXPECT_MAIN_FRAME_STATE(expected) \
31 EXPECT_ENUM_EQ(BeginMainFrameStateToString, expected, \ 45 EXPECT_ENUM_EQ(BeginMainFrameStateToString, expected, \
32 state.BeginMainFrameState()) 46 state.BeginMainFrameState())
33 47
34 #define EXPECT_ACTION(expected) \ 48 #define EXPECT_ACTION(expected) \
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
79 public: 93 public:
80 explicit StateMachine(const SchedulerSettings& scheduler_settings) 94 explicit StateMachine(const SchedulerSettings& scheduler_settings)
81 : SchedulerStateMachine(scheduler_settings), 95 : SchedulerStateMachine(scheduler_settings),
82 draw_result_for_test_(DRAW_SUCCESS) {} 96 draw_result_for_test_(DRAW_SUCCESS) {}
83 97
84 void CreateAndInitializeCompositorFrameSinkWithActivatedCommit() { 98 void CreateAndInitializeCompositorFrameSinkWithActivatedCommit() {
85 DidCreateAndInitializeCompositorFrameSink(); 99 DidCreateAndInitializeCompositorFrameSink();
86 compositor_frame_sink_state_ = COMPOSITOR_FRAME_SINK_ACTIVE; 100 compositor_frame_sink_state_ = COMPOSITOR_FRAME_SINK_ACTIVE;
87 } 101 }
88 102
103 void IssueNextBeginImplFrame() {
104 OnBeginImplFrame(0, next_begin_frame_number_++);
105 }
106
89 void SetBeginMainFrameState(BeginMainFrameState cs) { 107 void SetBeginMainFrameState(BeginMainFrameState cs) {
90 begin_main_frame_state_ = cs; 108 begin_main_frame_state_ = cs;
91 } 109 }
92 BeginMainFrameState BeginMainFrameState() const { 110 BeginMainFrameState BeginMainFrameState() const {
93 return begin_main_frame_state_; 111 return begin_main_frame_state_;
94 } 112 }
95 113
96 ForcedRedrawOnTimeoutState ForcedRedrawState() const { 114 ForcedRedrawOnTimeoutState ForcedRedrawState() const {
97 return forced_redraw_state_; 115 return forced_redraw_state_;
98 } 116 }
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
143 161
144 bool PendingActivationsShouldBeForced() const { 162 bool PendingActivationsShouldBeForced() const {
145 return SchedulerStateMachine::PendingActivationsShouldBeForced(); 163 return SchedulerStateMachine::PendingActivationsShouldBeForced();
146 } 164 }
147 165
148 bool has_pending_tree() const { return has_pending_tree_; } 166 bool has_pending_tree() const { return has_pending_tree_; }
149 void SetHasPendingTree(bool has_pending_tree) { 167 void SetHasPendingTree(bool has_pending_tree) {
150 has_pending_tree_ = has_pending_tree; 168 has_pending_tree_ = has_pending_tree;
151 } 169 }
152 170
171 uint64_t begin_frame_sequence_number() const {
172 return begin_frame_sequence_number_;
173 }
174 uint64_t last_begin_frame_sequence_number_begin_main_frame_sent() const {
175 return last_begin_frame_sequence_number_begin_main_frame_sent_;
176 }
177 uint64_t last_begin_frame_sequence_number_pending_tree_was_fresh() const {
178 return last_begin_frame_sequence_number_pending_tree_was_fresh_;
179 }
180 uint64_t last_begin_frame_sequence_number_active_tree_was_fresh() const {
181 return last_begin_frame_sequence_number_active_tree_was_fresh_;
182 }
183
153 using SchedulerStateMachine::ShouldTriggerBeginImplFrameDeadlineImmediately; 184 using SchedulerStateMachine::ShouldTriggerBeginImplFrameDeadlineImmediately;
154 using SchedulerStateMachine::ProactiveBeginFrameWanted; 185 using SchedulerStateMachine::ProactiveBeginFrameWanted;
155 using SchedulerStateMachine::WillCommit; 186 using SchedulerStateMachine::WillCommit;
156 187
157 protected: 188 protected:
158 DrawResult draw_result_for_test_; 189 DrawResult draw_result_for_test_;
190 uint64_t next_begin_frame_number_ = BeginFrameArgs::kStartingFrameNumber;
159 }; 191 };
160 192
161 void PerformAction(StateMachine* sm, SchedulerStateMachine::Action action) { 193 void PerformAction(StateMachine* sm, SchedulerStateMachine::Action action) {
162 switch (action) { 194 switch (action) {
163 case SchedulerStateMachine::ACTION_NONE: 195 case SchedulerStateMachine::ACTION_NONE:
164 return; 196 return;
165 197
166 case SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE: 198 case SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE:
167 sm->WillActivate(); 199 sm->WillActivate();
168 return; 200 return;
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
264 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION); 296 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION);
265 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 297 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
266 state.CreateAndInitializeCompositorFrameSinkWithActivatedCommit(); 298 state.CreateAndInitializeCompositorFrameSinkWithActivatedCommit();
267 state.SetBeginMainFrameState( 299 state.SetBeginMainFrameState(
268 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE); 300 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE);
269 state.SetNeedsRedraw(false); 301 state.SetNeedsRedraw(false);
270 302
271 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 303 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
272 EXPECT_FALSE(state.NeedsCommit()); 304 EXPECT_FALSE(state.NeedsCommit());
273 305
274 state.OnBeginImplFrame(); 306 state.IssueNextBeginImplFrame();
275 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 307 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
276 308
277 state.OnBeginImplFrameDeadline(); 309 state.OnBeginImplFrameDeadline();
278 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 310 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
279 EXPECT_FALSE(state.NeedsCommit()); 311 EXPECT_FALSE(state.NeedsCommit());
280 } 312 }
281 313
282 // If commit requested but not visible yet, do nothing. 314 // If commit requested but not visible yet, do nothing.
283 { 315 {
284 StateMachine state(default_scheduler_settings); 316 StateMachine state(default_scheduler_settings);
285 state.SetBeginMainFrameState( 317 state.SetBeginMainFrameState(
286 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE); 318 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE);
287 state.SetNeedsRedraw(false); 319 state.SetNeedsRedraw(false);
288 state.SetNeedsBeginMainFrame(); 320 state.SetNeedsBeginMainFrame();
289 321
290 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 322 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
291 EXPECT_TRUE(state.NeedsCommit()); 323 EXPECT_TRUE(state.NeedsCommit());
292 324
293 state.OnBeginImplFrame(); 325 state.IssueNextBeginImplFrame();
294 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 326 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
295 327
296 state.OnBeginImplFrameDeadline(); 328 state.OnBeginImplFrameDeadline();
297 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 329 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
298 EXPECT_TRUE(state.NeedsCommit()); 330 EXPECT_TRUE(state.NeedsCommit());
299 } 331 }
300 332
301 // If commit requested, begin a main frame. 333 // If commit requested, begin a main frame.
302 { 334 {
303 StateMachine state(default_scheduler_settings); 335 StateMachine state(default_scheduler_settings);
304 state.SetBeginMainFrameState( 336 state.SetBeginMainFrameState(
305 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE); 337 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE);
306 state.SetVisible(true); 338 state.SetVisible(true);
307 EXPECT_ACTION_UPDATE_STATE( 339 EXPECT_ACTION_UPDATE_STATE(
308 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION); 340 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION);
309 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 341 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
310 state.CreateAndInitializeCompositorFrameSinkWithActivatedCommit(); 342 state.CreateAndInitializeCompositorFrameSinkWithActivatedCommit();
311 state.SetNeedsRedraw(false); 343 state.SetNeedsRedraw(false);
312 state.SetNeedsBeginMainFrame(); 344 state.SetNeedsBeginMainFrame();
313 345
314 // Expect nothing to happen until after OnBeginImplFrame. 346 // Expect nothing to happen until after OnBeginImplFrame.
315 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 347 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
316 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE); 348 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE);
317 EXPECT_IMPL_FRAME_STATE(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE); 349 EXPECT_IMPL_FRAME_STATE(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE);
318 EXPECT_TRUE(state.NeedsCommit()); 350 EXPECT_TRUE(state.NeedsCommit());
319 EXPECT_TRUE(state.BeginFrameNeeded()); 351 EXPECT_TRUE(state.BeginFrameNeeded());
320 352
321 state.OnBeginImplFrame(); 353 state.IssueNextBeginImplFrame();
322 EXPECT_ACTION_UPDATE_STATE( 354 EXPECT_ACTION_UPDATE_STATE(
323 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 355 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
324 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_SENT); 356 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_SENT);
325 EXPECT_FALSE(state.NeedsCommit()); 357 EXPECT_FALSE(state.NeedsCommit());
326 } 358 }
327 359
328 // If commit requested and can't draw, still begin a main frame. 360 // If commit requested and can't draw, still begin a main frame.
329 { 361 {
330 StateMachine state(default_scheduler_settings); 362 StateMachine state(default_scheduler_settings);
331 state.SetBeginMainFrameState( 363 state.SetBeginMainFrameState(
332 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE); 364 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE);
333 state.SetVisible(true); 365 state.SetVisible(true);
334 EXPECT_ACTION_UPDATE_STATE( 366 EXPECT_ACTION_UPDATE_STATE(
335 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION); 367 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION);
336 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 368 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
337 state.CreateAndInitializeCompositorFrameSinkWithActivatedCommit(); 369 state.CreateAndInitializeCompositorFrameSinkWithActivatedCommit();
338 state.SetNeedsRedraw(false); 370 state.SetNeedsRedraw(false);
339 state.SetNeedsBeginMainFrame(); 371 state.SetNeedsBeginMainFrame();
340 state.SetCanDraw(false); 372 state.SetCanDraw(false);
341 373
342 // Expect nothing to happen until after OnBeginImplFrame. 374 // Expect nothing to happen until after OnBeginImplFrame.
343 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 375 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
344 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE); 376 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE);
345 EXPECT_IMPL_FRAME_STATE(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE); 377 EXPECT_IMPL_FRAME_STATE(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE);
346 EXPECT_TRUE(state.BeginFrameNeeded()); 378 EXPECT_TRUE(state.BeginFrameNeeded());
347 379
348 state.OnBeginImplFrame(); 380 state.IssueNextBeginImplFrame();
349 EXPECT_ACTION_UPDATE_STATE( 381 EXPECT_ACTION_UPDATE_STATE(
350 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 382 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
351 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_SENT); 383 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_SENT);
352 EXPECT_FALSE(state.NeedsCommit()); 384 EXPECT_FALSE(state.NeedsCommit());
353 } 385 }
354 } 386 }
355 387
356 // Explicitly test main_frame_before_activation_enabled = true 388 // Explicitly test main_frame_before_activation_enabled = true
357 TEST(SchedulerStateMachineTest, MainFrameBeforeActivationEnabled) { 389 TEST(SchedulerStateMachineTest, MainFrameBeforeActivationEnabled) {
358 SchedulerSettings scheduler_settings; 390 SchedulerSettings scheduler_settings;
359 scheduler_settings.main_frame_before_activation_enabled = true; 391 scheduler_settings.main_frame_before_activation_enabled = true;
360 StateMachine state(scheduler_settings); 392 StateMachine state(scheduler_settings);
361 state.SetBeginMainFrameState( 393 state.SetBeginMainFrameState(
362 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE); 394 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE);
363 SET_UP_STATE(state) 395 SET_UP_STATE(state)
364 state.SetNeedsRedraw(false); 396 state.SetNeedsRedraw(false);
365 state.SetNeedsBeginMainFrame(); 397 state.SetNeedsBeginMainFrame();
366 398
367 EXPECT_TRUE(state.BeginFrameNeeded()); 399 EXPECT_TRUE(state.BeginFrameNeeded());
368 400
369 // Commit to the pending tree. 401 // Commit to the pending tree.
370 state.OnBeginImplFrame(); 402 state.IssueNextBeginImplFrame();
371 EXPECT_ACTION_UPDATE_STATE( 403 EXPECT_ACTION_UPDATE_STATE(
372 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 404 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
373 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 405 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
374 406
375 state.NotifyBeginMainFrameStarted(); 407 state.NotifyBeginMainFrameStarted();
376 state.NotifyReadyToCommit(); 408 state.NotifyReadyToCommit();
377 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 409 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
378 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 410 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
379 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE); 411 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE);
380 412
381 state.OnBeginImplFrameDeadline(); 413 state.OnBeginImplFrameDeadline();
382 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 414 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
383 415
384 // Verify that the next commit starts while there is still a pending tree. 416 // Verify that the next commit starts while there is still a pending tree.
385 state.SetNeedsBeginMainFrame(); 417 state.SetNeedsBeginMainFrame();
386 state.OnBeginImplFrame(); 418 state.IssueNextBeginImplFrame();
387 EXPECT_ACTION_UPDATE_STATE( 419 EXPECT_ACTION_UPDATE_STATE(
388 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 420 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
389 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 421 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
390 422
391 // Verify the pending commit doesn't overwrite the pending 423 // Verify the pending commit doesn't overwrite the pending
392 // tree until the pending tree has been activated. 424 // tree until the pending tree has been activated.
393 state.NotifyBeginMainFrameStarted(); 425 state.NotifyBeginMainFrameStarted();
394 state.NotifyReadyToCommit(); 426 state.NotifyReadyToCommit();
395 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 427 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
396 428
(...skipping 16 matching lines...) Expand all
413 TEST(SchedulerStateMachineTest, 445 TEST(SchedulerStateMachineTest,
414 FailedDrawForAnimationCheckerboardSetsNeedsCommitAndRetriesDraw) { 446 FailedDrawForAnimationCheckerboardSetsNeedsCommitAndRetriesDraw) {
415 SchedulerSettings default_scheduler_settings; 447 SchedulerSettings default_scheduler_settings;
416 StateMachine state(default_scheduler_settings); 448 StateMachine state(default_scheduler_settings);
417 SET_UP_STATE(state) 449 SET_UP_STATE(state)
418 state.SetNeedsRedraw(true); 450 state.SetNeedsRedraw(true);
419 EXPECT_TRUE(state.RedrawPending()); 451 EXPECT_TRUE(state.RedrawPending());
420 EXPECT_TRUE(state.BeginFrameNeeded()); 452 EXPECT_TRUE(state.BeginFrameNeeded());
421 453
422 // Start a frame. 454 // Start a frame.
423 state.OnBeginImplFrame(); 455 state.IssueNextBeginImplFrame();
424 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 456 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
425 EXPECT_FALSE(state.CommitPending()); 457 EXPECT_FALSE(state.CommitPending());
426 458
427 // Failing a draw triggers request for a new BeginMainFrame. 459 // Failing a draw triggers request for a new BeginMainFrame.
428 state.OnBeginImplFrameDeadline(); 460 state.OnBeginImplFrameDeadline();
429 state.SetDrawResultForTest(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); 461 state.SetDrawResultForTest(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS);
430 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); 462 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
431 EXPECT_ACTION_UPDATE_STATE( 463 EXPECT_ACTION_UPDATE_STATE(
432 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 464 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
433 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 465 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
434 state.OnBeginImplFrameIdle(); 466 state.OnBeginImplFrameIdle();
435 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 467 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
436 468
437 // It's okay to attempt more draws just in case additional raster 469 // It's okay to attempt more draws just in case additional raster
438 // finishes and the requested commit wasn't actually necessary. 470 // finishes and the requested commit wasn't actually necessary.
439 EXPECT_TRUE(state.CommitPending()); 471 EXPECT_TRUE(state.CommitPending());
440 EXPECT_TRUE(state.RedrawPending()); 472 EXPECT_TRUE(state.RedrawPending());
441 state.OnBeginImplFrame(); 473 state.IssueNextBeginImplFrame();
442 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 474 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
443 state.OnBeginImplFrameDeadline(); 475 state.OnBeginImplFrameDeadline();
444 state.SetDrawResultForTest(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); 476 state.SetDrawResultForTest(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS);
445 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); 477 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
446 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 478 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
447 state.OnBeginImplFrameIdle(); 479 state.OnBeginImplFrameIdle();
448 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 480 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
449 } 481 }
450 482
451 TEST(SchedulerStateMachineTest, FailedDrawForMissingHighResNeedsCommit) { 483 TEST(SchedulerStateMachineTest, FailedDrawForMissingHighResNeedsCommit) {
452 SchedulerSettings default_scheduler_settings; 484 SchedulerSettings default_scheduler_settings;
453 StateMachine state(default_scheduler_settings); 485 StateMachine state(default_scheduler_settings);
454 SET_UP_STATE(state) 486 SET_UP_STATE(state)
455 state.SetNeedsRedraw(true); 487 state.SetNeedsRedraw(true);
456 EXPECT_TRUE(state.RedrawPending()); 488 EXPECT_TRUE(state.RedrawPending());
457 EXPECT_TRUE(state.BeginFrameNeeded()); 489 EXPECT_TRUE(state.BeginFrameNeeded());
458 490
459 // Start a frame. 491 // Start a frame.
460 state.OnBeginImplFrame(); 492 state.IssueNextBeginImplFrame();
461 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 493 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
462 EXPECT_FALSE(state.CommitPending()); 494 EXPECT_FALSE(state.CommitPending());
463 495
464 // Failing a draw triggers because of high res tiles missing 496 // Failing a draw triggers because of high res tiles missing
465 // request for a new BeginMainFrame. 497 // request for a new BeginMainFrame.
466 state.OnBeginImplFrameDeadline(); 498 state.OnBeginImplFrameDeadline();
467 state.SetDrawResultForTest(DRAW_ABORTED_MISSING_HIGH_RES_CONTENT); 499 state.SetDrawResultForTest(DRAW_ABORTED_MISSING_HIGH_RES_CONTENT);
468 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); 500 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
469 EXPECT_ACTION_UPDATE_STATE( 501 EXPECT_ACTION_UPDATE_STATE(
470 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 502 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
471 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 503 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
472 state.OnBeginImplFrameIdle(); 504 state.OnBeginImplFrameIdle();
473 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 505 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
474 506
475 // It doesn't request a draw until we get a new commit though. 507 // It doesn't request a draw until we get a new commit though.
476 EXPECT_TRUE(state.CommitPending()); 508 EXPECT_TRUE(state.CommitPending());
477 EXPECT_FALSE(state.RedrawPending()); 509 EXPECT_FALSE(state.RedrawPending());
478 state.OnBeginImplFrame(); 510 state.IssueNextBeginImplFrame();
479 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 511 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
480 state.OnBeginImplFrameDeadline(); 512 state.OnBeginImplFrameDeadline();
481 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 513 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
482 state.OnBeginImplFrameIdle(); 514 state.OnBeginImplFrameIdle();
483 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 515 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
484 516
485 // Finish the commit and activation. 517 // Finish the commit and activation.
486 state.NotifyBeginMainFrameStarted(); 518 state.NotifyBeginMainFrameStarted();
487 state.NotifyReadyToCommit(); 519 state.NotifyReadyToCommit();
488 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 520 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
489 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 521 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
490 state.NotifyReadyToActivate(); 522 state.NotifyReadyToActivate();
491 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); 523 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE);
492 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 524 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
493 EXPECT_TRUE(state.RedrawPending()); 525 EXPECT_TRUE(state.RedrawPending());
494 526
495 // Verify we draw with the new frame. 527 // Verify we draw with the new frame.
496 state.OnBeginImplFrame(); 528 state.IssueNextBeginImplFrame();
497 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 529 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
498 state.OnBeginImplFrameDeadline(); 530 state.OnBeginImplFrameDeadline();
499 state.SetDrawResultForTest(DRAW_SUCCESS); 531 state.SetDrawResultForTest(DRAW_SUCCESS);
500 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); 532 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
501 state.DidSubmitCompositorFrame(); 533 state.DidSubmitCompositorFrame();
502 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 534 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
503 state.OnBeginImplFrameIdle(); 535 state.OnBeginImplFrameIdle();
504 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 536 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
505 } 537 }
506 538
507 TEST(SchedulerStateMachineTest, 539 TEST(SchedulerStateMachineTest,
508 TestFailedDrawsEventuallyForceDrawAfterNextCommit) { 540 TestFailedDrawsEventuallyForceDrawAfterNextCommit) {
509 SchedulerSettings scheduler_settings; 541 SchedulerSettings scheduler_settings;
510 scheduler_settings.maximum_number_of_failed_draws_before_draw_is_forced = 1; 542 scheduler_settings.maximum_number_of_failed_draws_before_draw_is_forced = 1;
511 StateMachine state(scheduler_settings); 543 StateMachine state(scheduler_settings);
512 SET_UP_STATE(state) 544 SET_UP_STATE(state)
513 545
514 // Start a commit. 546 // Start a commit.
515 state.SetNeedsBeginMainFrame(); 547 state.SetNeedsBeginMainFrame();
516 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 548 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
517 state.OnBeginImplFrame(); 549 state.IssueNextBeginImplFrame();
518 EXPECT_ACTION_UPDATE_STATE( 550 EXPECT_ACTION_UPDATE_STATE(
519 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 551 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
520 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 552 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
521 EXPECT_TRUE(state.CommitPending()); 553 EXPECT_TRUE(state.CommitPending());
522 554
523 // Then initiate a draw that fails. 555 // Then initiate a draw that fails.
524 state.SetNeedsRedraw(true); 556 state.SetNeedsRedraw(true);
525 state.OnBeginImplFrameDeadline(); 557 state.OnBeginImplFrameDeadline();
526 state.SetDrawResultForTest(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); 558 state.SetDrawResultForTest(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS);
527 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); 559 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
(...skipping 10 matching lines...) Expand all
538 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 570 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
539 EXPECT_TRUE(state.RedrawPending()); 571 EXPECT_TRUE(state.RedrawPending());
540 572
541 // Activate so we're ready for a new main frame. 573 // Activate so we're ready for a new main frame.
542 state.NotifyReadyToActivate(); 574 state.NotifyReadyToActivate();
543 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); 575 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE);
544 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 576 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
545 EXPECT_TRUE(state.RedrawPending()); 577 EXPECT_TRUE(state.RedrawPending());
546 578
547 // The redraw should be forced at the end of the next BeginImplFrame. 579 // The redraw should be forced at the end of the next BeginImplFrame.
548 state.OnBeginImplFrame(); 580 state.IssueNextBeginImplFrame();
549 EXPECT_ACTION_UPDATE_STATE( 581 EXPECT_ACTION_UPDATE_STATE(
550 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 582 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
551 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 583 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
552 state.OnBeginImplFrameDeadline(); 584 state.OnBeginImplFrameDeadline();
553 state.SetDrawResultForTest(DRAW_SUCCESS); 585 state.SetDrawResultForTest(DRAW_SUCCESS);
554 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_FORCED); 586 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_FORCED);
555 state.DidSubmitCompositorFrame(); 587 state.DidSubmitCompositorFrame();
556 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 588 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
557 state.DidReceiveCompositorFrameAck(); 589 state.DidReceiveCompositorFrameAck();
558 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 590 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
559 } 591 }
560 592
561 TEST(SchedulerStateMachineTest, TestFailedDrawsDoNotRestartForcedDraw) { 593 TEST(SchedulerStateMachineTest, TestFailedDrawsDoNotRestartForcedDraw) {
562 SchedulerSettings scheduler_settings; 594 SchedulerSettings scheduler_settings;
563 int draw_limit = 2; 595 int draw_limit = 2;
564 scheduler_settings.maximum_number_of_failed_draws_before_draw_is_forced = 596 scheduler_settings.maximum_number_of_failed_draws_before_draw_is_forced =
565 draw_limit; 597 draw_limit;
566 StateMachine state(scheduler_settings); 598 StateMachine state(scheduler_settings);
567 SET_UP_STATE(state) 599 SET_UP_STATE(state)
568 600
569 // Start a commit. 601 // Start a commit.
570 state.SetNeedsBeginMainFrame(); 602 state.SetNeedsBeginMainFrame();
571 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 603 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
572 state.OnBeginImplFrame(); 604 state.IssueNextBeginImplFrame();
573 EXPECT_ACTION_UPDATE_STATE( 605 EXPECT_ACTION_UPDATE_STATE(
574 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 606 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
575 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 607 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
576 EXPECT_TRUE(state.CommitPending()); 608 EXPECT_TRUE(state.CommitPending());
577 609
578 // Then initiate a draw. 610 // Then initiate a draw.
579 state.SetNeedsRedraw(true); 611 state.SetNeedsRedraw(true);
580 state.OnBeginImplFrameDeadline(); 612 state.OnBeginImplFrameDeadline();
581 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); 613 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
582 614
583 // Fail the draw enough times to force a redraw. 615 // Fail the draw enough times to force a redraw.
584 for (int i = 0; i < draw_limit; ++i) { 616 for (int i = 0; i < draw_limit; ++i) {
585 state.SetNeedsRedraw(true); 617 state.SetNeedsRedraw(true);
586 state.OnBeginImplFrame(); 618 state.IssueNextBeginImplFrame();
587 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 619 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
588 state.OnBeginImplFrameDeadline(); 620 state.OnBeginImplFrameDeadline();
589 state.SetDrawResultForTest(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); 621 state.SetDrawResultForTest(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS);
590 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); 622 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
591 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 623 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
592 state.OnBeginImplFrameIdle(); 624 state.OnBeginImplFrameIdle();
593 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 625 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
594 } 626 }
595 627
596 EXPECT_TRUE(state.BeginFrameNeeded()); 628 EXPECT_TRUE(state.BeginFrameNeeded());
597 EXPECT_TRUE(state.RedrawPending()); 629 EXPECT_TRUE(state.RedrawPending());
598 // But the commit is ongoing. 630 // But the commit is ongoing.
599 EXPECT_TRUE(state.CommitPending()); 631 EXPECT_TRUE(state.CommitPending());
600 EXPECT_TRUE(state.ForcedRedrawState() == 632 EXPECT_TRUE(state.ForcedRedrawState() ==
601 SchedulerStateMachine::FORCED_REDRAW_STATE_WAITING_FOR_COMMIT); 633 SchedulerStateMachine::FORCED_REDRAW_STATE_WAITING_FOR_COMMIT);
602 634
603 // After failing additional draws, we should still be in a forced 635 // After failing additional draws, we should still be in a forced
604 // redraw, but not back in IDLE. 636 // redraw, but not back in IDLE.
605 for (int i = 0; i < draw_limit; ++i) { 637 for (int i = 0; i < draw_limit; ++i) {
606 state.SetNeedsRedraw(true); 638 state.SetNeedsRedraw(true);
607 state.OnBeginImplFrame(); 639 state.IssueNextBeginImplFrame();
608 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 640 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
609 state.OnBeginImplFrameDeadline(); 641 state.OnBeginImplFrameDeadline();
610 state.SetDrawResultForTest(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); 642 state.SetDrawResultForTest(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS);
611 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); 643 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
612 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 644 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
613 state.OnBeginImplFrameIdle(); 645 state.OnBeginImplFrameIdle();
614 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 646 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
615 } 647 }
616 EXPECT_TRUE(state.RedrawPending()); 648 EXPECT_TRUE(state.RedrawPending());
617 EXPECT_TRUE(state.ForcedRedrawState() == 649 EXPECT_TRUE(state.ForcedRedrawState() ==
618 SchedulerStateMachine::FORCED_REDRAW_STATE_WAITING_FOR_COMMIT); 650 SchedulerStateMachine::FORCED_REDRAW_STATE_WAITING_FOR_COMMIT);
619 } 651 }
620 652
621 TEST(SchedulerStateMachineTest, TestFailedDrawIsRetriedInNextBeginImplFrame) { 653 TEST(SchedulerStateMachineTest, TestFailedDrawIsRetriedInNextBeginImplFrame) {
622 SchedulerSettings default_scheduler_settings; 654 SchedulerSettings default_scheduler_settings;
623 StateMachine state(default_scheduler_settings); 655 StateMachine state(default_scheduler_settings);
624 SET_UP_STATE(state) 656 SET_UP_STATE(state)
625 657
626 // Start a draw. 658 // Start a draw.
627 state.SetNeedsRedraw(true); 659 state.SetNeedsRedraw(true);
628 EXPECT_TRUE(state.BeginFrameNeeded()); 660 EXPECT_TRUE(state.BeginFrameNeeded());
629 state.OnBeginImplFrame(); 661 state.IssueNextBeginImplFrame();
630 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 662 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
631 state.OnBeginImplFrameDeadline(); 663 state.OnBeginImplFrameDeadline();
632 EXPECT_TRUE(state.RedrawPending()); 664 EXPECT_TRUE(state.RedrawPending());
633 state.SetDrawResultForTest(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); 665 state.SetDrawResultForTest(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS);
634 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); 666 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
635 667
636 // Failing the draw for animation checkerboards makes us require a commit. 668 // Failing the draw for animation checkerboards makes us require a commit.
637 EXPECT_ACTION_UPDATE_STATE( 669 EXPECT_ACTION_UPDATE_STATE(
638 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 670 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
639 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 671 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
640 EXPECT_TRUE(state.RedrawPending()); 672 EXPECT_TRUE(state.RedrawPending());
641 673
642 // We should not be trying to draw again now, but we have a commit pending. 674 // We should not be trying to draw again now, but we have a commit pending.
643 EXPECT_TRUE(state.BeginFrameNeeded()); 675 EXPECT_TRUE(state.BeginFrameNeeded());
644 state.OnBeginImplFrame(); 676 state.IssueNextBeginImplFrame();
645 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 677 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
646 678
647 // We should try to draw again at the end of the next BeginImplFrame on 679 // We should try to draw again at the end of the next BeginImplFrame on
648 // the impl thread. 680 // the impl thread.
649 state.OnBeginImplFrameDeadline(); 681 state.OnBeginImplFrameDeadline();
650 state.SetDrawResultForTest(DRAW_SUCCESS); 682 state.SetDrawResultForTest(DRAW_SUCCESS);
651 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); 683 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
652 state.DidSubmitCompositorFrame(); 684 state.DidSubmitCompositorFrame();
653 state.DidReceiveCompositorFrameAck(); 685 state.DidReceiveCompositorFrameAck();
654 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 686 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
655 } 687 }
656 688
657 TEST(SchedulerStateMachineTest, TestDoestDrawTwiceInSameFrame) { 689 TEST(SchedulerStateMachineTest, TestDoestDrawTwiceInSameFrame) {
658 SchedulerSettings default_scheduler_settings; 690 SchedulerSettings default_scheduler_settings;
659 StateMachine state(default_scheduler_settings); 691 StateMachine state(default_scheduler_settings);
660 SET_UP_STATE(state) 692 SET_UP_STATE(state)
661 state.SetNeedsRedraw(true); 693 state.SetNeedsRedraw(true);
662 694
663 // Draw the first frame. 695 // Draw the first frame.
664 EXPECT_TRUE(state.BeginFrameNeeded()); 696 EXPECT_TRUE(state.BeginFrameNeeded());
665 state.OnBeginImplFrame(); 697 state.IssueNextBeginImplFrame();
666 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 698 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
667 699
668 state.OnBeginImplFrameDeadline(); 700 state.OnBeginImplFrameDeadline();
669 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); 701 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
670 state.DidSubmitCompositorFrame(); 702 state.DidSubmitCompositorFrame();
671 state.DidReceiveCompositorFrameAck(); 703 state.DidReceiveCompositorFrameAck();
672 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 704 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
673 705
674 // Before the next BeginImplFrame, set needs redraw again. 706 // Before the next BeginImplFrame, set needs redraw again.
675 // This should not redraw until the next BeginImplFrame. 707 // This should not redraw until the next BeginImplFrame.
676 state.SetNeedsRedraw(true); 708 state.SetNeedsRedraw(true);
677 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 709 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
678 710
679 // Move to another frame. This should now draw. 711 // Move to another frame. This should now draw.
680 EXPECT_TRUE(state.BeginFrameNeeded()); 712 EXPECT_TRUE(state.BeginFrameNeeded());
681 state.OnBeginImplFrame(); 713 state.IssueNextBeginImplFrame();
682 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 714 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
683 state.OnBeginImplFrameDeadline(); 715 state.OnBeginImplFrameDeadline();
684 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); 716 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
685 state.DidSubmitCompositorFrame(); 717 state.DidSubmitCompositorFrame();
686 state.DidReceiveCompositorFrameAck(); 718 state.DidReceiveCompositorFrameAck();
687 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 719 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
688 720
689 // We just submitted, so we should proactively request another BeginImplFrame. 721 // We just submitted, so we should proactively request another BeginImplFrame.
690 EXPECT_TRUE(state.BeginFrameNeeded()); 722 EXPECT_TRUE(state.BeginFrameNeeded());
691 } 723 }
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
809 StateMachine state(default_scheduler_settings); 841 StateMachine state(default_scheduler_settings);
810 state.SetVisible(true); 842 state.SetVisible(true);
811 EXPECT_ACTION_UPDATE_STATE( 843 EXPECT_ACTION_UPDATE_STATE(
812 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION); 844 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION);
813 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 845 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
814 state.CreateAndInitializeCompositorFrameSinkWithActivatedCommit(); 846 state.CreateAndInitializeCompositorFrameSinkWithActivatedCommit();
815 state.SetBeginMainFrameState(begin_main_frame_states[i]); 847 state.SetBeginMainFrameState(begin_main_frame_states[i]);
816 state.SetVisible(false); 848 state.SetVisible(false);
817 state.SetNeedsRedraw(true); 849 state.SetNeedsRedraw(true);
818 if (j == 1) 850 if (j == 1)
819 state.OnBeginImplFrame(); 851 state.IssueNextBeginImplFrame();
820 852
821 state.SetCanDraw(false); 853 state.SetCanDraw(false);
822 EXPECT_NE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, 854 EXPECT_NE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE,
823 state.NextAction()); 855 state.NextAction());
824 } 856 }
825 } 857 }
826 } 858 }
827 859
828 TEST(SchedulerStateMachineTest, 860 TEST(SchedulerStateMachineTest,
829 TestCanRedrawWithWaitingForFirstDrawMakesProgress) { 861 TestCanRedrawWithWaitingForFirstDrawMakesProgress) {
830 SchedulerSettings default_scheduler_settings; 862 SchedulerSettings default_scheduler_settings;
831 StateMachine state(default_scheduler_settings); 863 StateMachine state(default_scheduler_settings);
832 state.SetVisible(true); 864 state.SetVisible(true);
833 EXPECT_ACTION_UPDATE_STATE( 865 EXPECT_ACTION_UPDATE_STATE(
834 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION); 866 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION);
835 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 867 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
836 state.CreateAndInitializeCompositorFrameSinkWithActivatedCommit(); 868 state.CreateAndInitializeCompositorFrameSinkWithActivatedCommit();
837 869
838 state.SetActiveTreeNeedsFirstDraw(true); 870 state.SetActiveTreeNeedsFirstDraw(true);
839 state.SetNeedsBeginMainFrame(); 871 state.SetNeedsBeginMainFrame();
840 state.SetNeedsRedraw(true); 872 state.SetNeedsRedraw(true);
841 state.SetCanDraw(false); 873 state.SetCanDraw(false);
842 state.OnBeginImplFrame(); 874 state.IssueNextBeginImplFrame();
843 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_ABORT); 875 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_ABORT);
844 EXPECT_ACTION_UPDATE_STATE( 876 EXPECT_ACTION_UPDATE_STATE(
845 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 877 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
846 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 878 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
847 state.NotifyBeginMainFrameStarted(); 879 state.NotifyBeginMainFrameStarted();
848 state.NotifyReadyToCommit(); 880 state.NotifyReadyToCommit();
849 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 881 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
850 state.NotifyReadyToActivate(); 882 state.NotifyReadyToActivate();
851 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); 883 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE);
852 state.OnBeginImplFrameDeadline(); 884 state.OnBeginImplFrameDeadline();
853 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_ABORT); 885 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_ABORT);
854 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 886 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
855 } 887 }
856 888
857 TEST(SchedulerStateMachineTest, TestSetNeedsBeginMainFrameIsNotLost) { 889 TEST(SchedulerStateMachineTest, TestSetNeedsBeginMainFrameIsNotLost) {
858 SchedulerSettings scheduler_settings; 890 SchedulerSettings scheduler_settings;
859 StateMachine state(scheduler_settings); 891 StateMachine state(scheduler_settings);
860 SET_UP_STATE(state) 892 SET_UP_STATE(state)
861 state.SetNeedsBeginMainFrame(); 893 state.SetNeedsBeginMainFrame();
862 894
863 EXPECT_TRUE(state.BeginFrameNeeded()); 895 EXPECT_TRUE(state.BeginFrameNeeded());
864 896
865 // Begin the frame. 897 // Begin the frame.
866 state.OnBeginImplFrame(); 898 state.IssueNextBeginImplFrame();
867 EXPECT_ACTION_UPDATE_STATE( 899 EXPECT_ACTION_UPDATE_STATE(
868 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 900 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
869 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_SENT); 901 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_SENT);
870 902
871 // Now, while the frame is in progress, set another commit. 903 // Now, while the frame is in progress, set another commit.
872 state.SetNeedsBeginMainFrame(); 904 state.SetNeedsBeginMainFrame();
873 EXPECT_TRUE(state.NeedsCommit()); 905 EXPECT_TRUE(state.NeedsCommit());
874 906
875 // Let the frame finish. 907 // Let the frame finish.
876 state.NotifyBeginMainFrameStarted(); 908 state.NotifyBeginMainFrameStarted();
877 state.NotifyReadyToCommit(); 909 state.NotifyReadyToCommit();
878 EXPECT_MAIN_FRAME_STATE( 910 EXPECT_MAIN_FRAME_STATE(
879 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_READY_TO_COMMIT); 911 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_READY_TO_COMMIT);
880 912
881 // Expect to commit regardless of BeginImplFrame state. 913 // Expect to commit regardless of BeginImplFrame state.
882 EXPECT_IMPL_FRAME_STATE( 914 EXPECT_IMPL_FRAME_STATE(
883 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME); 915 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME);
884 EXPECT_ACTION(SchedulerStateMachine::ACTION_COMMIT); 916 EXPECT_ACTION(SchedulerStateMachine::ACTION_COMMIT);
885 917
886 state.OnBeginImplFrameDeadline(); 918 state.OnBeginImplFrameDeadline();
887 EXPECT_IMPL_FRAME_STATE( 919 EXPECT_IMPL_FRAME_STATE(
888 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE); 920 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE);
889 EXPECT_ACTION(SchedulerStateMachine::ACTION_COMMIT); 921 EXPECT_ACTION(SchedulerStateMachine::ACTION_COMMIT);
890 922
891 state.OnBeginImplFrameIdle(); 923 state.OnBeginImplFrameIdle();
892 EXPECT_IMPL_FRAME_STATE(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE); 924 EXPECT_IMPL_FRAME_STATE(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE);
893 EXPECT_ACTION(SchedulerStateMachine::ACTION_COMMIT); 925 EXPECT_ACTION(SchedulerStateMachine::ACTION_COMMIT);
894 926
895 state.OnBeginImplFrame(); 927 state.IssueNextBeginImplFrame();
896 EXPECT_IMPL_FRAME_STATE( 928 EXPECT_IMPL_FRAME_STATE(
897 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME); 929 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME);
898 EXPECT_ACTION(SchedulerStateMachine::ACTION_COMMIT); 930 EXPECT_ACTION(SchedulerStateMachine::ACTION_COMMIT);
899 931
900 // Finish the commit and activate, then make sure we start the next commit 932 // Finish the commit and activate, then make sure we start the next commit
901 // immediately and draw on the next BeginImplFrame. 933 // immediately and draw on the next BeginImplFrame.
902 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 934 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
903 state.NotifyReadyToActivate(); 935 state.NotifyReadyToActivate();
904 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); 936 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE);
905 EXPECT_ACTION_UPDATE_STATE( 937 EXPECT_ACTION_UPDATE_STATE(
(...skipping 11 matching lines...) Expand all
917 949
918 TEST(SchedulerStateMachineTest, TestFullCycle) { 950 TEST(SchedulerStateMachineTest, TestFullCycle) {
919 SchedulerSettings default_scheduler_settings; 951 SchedulerSettings default_scheduler_settings;
920 StateMachine state(default_scheduler_settings); 952 StateMachine state(default_scheduler_settings);
921 SET_UP_STATE(state) 953 SET_UP_STATE(state)
922 954
923 // Start clean and set commit. 955 // Start clean and set commit.
924 state.SetNeedsBeginMainFrame(); 956 state.SetNeedsBeginMainFrame();
925 957
926 // Begin the frame. 958 // Begin the frame.
927 state.OnBeginImplFrame(); 959 state.IssueNextBeginImplFrame();
928 EXPECT_ACTION_UPDATE_STATE( 960 EXPECT_ACTION_UPDATE_STATE(
929 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 961 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
930 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_SENT); 962 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_SENT);
931 EXPECT_FALSE(state.NeedsCommit()); 963 EXPECT_FALSE(state.NeedsCommit());
932 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 964 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
933 965
934 // Tell the scheduler the frame finished. 966 // Tell the scheduler the frame finished.
935 state.NotifyBeginMainFrameStarted(); 967 state.NotifyBeginMainFrameStarted();
936 state.NotifyReadyToCommit(); 968 state.NotifyReadyToCommit();
937 EXPECT_MAIN_FRAME_STATE( 969 EXPECT_MAIN_FRAME_STATE(
(...skipping 25 matching lines...) Expand all
963 995
964 TEST(SchedulerStateMachineTest, CommitWithoutDrawWithPendingTree) { 996 TEST(SchedulerStateMachineTest, CommitWithoutDrawWithPendingTree) {
965 SchedulerSettings default_scheduler_settings; 997 SchedulerSettings default_scheduler_settings;
966 StateMachine state(default_scheduler_settings); 998 StateMachine state(default_scheduler_settings);
967 SET_UP_STATE(state) 999 SET_UP_STATE(state)
968 1000
969 // Start clean and set commit. 1001 // Start clean and set commit.
970 state.SetNeedsBeginMainFrame(); 1002 state.SetNeedsBeginMainFrame();
971 1003
972 // Make a main frame, commit and activate it. But don't draw it. 1004 // Make a main frame, commit and activate it. But don't draw it.
973 state.OnBeginImplFrame(); 1005 state.IssueNextBeginImplFrame();
974 EXPECT_ACTION_UPDATE_STATE( 1006 EXPECT_ACTION_UPDATE_STATE(
975 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1007 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
976 state.NotifyBeginMainFrameStarted(); 1008 state.NotifyBeginMainFrameStarted();
977 state.NotifyReadyToCommit(); 1009 state.NotifyReadyToCommit();
978 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 1010 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
979 state.NotifyReadyToActivate(); 1011 state.NotifyReadyToActivate();
980 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); 1012 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE);
981 1013
982 // Try to make a new main frame before drawing. Since we will commit it to a 1014 // Try to make a new main frame before drawing. Since we will commit it to a
983 // pending tree and not clobber the active tree, we're able to start a new 1015 // pending tree and not clobber the active tree, we're able to start a new
984 // begin frame and commit it. 1016 // begin frame and commit it.
985 state.SetNeedsBeginMainFrame(); 1017 state.SetNeedsBeginMainFrame();
986 state.OnBeginImplFrame(); 1018 state.IssueNextBeginImplFrame();
987 EXPECT_ACTION_UPDATE_STATE( 1019 EXPECT_ACTION_UPDATE_STATE(
988 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1020 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
989 state.NotifyBeginMainFrameStarted(); 1021 state.NotifyBeginMainFrameStarted();
990 state.NotifyReadyToCommit(); 1022 state.NotifyReadyToCommit();
991 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 1023 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
992 } 1024 }
993 1025
994 TEST(SchedulerStateMachineTest, DontCommitWithoutDrawWithoutPendingTree) { 1026 TEST(SchedulerStateMachineTest, DontCommitWithoutDrawWithoutPendingTree) {
995 SchedulerSettings scheduler_settings; 1027 SchedulerSettings scheduler_settings;
996 scheduler_settings.commit_to_active_tree = true; 1028 scheduler_settings.commit_to_active_tree = true;
997 scheduler_settings.main_frame_before_activation_enabled = false; 1029 scheduler_settings.main_frame_before_activation_enabled = false;
998 StateMachine state(scheduler_settings); 1030 StateMachine state(scheduler_settings);
999 SET_UP_STATE(state) 1031 SET_UP_STATE(state)
1000 1032
1001 // Start clean and set commit. 1033 // Start clean and set commit.
1002 state.SetNeedsBeginMainFrame(); 1034 state.SetNeedsBeginMainFrame();
1003 1035
1004 // Make a main frame, commit and activate it. But don't draw it. 1036 // Make a main frame, commit and activate it. But don't draw it.
1005 state.OnBeginImplFrame(); 1037 state.OnBeginImplFrame(0, 10);
1006 EXPECT_ACTION_UPDATE_STATE( 1038 EXPECT_ACTION_UPDATE_STATE(
1007 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1039 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
1040 EXPECT_SEQUENCE_NUMBERS(10u, 10u, BeginFrameArgs::kInvalidFrameNumber,
1041 BeginFrameArgs::kInvalidFrameNumber,
1042 BeginFrameArgs::kInvalidFrameNumber);
1008 state.NotifyBeginMainFrameStarted(); 1043 state.NotifyBeginMainFrameStarted();
1009 state.NotifyReadyToCommit(); 1044 state.NotifyReadyToCommit();
1010 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 1045 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
1046 EXPECT_SEQUENCE_NUMBERS(10u, 10u, 10u, BeginFrameArgs::kInvalidFrameNumber,
1047 BeginFrameArgs::kInvalidFrameNumber);
1011 state.NotifyReadyToActivate(); 1048 state.NotifyReadyToActivate();
1012 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); 1049 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE);
1050 EXPECT_SEQUENCE_NUMBERS(10u, 10u, 10u, 10u,
1051 BeginFrameArgs::kInvalidFrameNumber);
1013 1052
1014 // Try to make a new main frame before drawing, but since we would clobber the 1053 // Try to make a new main frame before drawing, but since we would clobber the
1015 // active tree, we will not do so. 1054 // active tree, we will not do so.
1016 state.SetNeedsBeginMainFrame(); 1055 state.SetNeedsBeginMainFrame();
1017 state.OnBeginImplFrame(); 1056 state.OnBeginImplFrame(0, 11);
1018 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1057 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1058 EXPECT_SEQUENCE_NUMBERS(11u, 10u, 10u, 10u,
1059 BeginFrameArgs::kInvalidFrameNumber);
1019 } 1060 }
1020 1061
1021 TEST(SchedulerStateMachineTest, AbortedMainFrameDoesNotResetPendingTree) { 1062 TEST(SchedulerStateMachineTest, AbortedMainFrameDoesNotResetPendingTree) {
1022 SchedulerSettings scheduler_settings; 1063 SchedulerSettings scheduler_settings;
1023 scheduler_settings.main_frame_before_activation_enabled = true; 1064 scheduler_settings.main_frame_before_activation_enabled = true;
1024 StateMachine state(scheduler_settings); 1065 StateMachine state(scheduler_settings);
1025 SET_UP_STATE(state); 1066 SET_UP_STATE(state);
1026 1067
1027 // Perform a commit so that we have an active tree. 1068 // Perform a commit so that we have an active tree.
1028 state.SetNeedsBeginMainFrame(); 1069 state.SetNeedsBeginMainFrame();
1029 state.OnBeginImplFrame(); 1070 state.IssueNextBeginImplFrame();
1030 EXPECT_ACTION_UPDATE_STATE( 1071 EXPECT_ACTION_UPDATE_STATE(
1031 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1072 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
1032 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1073 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1033 state.NotifyBeginMainFrameStarted(); 1074 state.NotifyBeginMainFrameStarted();
1034 state.NotifyReadyToCommit(); 1075 state.NotifyReadyToCommit();
1035 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 1076 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
1036 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1077 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1037 EXPECT_TRUE(state.has_pending_tree()); 1078 EXPECT_TRUE(state.has_pending_tree());
1038 state.OnBeginImplFrameDeadline(); 1079 state.OnBeginImplFrameDeadline();
1039 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1080 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1040 1081
1041 // Ask for another commit but abort it. Verify that we didn't reset pending 1082 // Ask for another commit but abort it. Verify that we didn't reset pending
1042 // tree state. 1083 // tree state.
1043 state.SetNeedsBeginMainFrame(); 1084 state.SetNeedsBeginMainFrame();
1044 state.OnBeginImplFrame(); 1085 state.IssueNextBeginImplFrame();
1045 EXPECT_ACTION_UPDATE_STATE( 1086 EXPECT_ACTION_UPDATE_STATE(
1046 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1087 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
1047 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1088 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1048 EXPECT_TRUE(state.has_pending_tree()); 1089 EXPECT_TRUE(state.has_pending_tree());
1049 state.NotifyBeginMainFrameStarted(); 1090 state.NotifyBeginMainFrameStarted();
1050 state.BeginMainFrameAborted(CommitEarlyOutReason::FINISHED_NO_UPDATES); 1091 state.BeginMainFrameAborted(CommitEarlyOutReason::FINISHED_NO_UPDATES);
1051 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1092 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1052 EXPECT_TRUE(state.has_pending_tree()); 1093 EXPECT_TRUE(state.has_pending_tree());
1053 state.OnBeginImplFrameDeadline(); 1094 state.OnBeginImplFrameDeadline();
1054 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1095 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1055 1096
1056 // Ask for another commit that doesn't abort. 1097 // Ask for another commit that doesn't abort.
1057 state.SetNeedsBeginMainFrame(); 1098 state.SetNeedsBeginMainFrame();
1058 state.OnBeginImplFrame(); 1099 state.IssueNextBeginImplFrame();
1059 EXPECT_ACTION_UPDATE_STATE( 1100 EXPECT_ACTION_UPDATE_STATE(
1060 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1101 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
1061 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1102 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1062 state.NotifyBeginMainFrameStarted(); 1103 state.NotifyBeginMainFrameStarted();
1063 state.NotifyReadyToCommit(); 1104 state.NotifyReadyToCommit();
1064 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1105 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1065 EXPECT_TRUE(state.has_pending_tree()); 1106 EXPECT_TRUE(state.has_pending_tree());
1066 1107
1067 // Verify that commit is delayed until the pending tree is activated. 1108 // Verify that commit is delayed until the pending tree is activated.
1068 state.NotifyReadyToActivate(); 1109 state.NotifyReadyToActivate();
1069 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); 1110 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE);
1070 EXPECT_FALSE(state.has_pending_tree()); 1111 EXPECT_FALSE(state.has_pending_tree());
1071 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 1112 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
1072 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1113 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1073 EXPECT_TRUE(state.has_pending_tree()); 1114 EXPECT_TRUE(state.has_pending_tree());
1074 } 1115 }
1075 1116
1076 TEST(SchedulerStateMachineTest, TestFullCycleWithCommitToActive) { 1117 TEST(SchedulerStateMachineTest, TestFullCycleWithCommitToActive) {
1077 SchedulerSettings scheduler_settings; 1118 SchedulerSettings scheduler_settings;
1078 scheduler_settings.commit_to_active_tree = true; 1119 scheduler_settings.commit_to_active_tree = true;
1079 scheduler_settings.main_frame_before_activation_enabled = false; 1120 scheduler_settings.main_frame_before_activation_enabled = false;
1080 StateMachine state(scheduler_settings); 1121 StateMachine state(scheduler_settings);
1081 SET_UP_STATE(state) 1122 SET_UP_STATE(state)
1082 1123
1083 // Start clean and set commit. 1124 // Start clean and set commit.
1084 state.SetNeedsBeginMainFrame(); 1125 state.SetNeedsBeginMainFrame();
1085 1126
1086 // Begin the frame. 1127 // Begin the frame.
1087 state.OnBeginImplFrame(); 1128 state.OnBeginImplFrame(0, 10);
1088 EXPECT_ACTION_UPDATE_STATE( 1129 EXPECT_ACTION_UPDATE_STATE(
1089 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1130 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
1090 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_SENT); 1131 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_SENT);
1091 EXPECT_FALSE(state.NeedsCommit()); 1132 EXPECT_FALSE(state.NeedsCommit());
1092 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1133 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1134 EXPECT_SEQUENCE_NUMBERS(10u, 10u, BeginFrameArgs::kInvalidFrameNumber,
1135 BeginFrameArgs::kInvalidFrameNumber,
1136 BeginFrameArgs::kInvalidFrameNumber);
1093 1137
1094 // Tell the scheduler the frame finished. 1138 // Tell the scheduler the frame finished.
1095 state.NotifyBeginMainFrameStarted(); 1139 state.NotifyBeginMainFrameStarted();
1096 state.NotifyReadyToCommit(); 1140 state.NotifyReadyToCommit();
1097 EXPECT_MAIN_FRAME_STATE( 1141 EXPECT_MAIN_FRAME_STATE(
1098 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_READY_TO_COMMIT); 1142 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_READY_TO_COMMIT);
1099 // Commit. 1143 // Commit.
1100 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 1144 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
1145 EXPECT_SEQUENCE_NUMBERS(10u, 10u, 10u, BeginFrameArgs::kInvalidFrameNumber,
1146 BeginFrameArgs::kInvalidFrameNumber);
1101 // Commit always calls NotifyReadyToActivate in this mode. 1147 // Commit always calls NotifyReadyToActivate in this mode.
1102 state.NotifyReadyToActivate(); 1148 state.NotifyReadyToActivate();
1103 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); 1149 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE);
1104 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1150 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1151 EXPECT_SEQUENCE_NUMBERS(10u, 10u, 10u, 10u,
1152 BeginFrameArgs::kInvalidFrameNumber);
1105 1153
1106 // No draw because we haven't received NotifyReadyToDraw yet. 1154 // No draw because we haven't received NotifyReadyToDraw yet.
1107 state.OnBeginImplFrameDeadline(); 1155 state.OnBeginImplFrameDeadline();
1108 EXPECT_TRUE(state.active_tree_needs_first_draw()); 1156 EXPECT_TRUE(state.active_tree_needs_first_draw());
1109 EXPECT_TRUE(state.needs_redraw()); 1157 EXPECT_TRUE(state.needs_redraw());
1110 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1158 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1159 EXPECT_SEQUENCE_NUMBERS(10u, 10u, 10u, 10u,
1160 BeginFrameArgs::kInvalidFrameNumber);
1111 1161
1112 // Can't BeginMainFrame yet since last commit hasn't been drawn yet. 1162 // Can't BeginMainFrame yet since last commit hasn't been drawn yet.
1113 state.SetNeedsBeginMainFrame(); 1163 state.SetNeedsBeginMainFrame();
1114 state.OnBeginImplFrame(); 1164 state.OnBeginImplFrame(0, 11);
1115 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1165 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1166 EXPECT_SEQUENCE_NUMBERS(11u, 10u, 10u, 10u,
1167 BeginFrameArgs::kInvalidFrameNumber);
1116 1168
1117 // Now call ready to draw which will allow the draw to happen and 1169 // Now call ready to draw which will allow the draw to happen and
1118 // BeginMainFrame to be sent. 1170 // BeginMainFrame to be sent.
1119 state.NotifyReadyToDraw(); 1171 state.NotifyReadyToDraw();
1120 state.OnBeginImplFrameDeadline(); 1172 state.OnBeginImplFrameDeadline();
1121 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); 1173 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
1174 EXPECT_SEQUENCE_NUMBERS(11u, 10u, 10u, 10u, 10u);
1122 // Submit throttled from this point. 1175 // Submit throttled from this point.
1123 state.DidSubmitCompositorFrame(); 1176 state.DidSubmitCompositorFrame();
1124 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1177 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1125 1178
1126 // Can't BeginMainFrame yet since we're submit-frame throttled. 1179 // Can't BeginMainFrame yet since we're submit-frame throttled.
1127 state.OnBeginImplFrame(); 1180 state.OnBeginImplFrame(0, 12);
1128 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1181 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1182 EXPECT_SEQUENCE_NUMBERS(12u, 10u, 10u, 10u, 10u);
1129 1183
1130 // CompositorFrameAck unblocks BeginMainFrame. 1184 // CompositorFrameAck unblocks BeginMainFrame.
1131 state.DidReceiveCompositorFrameAck(); 1185 state.DidReceiveCompositorFrameAck();
1132 EXPECT_ACTION_UPDATE_STATE( 1186 EXPECT_ACTION_UPDATE_STATE(
1133 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1187 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
1188 EXPECT_SEQUENCE_NUMBERS(12u, 12u, 10u, 10u, 10u);
1134 state.NotifyBeginMainFrameStarted(); 1189 state.NotifyBeginMainFrameStarted();
1135 state.NotifyReadyToCommit(); 1190 state.NotifyReadyToCommit();
1136 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 1191 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
1192 EXPECT_SEQUENCE_NUMBERS(12u, 12u, 12u, 10u, 10u);
1137 state.NotifyReadyToActivate(); 1193 state.NotifyReadyToActivate();
1138 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); 1194 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE);
1139 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1195 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1196 EXPECT_SEQUENCE_NUMBERS(12u, 12u, 12u, 12u, 10u);
1140 1197
1141 // Draw the newly activated tree. 1198 // Draw the newly activated tree.
1142 state.NotifyReadyToDraw(); 1199 state.NotifyReadyToDraw();
1143 state.OnBeginImplFrameDeadline(); 1200 state.OnBeginImplFrameDeadline();
1144 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); 1201 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
1145 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1202 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1203 EXPECT_SEQUENCE_NUMBERS(12u, 12u, 12u, 12u, 12u);
1146 } 1204 }
1147 1205
1148 TEST(SchedulerStateMachineTest, TestFullCycleWithCommitRequestInbetween) { 1206 TEST(SchedulerStateMachineTest, TestFullCycleWithCommitRequestInbetween) {
1149 SchedulerSettings default_scheduler_settings; 1207 SchedulerSettings default_scheduler_settings;
1150 StateMachine state(default_scheduler_settings); 1208 StateMachine state(default_scheduler_settings);
1151 SET_UP_STATE(state) 1209 SET_UP_STATE(state)
1152 1210
1153 // Start clean and set commit. 1211 // Start clean and set commit.
1154 state.SetNeedsBeginMainFrame(); 1212 state.SetNeedsBeginMainFrame();
1155 1213
1156 // Begin the frame. 1214 // Begin the frame.
1157 state.OnBeginImplFrame(); 1215 state.IssueNextBeginImplFrame();
1158 EXPECT_ACTION_UPDATE_STATE( 1216 EXPECT_ACTION_UPDATE_STATE(
1159 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1217 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
1160 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_SENT); 1218 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_SENT);
1161 EXPECT_FALSE(state.NeedsCommit()); 1219 EXPECT_FALSE(state.NeedsCommit());
1162 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1220 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1163 1221
1164 // Request another commit while the commit is in flight. 1222 // Request another commit while the commit is in flight.
1165 state.SetNeedsBeginMainFrame(); 1223 state.SetNeedsBeginMainFrame();
1166 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1224 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1167 1225
(...skipping 18 matching lines...) Expand all
1186 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); 1244 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
1187 state.DidSubmitCompositorFrame(); 1245 state.DidSubmitCompositorFrame();
1188 state.DidReceiveCompositorFrameAck(); 1246 state.DidReceiveCompositorFrameAck();
1189 1247
1190 // Should be synchronized, no draw needed, no action needed. 1248 // Should be synchronized, no draw needed, no action needed.
1191 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1249 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1192 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE); 1250 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE);
1193 EXPECT_FALSE(state.needs_redraw()); 1251 EXPECT_FALSE(state.needs_redraw());
1194 1252
1195 // Next BeginImplFrame should initiate second commit. 1253 // Next BeginImplFrame should initiate second commit.
1196 state.OnBeginImplFrame(); 1254 state.IssueNextBeginImplFrame();
1197 EXPECT_ACTION_UPDATE_STATE( 1255 EXPECT_ACTION_UPDATE_STATE(
1198 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1256 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
1199 } 1257 }
1200 1258
1201 TEST(SchedulerStateMachineTest, TestNoRequestCommitWhenInvisible) { 1259 TEST(SchedulerStateMachineTest, TestNoRequestCommitWhenInvisible) {
1202 SchedulerSettings default_scheduler_settings; 1260 SchedulerSettings default_scheduler_settings;
1203 StateMachine state(default_scheduler_settings); 1261 StateMachine state(default_scheduler_settings);
1204 state.SetVisible(true); 1262 state.SetVisible(true);
1205 EXPECT_ACTION_UPDATE_STATE( 1263 EXPECT_ACTION_UPDATE_STATE(
1206 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION); 1264 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION);
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
1249 // "EarlyOut_CompositorFrameSinkLost" cases. 1307 // "EarlyOut_CompositorFrameSinkLost" cases.
1250 TEST(SchedulerStateMachineTest, TestAbortBeginMainFrameBecauseInvisible) { 1308 TEST(SchedulerStateMachineTest, TestAbortBeginMainFrameBecauseInvisible) {
1251 SchedulerSettings default_scheduler_settings; 1309 SchedulerSettings default_scheduler_settings;
1252 StateMachine state(default_scheduler_settings); 1310 StateMachine state(default_scheduler_settings);
1253 SET_UP_STATE(state) 1311 SET_UP_STATE(state)
1254 1312
1255 // Start clean and set commit. 1313 // Start clean and set commit.
1256 state.SetNeedsBeginMainFrame(); 1314 state.SetNeedsBeginMainFrame();
1257 1315
1258 // Begin the frame while visible. 1316 // Begin the frame while visible.
1259 state.OnBeginImplFrame(); 1317 state.IssueNextBeginImplFrame();
1260 EXPECT_ACTION_UPDATE_STATE( 1318 EXPECT_ACTION_UPDATE_STATE(
1261 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1319 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
1262 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_SENT); 1320 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_SENT);
1263 EXPECT_FALSE(state.NeedsCommit()); 1321 EXPECT_FALSE(state.NeedsCommit());
1264 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1322 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1265 1323
1266 // Become invisible and abort BeginMainFrame. 1324 // Become invisible and abort BeginMainFrame.
1267 state.SetVisible(false); 1325 state.SetVisible(false);
1268 state.NotifyBeginMainFrameStarted(); 1326 state.NotifyBeginMainFrameStarted();
1269 state.BeginMainFrameAborted(CommitEarlyOutReason::ABORTED_NOT_VISIBLE); 1327 state.BeginMainFrameAborted(CommitEarlyOutReason::ABORTED_NOT_VISIBLE);
(...skipping 13 matching lines...) Expand all
1283 // Become visible again. 1341 // Become visible again.
1284 state.SetVisible(true); 1342 state.SetVisible(true);
1285 1343
1286 // Although we have aborted on this frame and haven't cancelled the commit 1344 // Although we have aborted on this frame and haven't cancelled the commit
1287 // (i.e. need another), don't send another BeginMainFrame yet. 1345 // (i.e. need another), don't send another BeginMainFrame yet.
1288 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE); 1346 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE);
1289 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); 1347 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE);
1290 EXPECT_TRUE(state.NeedsCommit()); 1348 EXPECT_TRUE(state.NeedsCommit());
1291 1349
1292 // Start a new frame. 1350 // Start a new frame.
1293 state.OnBeginImplFrame(); 1351 state.IssueNextBeginImplFrame();
1294 EXPECT_ACTION_UPDATE_STATE( 1352 EXPECT_ACTION_UPDATE_STATE(
1295 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1353 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
1296 1354
1297 // We should be starting the commit now. 1355 // We should be starting the commit now.
1298 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_SENT); 1356 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_SENT);
1299 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1357 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1300 } 1358 }
1301 1359
1302 // See ProxyMain::BeginMainFrame "EarlyOut_NoUpdates" case. 1360 // See ProxyMain::BeginMainFrame "EarlyOut_NoUpdates" case.
1303 TEST(SchedulerStateMachineTest, TestAbortBeginMainFrameBecauseCommitNotNeeded) { 1361 TEST(SchedulerStateMachineTest, TestAbortBeginMainFrameBecauseCommitNotNeeded) {
1304 SchedulerSettings default_scheduler_settings; 1362 SchedulerSettings default_scheduler_settings;
1305 StateMachine state(default_scheduler_settings); 1363 StateMachine state(default_scheduler_settings);
1306 state.SetVisible(true); 1364 state.SetVisible(true);
1307 EXPECT_ACTION_UPDATE_STATE( 1365 EXPECT_ACTION_UPDATE_STATE(
1308 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION); 1366 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION);
1309 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1367 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1310 state.DidCreateAndInitializeCompositorFrameSink(); 1368 state.DidCreateAndInitializeCompositorFrameSink();
1311 state.SetCanDraw(true); 1369 state.SetCanDraw(true);
1312 1370
1313 // Get into a begin frame / commit state. 1371 // Get into a begin frame / commit state.
1314 state.SetNeedsBeginMainFrame(); 1372 state.SetNeedsBeginMainFrame();
1315 state.OnBeginImplFrame(); 1373 state.IssueNextBeginImplFrame();
1316 EXPECT_ACTION_UPDATE_STATE( 1374 EXPECT_ACTION_UPDATE_STATE(
1317 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1375 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
1318 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_SENT); 1376 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_SENT);
1319 EXPECT_FALSE(state.NeedsCommit()); 1377 EXPECT_FALSE(state.NeedsCommit());
1320 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); 1378 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE);
1321 1379
1322 // Abort the commit, true means that the BeginMainFrame was sent but there 1380 // Abort the commit, true means that the BeginMainFrame was sent but there
1323 // was no work to do on the main thread. 1381 // was no work to do on the main thread.
1324 state.NotifyBeginMainFrameStarted(); 1382 state.NotifyBeginMainFrameStarted();
1325 state.BeginMainFrameAborted(CommitEarlyOutReason::FINISHED_NO_UPDATES); 1383 state.BeginMainFrameAborted(CommitEarlyOutReason::FINISHED_NO_UPDATES);
1326 1384
1327 // NeedsCommit should now be false because the commit was actually handled. 1385 // NeedsCommit should now be false because the commit was actually handled.
1328 EXPECT_FALSE(state.NeedsCommit()); 1386 EXPECT_FALSE(state.NeedsCommit());
1329 1387
1330 // Since the commit was aborted, we don't need to try and draw. 1388 // Since the commit was aborted, we don't need to try and draw.
1331 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1389 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1332 state.OnBeginImplFrameDeadline(); 1390 state.OnBeginImplFrameDeadline();
1333 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1391 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1334 1392
1335 // Verify another commit doesn't start on another frame either. 1393 // Verify another commit doesn't start on another frame either.
1336 EXPECT_FALSE(state.NeedsCommit()); 1394 EXPECT_FALSE(state.NeedsCommit());
1337 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE); 1395 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE);
1338 1396
1339 state.OnBeginImplFrame(); 1397 state.IssueNextBeginImplFrame();
1340 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1398 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1341 state.OnBeginImplFrameDeadline(); 1399 state.OnBeginImplFrameDeadline();
1342 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1400 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1343 1401
1344 // Verify another commit can start if requested, though. 1402 // Verify another commit can start if requested, though.
1345 state.SetNeedsBeginMainFrame(); 1403 state.SetNeedsBeginMainFrame();
1346 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE); 1404 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE);
1347 state.OnBeginImplFrame(); 1405 state.IssueNextBeginImplFrame();
1348 EXPECT_ACTION(SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1406 EXPECT_ACTION(SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
1349 } 1407 }
1350 1408
1351 TEST(SchedulerStateMachineTest, TestFirstContextCreation) { 1409 TEST(SchedulerStateMachineTest, TestFirstContextCreation) {
1352 SchedulerSettings default_scheduler_settings; 1410 SchedulerSettings default_scheduler_settings;
1353 StateMachine state(default_scheduler_settings); 1411 StateMachine state(default_scheduler_settings);
1354 state.SetVisible(true); 1412 state.SetVisible(true);
1355 state.SetCanDraw(true); 1413 state.SetCanDraw(true);
1356 1414
1357 EXPECT_ACTION_UPDATE_STATE( 1415 EXPECT_ACTION_UPDATE_STATE(
1358 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION); 1416 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION);
1359 state.CreateAndInitializeCompositorFrameSinkWithActivatedCommit(); 1417 state.CreateAndInitializeCompositorFrameSinkWithActivatedCommit();
1360 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1418 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1361 1419
1362 // Check that the first init does not SetNeedsBeginMainFrame. 1420 // Check that the first init does not SetNeedsBeginMainFrame.
1363 state.OnBeginImplFrame(); 1421 state.IssueNextBeginImplFrame();
1364 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1422 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1365 state.OnBeginImplFrameDeadline(); 1423 state.OnBeginImplFrameDeadline();
1366 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1424 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1367 1425
1368 // Check that a needs commit initiates a BeginMainFrame. 1426 // Check that a needs commit initiates a BeginMainFrame.
1369 state.SetNeedsBeginMainFrame(); 1427 state.SetNeedsBeginMainFrame();
1370 state.OnBeginImplFrame(); 1428 state.IssueNextBeginImplFrame();
1371 EXPECT_ACTION_UPDATE_STATE( 1429 EXPECT_ACTION_UPDATE_STATE(
1372 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1430 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
1373 } 1431 }
1374 1432
1375 TEST(SchedulerStateMachineTest, TestContextLostWhenCompletelyIdle) { 1433 TEST(SchedulerStateMachineTest, TestContextLostWhenCompletelyIdle) {
1376 SchedulerSettings default_scheduler_settings; 1434 SchedulerSettings default_scheduler_settings;
1377 StateMachine state(default_scheduler_settings); 1435 StateMachine state(default_scheduler_settings);
1378 SET_UP_STATE(state) 1436 SET_UP_STATE(state)
1379 1437
1380 EXPECT_NE(SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION, 1438 EXPECT_NE(SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION,
1381 state.NextAction()); 1439 state.NextAction());
1382 state.DidLoseCompositorFrameSink(); 1440 state.DidLoseCompositorFrameSink();
1383 1441
1384 EXPECT_ACTION_UPDATE_STATE( 1442 EXPECT_ACTION_UPDATE_STATE(
1385 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION); 1443 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION);
1386 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1444 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1387 1445
1388 // Once context recreation begins, nothing should happen. 1446 // Once context recreation begins, nothing should happen.
1389 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1447 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1390 1448
1391 // Recreate the context. 1449 // Recreate the context.
1392 state.CreateAndInitializeCompositorFrameSinkWithActivatedCommit(); 1450 state.CreateAndInitializeCompositorFrameSinkWithActivatedCommit();
1393 1451
1394 // When the context is recreated, we should begin a commit. 1452 // When the context is recreated, we should begin a commit.
1395 state.OnBeginImplFrame(); 1453 state.IssueNextBeginImplFrame();
1396 EXPECT_ACTION_UPDATE_STATE( 1454 EXPECT_ACTION_UPDATE_STATE(
1397 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1455 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
1398 } 1456 }
1399 1457
1400 TEST(SchedulerStateMachineTest, 1458 TEST(SchedulerStateMachineTest,
1401 TestContextLostWhenIdleAndCommitRequestedWhileRecreating) { 1459 TestContextLostWhenIdleAndCommitRequestedWhileRecreating) {
1402 SchedulerSettings default_scheduler_settings; 1460 SchedulerSettings default_scheduler_settings;
1403 StateMachine state(default_scheduler_settings); 1461 StateMachine state(default_scheduler_settings);
1404 SET_UP_STATE(state) 1462 SET_UP_STATE(state)
1405 1463
1406 EXPECT_NE(SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION, 1464 EXPECT_NE(SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION,
1407 state.NextAction()); 1465 state.NextAction());
1408 state.DidLoseCompositorFrameSink(); 1466 state.DidLoseCompositorFrameSink();
1409 EXPECT_EQ(state.compositor_frame_sink_state(), 1467 EXPECT_EQ(state.compositor_frame_sink_state(),
1410 SchedulerStateMachine::COMPOSITOR_FRAME_SINK_NONE); 1468 SchedulerStateMachine::COMPOSITOR_FRAME_SINK_NONE);
1411 1469
1412 EXPECT_ACTION_UPDATE_STATE( 1470 EXPECT_ACTION_UPDATE_STATE(
1413 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION); 1471 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION);
1414 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1472 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1415 1473
1416 // Once context recreation begins, nothing should happen. 1474 // Once context recreation begins, nothing should happen.
1417 state.OnBeginImplFrame(); 1475 state.IssueNextBeginImplFrame();
1418 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1476 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1419 state.OnBeginImplFrameDeadline(); 1477 state.OnBeginImplFrameDeadline();
1420 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1478 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1421 1479
1422 // While context is recreating, commits shouldn't begin. 1480 // While context is recreating, commits shouldn't begin.
1423 state.SetNeedsBeginMainFrame(); 1481 state.SetNeedsBeginMainFrame();
1424 state.OnBeginImplFrame(); 1482 state.IssueNextBeginImplFrame();
1425 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1483 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1426 state.OnBeginImplFrameDeadline(); 1484 state.OnBeginImplFrameDeadline();
1427 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1485 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1428 1486
1429 // Recreate the context 1487 // Recreate the context
1430 state.DidCreateAndInitializeCompositorFrameSink(); 1488 state.DidCreateAndInitializeCompositorFrameSink();
1431 EXPECT_EQ( 1489 EXPECT_EQ(
1432 state.compositor_frame_sink_state(), 1490 state.compositor_frame_sink_state(),
1433 SchedulerStateMachine::COMPOSITOR_FRAME_SINK_WAITING_FOR_FIRST_COMMIT); 1491 SchedulerStateMachine::COMPOSITOR_FRAME_SINK_WAITING_FOR_FIRST_COMMIT);
1434 EXPECT_FALSE(state.RedrawPending()); 1492 EXPECT_FALSE(state.RedrawPending());
1435 1493
1436 // When the context is recreated, we wait until the next BeginImplFrame 1494 // When the context is recreated, we wait until the next BeginImplFrame
1437 // before starting. 1495 // before starting.
1438 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1496 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1439 1497
1440 // When the BeginFrame comes in we should begin a commit 1498 // When the BeginFrame comes in we should begin a commit
1441 state.OnBeginImplFrame(); 1499 state.IssueNextBeginImplFrame();
1442 EXPECT_ACTION_UPDATE_STATE( 1500 EXPECT_ACTION_UPDATE_STATE(
1443 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1501 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
1444 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1502 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1445 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_SENT); 1503 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_SENT);
1446 1504
1447 // Until that commit finishes, we shouldn't be drawing. 1505 // Until that commit finishes, we shouldn't be drawing.
1448 state.OnBeginImplFrameDeadline(); 1506 state.OnBeginImplFrameDeadline();
1449 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1507 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1450 1508
1451 // Finish the commit, which should make the surface active. 1509 // Finish the commit, which should make the surface active.
1452 state.NotifyBeginMainFrameStarted(); 1510 state.NotifyBeginMainFrameStarted();
1453 state.NotifyReadyToCommit(); 1511 state.NotifyReadyToCommit();
1454 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 1512 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
1455 EXPECT_EQ(state.compositor_frame_sink_state(), 1513 EXPECT_EQ(state.compositor_frame_sink_state(),
1456 SchedulerStateMachine:: 1514 SchedulerStateMachine::
1457 COMPOSITOR_FRAME_SINK_WAITING_FOR_FIRST_ACTIVATION); 1515 COMPOSITOR_FRAME_SINK_WAITING_FOR_FIRST_ACTIVATION);
1458 state.NotifyReadyToActivate(); 1516 state.NotifyReadyToActivate();
1459 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); 1517 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE);
1460 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1518 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1461 EXPECT_EQ(state.compositor_frame_sink_state(), 1519 EXPECT_EQ(state.compositor_frame_sink_state(),
1462 SchedulerStateMachine::COMPOSITOR_FRAME_SINK_ACTIVE); 1520 SchedulerStateMachine::COMPOSITOR_FRAME_SINK_ACTIVE);
1463 1521
1464 // Finishing the first commit after initializing an CompositorFrameSink should 1522 // Finishing the first commit after initializing an CompositorFrameSink should
1465 // automatically cause a redraw. 1523 // automatically cause a redraw.
1466 EXPECT_TRUE(state.RedrawPending()); 1524 EXPECT_TRUE(state.RedrawPending());
1467 state.OnBeginImplFrame(); 1525 state.IssueNextBeginImplFrame();
1468 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1526 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1469 state.OnBeginImplFrameDeadline(); 1527 state.OnBeginImplFrameDeadline();
1470 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); 1528 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
1471 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1529 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1472 EXPECT_FALSE(state.RedrawPending()); 1530 EXPECT_FALSE(state.RedrawPending());
1473 1531
1474 // Next frame as no work to do. 1532 // Next frame as no work to do.
1475 state.OnBeginImplFrame(); 1533 state.IssueNextBeginImplFrame();
1476 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1534 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1477 state.OnBeginImplFrameDeadline(); 1535 state.OnBeginImplFrameDeadline();
1478 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1536 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1479 1537
1480 // Once the context is recreated, whether we draw should be based on 1538 // Once the context is recreated, whether we draw should be based on
1481 // SetCanDraw if waiting on first draw after activate. 1539 // SetCanDraw if waiting on first draw after activate.
1482 state.SetNeedsRedraw(true); 1540 state.SetNeedsRedraw(true);
1483 state.OnBeginImplFrame(); 1541 state.IssueNextBeginImplFrame();
1484 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1542 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1485 state.OnBeginImplFrameDeadline(); 1543 state.OnBeginImplFrameDeadline();
1486 EXPECT_ACTION(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); 1544 EXPECT_ACTION(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
1487 state.SetCanDraw(false); 1545 state.SetCanDraw(false);
1488 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); 1546 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE);
1489 state.SetCanDraw(true); 1547 state.SetCanDraw(true);
1490 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); 1548 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
1491 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1549 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1492 1550
1493 // Once the context is recreated, whether we draw should be based on 1551 // Once the context is recreated, whether we draw should be based on
1494 // SetCanDraw if waiting on first draw after activate. 1552 // SetCanDraw if waiting on first draw after activate.
1495 state.SetNeedsRedraw(true); 1553 state.SetNeedsRedraw(true);
1496 state.SetNeedsBeginMainFrame(); 1554 state.SetNeedsBeginMainFrame();
1497 state.OnBeginImplFrame(); 1555 state.IssueNextBeginImplFrame();
1498 EXPECT_ACTION_UPDATE_STATE( 1556 EXPECT_ACTION_UPDATE_STATE(
1499 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1557 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
1500 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1558 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1501 // Activate so we need the first draw 1559 // Activate so we need the first draw
1502 state.NotifyBeginMainFrameStarted(); 1560 state.NotifyBeginMainFrameStarted();
1503 state.NotifyReadyToCommit(); 1561 state.NotifyReadyToCommit();
1504 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 1562 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
1505 state.NotifyReadyToActivate(); 1563 state.NotifyReadyToActivate();
1506 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); 1564 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE);
1507 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1565 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
(...skipping 11 matching lines...) Expand all
1519 TEST(SchedulerStateMachineTest, TestContextLostWhileCommitInProgress) { 1577 TEST(SchedulerStateMachineTest, TestContextLostWhileCommitInProgress) {
1520 SchedulerSettings scheduler_settings; 1578 SchedulerSettings scheduler_settings;
1521 StateMachine state(scheduler_settings); 1579 StateMachine state(scheduler_settings);
1522 SET_UP_STATE(state) 1580 SET_UP_STATE(state)
1523 1581
1524 // Get a commit in flight. 1582 // Get a commit in flight.
1525 state.SetNeedsBeginMainFrame(); 1583 state.SetNeedsBeginMainFrame();
1526 1584
1527 // Set damage and expect a draw. 1585 // Set damage and expect a draw.
1528 state.SetNeedsRedraw(true); 1586 state.SetNeedsRedraw(true);
1529 state.OnBeginImplFrame(); 1587 state.OnBeginImplFrame(0, 10);
1530 EXPECT_ACTION_UPDATE_STATE( 1588 EXPECT_ACTION_UPDATE_STATE(
1531 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1589 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
1532 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1590 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1533 state.OnBeginImplFrameDeadline(); 1591 state.OnBeginImplFrameDeadline();
1534 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); 1592 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
1535 state.DidSubmitCompositorFrame(); 1593 state.DidSubmitCompositorFrame();
1536 state.DidReceiveCompositorFrameAck(); 1594 state.DidReceiveCompositorFrameAck();
1537 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1595 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1596 EXPECT_SEQUENCE_NUMBERS(10u, 10u, BeginFrameArgs::kInvalidFrameNumber,
1597 BeginFrameArgs::kInvalidFrameNumber,
1598 BeginFrameArgs::kInvalidFrameNumber);
1538 1599
1539 // Cause a lost context while the BeginMainFrame is in flight. 1600 // Cause a lost context while the BeginMainFrame is in flight.
1540 state.DidLoseCompositorFrameSink(); 1601 state.DidLoseCompositorFrameSink();
1602 EXPECT_FALSE(state.BeginFrameNeeded());
1541 1603
1542 // Ask for another draw. Expect nothing happens. 1604 // Ask for another draw. Expect nothing happens.
1543 state.SetNeedsRedraw(true); 1605 state.SetNeedsRedraw(true);
1544 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); 1606 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE);
1545 1607
1546 // Finish the frame, commit and activate. 1608 // Finish the frame, commit and activate.
1547 state.NotifyBeginMainFrameStarted(); 1609 state.NotifyBeginMainFrameStarted();
1548 state.NotifyReadyToCommit(); 1610 state.NotifyReadyToCommit();
1549 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 1611 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
1612 EXPECT_SEQUENCE_NUMBERS(10u, 10u, 10u, BeginFrameArgs::kInvalidFrameNumber,
1613 BeginFrameArgs::kInvalidFrameNumber);
1550 state.NotifyReadyToActivate(); 1614 state.NotifyReadyToActivate();
1551 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); 1615 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE);
1616 EXPECT_SEQUENCE_NUMBERS(10u, 10u, 10u, 10u,
1617 BeginFrameArgs::kInvalidFrameNumber);
1552 1618
1553 // We will abort the draw when the CompositorFrameSink is lost if we are 1619 // We will abort the draw when the CompositorFrameSink is lost if we are
1554 // waiting for the first draw to unblock the main thread. 1620 // waiting for the first draw to unblock the main thread.
1555 EXPECT_TRUE(state.active_tree_needs_first_draw()); 1621 EXPECT_TRUE(state.active_tree_needs_first_draw());
1556 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_ABORT); 1622 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_ABORT);
1623 EXPECT_SEQUENCE_NUMBERS(10u, 10u, 10u, 10u,
1624 BeginFrameArgs::kInvalidFrameNumber);
1557 1625
1558 // Expect to begin context recreation only in BEGIN_IMPL_FRAME_STATE_IDLE 1626 // Expect to begin context recreation only in BEGIN_IMPL_FRAME_STATE_IDLE
1559 EXPECT_IMPL_FRAME_STATE(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE); 1627 EXPECT_IMPL_FRAME_STATE(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE);
1560 EXPECT_ACTION( 1628 EXPECT_ACTION(
1561 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION); 1629 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION);
1562 1630
1563 state.OnBeginImplFrame(); 1631 state.OnBeginImplFrame(0, 11);
1564 EXPECT_IMPL_FRAME_STATE( 1632 EXPECT_IMPL_FRAME_STATE(
1565 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME); 1633 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME);
1566 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); 1634 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE);
1635 EXPECT_SEQUENCE_NUMBERS(11u, 10u, 10u, 10u,
1636 BeginFrameArgs::kInvalidFrameNumber);
1567 1637
1568 state.OnBeginImplFrameDeadline(); 1638 state.OnBeginImplFrameDeadline();
1569 EXPECT_IMPL_FRAME_STATE( 1639 EXPECT_IMPL_FRAME_STATE(
1570 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE); 1640 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE);
1571 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); 1641 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE);
1642 EXPECT_SEQUENCE_NUMBERS(11u, 10u, 10u, 11u, 11u);
1572 } 1643 }
1573 1644
1574 TEST(SchedulerStateMachineTest, 1645 TEST(SchedulerStateMachineTest,
1575 TestContextLostWhileCommitInProgressAndAnotherCommitRequested) { 1646 TestContextLostWhileCommitInProgressAndAnotherCommitRequested) {
1576 SchedulerSettings scheduler_settings; 1647 SchedulerSettings scheduler_settings;
1577 StateMachine state(scheduler_settings); 1648 StateMachine state(scheduler_settings);
1578 SET_UP_STATE(state) 1649 SET_UP_STATE(state)
1579 1650
1580 // Get a commit in flight. 1651 // Get a commit in flight.
1581 state.SetNeedsBeginMainFrame(); 1652 state.SetNeedsBeginMainFrame();
1582 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1653 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1583 1654
1584 // Set damage and expect a draw. 1655 // Set damage and expect a draw.
1585 state.SetNeedsRedraw(true); 1656 state.SetNeedsRedraw(true);
1586 state.OnBeginImplFrame(); 1657 state.IssueNextBeginImplFrame();
1587 EXPECT_ACTION_UPDATE_STATE( 1658 EXPECT_ACTION_UPDATE_STATE(
1588 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1659 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
1589 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1660 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1590 state.OnBeginImplFrameDeadline(); 1661 state.OnBeginImplFrameDeadline();
1591 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); 1662 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
1592 state.DidSubmitCompositorFrame(); 1663 state.DidSubmitCompositorFrame();
1593 state.DidReceiveCompositorFrameAck(); 1664 state.DidReceiveCompositorFrameAck();
1594 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1665 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1595 1666
1596 // Cause a lost context while the BeginMainFrame is in flight. 1667 // Cause a lost context while the BeginMainFrame is in flight.
(...skipping 13 matching lines...) Expand all
1610 EXPECT_TRUE(state.active_tree_needs_first_draw()); 1681 EXPECT_TRUE(state.active_tree_needs_first_draw());
1611 1682
1612 // Because the CompositorFrameSink is missing, we expect the draw to abort. 1683 // Because the CompositorFrameSink is missing, we expect the draw to abort.
1613 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_ABORT); 1684 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_ABORT);
1614 1685
1615 // Expect to begin context recreation only in BEGIN_IMPL_FRAME_STATE_IDLE 1686 // Expect to begin context recreation only in BEGIN_IMPL_FRAME_STATE_IDLE
1616 EXPECT_IMPL_FRAME_STATE(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE); 1687 EXPECT_IMPL_FRAME_STATE(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE);
1617 EXPECT_ACTION( 1688 EXPECT_ACTION(
1618 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION); 1689 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION);
1619 1690
1620 state.OnBeginImplFrame(); 1691 state.IssueNextBeginImplFrame();
1621 EXPECT_IMPL_FRAME_STATE( 1692 EXPECT_IMPL_FRAME_STATE(
1622 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME); 1693 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME);
1623 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); 1694 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE);
1624 1695
1625 state.OnBeginImplFrameDeadline(); 1696 state.OnBeginImplFrameDeadline();
1626 EXPECT_IMPL_FRAME_STATE( 1697 EXPECT_IMPL_FRAME_STATE(
1627 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE); 1698 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE);
1628 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); 1699 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE);
1629 1700
1630 state.OnBeginImplFrameIdle(); 1701 state.OnBeginImplFrameIdle();
1631 EXPECT_ACTION_UPDATE_STATE( 1702 EXPECT_ACTION_UPDATE_STATE(
1632 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION); 1703 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION);
1633 1704
1634 // After we get a new CompositorFrameSink, the commit flow should start. 1705 // After we get a new CompositorFrameSink, the commit flow should start.
1635 state.CreateAndInitializeCompositorFrameSinkWithActivatedCommit(); 1706 state.CreateAndInitializeCompositorFrameSinkWithActivatedCommit();
1636 state.OnBeginImplFrame(); 1707 state.IssueNextBeginImplFrame();
1637 EXPECT_ACTION_UPDATE_STATE( 1708 EXPECT_ACTION_UPDATE_STATE(
1638 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1709 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
1639 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1710 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1640 state.NotifyBeginMainFrameStarted(); 1711 state.NotifyBeginMainFrameStarted();
1641 state.NotifyReadyToCommit(); 1712 state.NotifyReadyToCommit();
1642 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 1713 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
1643 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1714 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1644 state.NotifyReadyToActivate(); 1715 state.NotifyReadyToActivate();
1645 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); 1716 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE);
1646 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1717 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
(...skipping 13 matching lines...) Expand all
1660 state.SetNeedsRedraw(true); 1731 state.SetNeedsRedraw(true);
1661 1732
1662 // Cause a lost CompositorFrameSink, and restore it. 1733 // Cause a lost CompositorFrameSink, and restore it.
1663 state.DidLoseCompositorFrameSink(); 1734 state.DidLoseCompositorFrameSink();
1664 EXPECT_ACTION_UPDATE_STATE( 1735 EXPECT_ACTION_UPDATE_STATE(
1665 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION); 1736 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION);
1666 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1737 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1667 state.DidCreateAndInitializeCompositorFrameSink(); 1738 state.DidCreateAndInitializeCompositorFrameSink();
1668 1739
1669 EXPECT_FALSE(state.RedrawPending()); 1740 EXPECT_FALSE(state.RedrawPending());
1670 state.OnBeginImplFrame(); 1741 state.IssueNextBeginImplFrame();
1671 EXPECT_ACTION(SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1742 EXPECT_ACTION(SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
1672 } 1743 }
1673 1744
1674 TEST(SchedulerStateMachineTest, 1745 TEST(SchedulerStateMachineTest,
1675 TestPendingActivationsShouldBeForcedAfterLostCompositorFrameSink) { 1746 TestPendingActivationsShouldBeForcedAfterLostCompositorFrameSink) {
1676 SchedulerSettings default_scheduler_settings; 1747 SchedulerSettings default_scheduler_settings;
1677 StateMachine state(default_scheduler_settings); 1748 StateMachine state(default_scheduler_settings);
1678 SET_UP_STATE(state) 1749 SET_UP_STATE(state)
1679 1750
1680 state.SetBeginMainFrameState( 1751 state.SetBeginMainFrameState(
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
1723 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1794 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1724 state.CreateAndInitializeCompositorFrameSinkWithActivatedCommit(); 1795 state.CreateAndInitializeCompositorFrameSinkWithActivatedCommit();
1725 state.SetVisible(false); 1796 state.SetVisible(false);
1726 state.SetNeedsBeginMainFrame(); 1797 state.SetNeedsBeginMainFrame();
1727 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); 1798 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE);
1728 EXPECT_FALSE(state.BeginFrameNeeded()); 1799 EXPECT_FALSE(state.BeginFrameNeeded());
1729 1800
1730 // When become visible again, the needs commit should still be pending. 1801 // When become visible again, the needs commit should still be pending.
1731 state.SetVisible(true); 1802 state.SetVisible(true);
1732 EXPECT_TRUE(state.BeginFrameNeeded()); 1803 EXPECT_TRUE(state.BeginFrameNeeded());
1733 state.OnBeginImplFrame(); 1804 state.IssueNextBeginImplFrame();
1734 EXPECT_ACTION_UPDATE_STATE( 1805 EXPECT_ACTION_UPDATE_STATE(
1735 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1806 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
1736 } 1807 }
1737 1808
1738 TEST(SchedulerStateMachineTest, TestFinishCommitWhenCommitInProgress) { 1809 TEST(SchedulerStateMachineTest, TestFinishCommitWhenCommitInProgress) {
1739 SchedulerSettings default_scheduler_settings; 1810 SchedulerSettings default_scheduler_settings;
1740 StateMachine state(default_scheduler_settings); 1811 StateMachine state(default_scheduler_settings);
1741 state.SetVisible(true); 1812 state.SetVisible(true);
1742 EXPECT_ACTION_UPDATE_STATE( 1813 EXPECT_ACTION_UPDATE_STATE(
1743 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION); 1814 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION);
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
1887 } 1958 }
1888 1959
1889 TEST(SchedulerStateMachineTest, 1960 TEST(SchedulerStateMachineTest,
1890 TestTriggerDeadlineImmediatelyAfterAbortedCommit) { 1961 TestTriggerDeadlineImmediatelyAfterAbortedCommit) {
1891 SchedulerSettings default_scheduler_settings; 1962 SchedulerSettings default_scheduler_settings;
1892 StateMachine state(default_scheduler_settings); 1963 StateMachine state(default_scheduler_settings);
1893 SET_UP_STATE(state) 1964 SET_UP_STATE(state)
1894 1965
1895 // This test mirrors what happens during the first frame of a scroll gesture. 1966 // This test mirrors what happens during the first frame of a scroll gesture.
1896 // First we get the input event and a BeginFrame. 1967 // First we get the input event and a BeginFrame.
1897 state.OnBeginImplFrame(); 1968 state.IssueNextBeginImplFrame();
1898 1969
1899 // As a response the compositor requests a redraw and a commit to tell the 1970 // As a response the compositor requests a redraw and a commit to tell the
1900 // main thread about the new scroll offset. 1971 // main thread about the new scroll offset.
1901 state.SetNeedsRedraw(true); 1972 state.SetNeedsRedraw(true);
1902 state.SetNeedsBeginMainFrame(); 1973 state.SetNeedsBeginMainFrame();
1903 1974
1904 // We should start the commit normally. 1975 // We should start the commit normally.
1905 EXPECT_ACTION_UPDATE_STATE( 1976 EXPECT_ACTION_UPDATE_STATE(
1906 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1977 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
1907 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1978 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
(...skipping 14 matching lines...) Expand all
1922 StateMachine& state = *state_ptr; 1993 StateMachine& state = *state_ptr;
1923 1994
1924 state.NotifyBeginMainFrameStarted(); 1995 state.NotifyBeginMainFrameStarted();
1925 state.NotifyReadyToCommit(); 1996 state.NotifyReadyToCommit();
1926 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 1997 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
1927 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1998 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1928 state.NotifyReadyToActivate(); 1999 state.NotifyReadyToActivate();
1929 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); 2000 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE);
1930 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 2001 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1931 2002
1932 state.OnBeginImplFrame(); 2003 state.IssueNextBeginImplFrame();
1933 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 2004 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1934 2005
1935 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineImmediately()); 2006 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineImmediately());
1936 state.OnBeginImplFrameDeadline(); 2007 state.OnBeginImplFrameDeadline();
1937 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); 2008 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
1938 state.DidSubmitCompositorFrame(); 2009 state.DidSubmitCompositorFrame();
1939 } 2010 }
1940 2011
1941 TEST(SchedulerStateMachineTest, TestImplLatencyTakesPriority) { 2012 TEST(SchedulerStateMachineTest, TestImplLatencyTakesPriority) {
1942 SchedulerSettings default_scheduler_settings; 2013 SchedulerSettings default_scheduler_settings;
1943 StateMachine state(default_scheduler_settings); 2014 StateMachine state(default_scheduler_settings);
1944 SET_UP_STATE(state) 2015 SET_UP_STATE(state)
1945 2016
1946 // This test ensures that impl-draws are prioritized over main thread updates 2017 // This test ensures that impl-draws are prioritized over main thread updates
1947 // in prefer impl latency mode. 2018 // in prefer impl latency mode.
1948 state.SetNeedsRedraw(true); 2019 state.SetNeedsRedraw(true);
1949 state.SetNeedsBeginMainFrame(); 2020 state.SetNeedsBeginMainFrame();
1950 state.OnBeginImplFrame(); 2021 state.IssueNextBeginImplFrame();
1951 EXPECT_ACTION_UPDATE_STATE( 2022 EXPECT_ACTION_UPDATE_STATE(
1952 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 2023 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
1953 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 2024 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1954 2025
1955 // Verify the deadline is not triggered early until we enter 2026 // Verify the deadline is not triggered early until we enter
1956 // prefer impl latency mode. 2027 // prefer impl latency mode.
1957 EXPECT_FALSE(state.ShouldTriggerBeginImplFrameDeadlineImmediately()); 2028 EXPECT_FALSE(state.ShouldTriggerBeginImplFrameDeadlineImmediately());
1958 state.SetTreePrioritiesAndScrollState( 2029 state.SetTreePrioritiesAndScrollState(
1959 SMOOTHNESS_TAKES_PRIORITY, 2030 SMOOTHNESS_TAKES_PRIORITY,
1960 ScrollHandlerState::SCROLL_DOES_NOT_AFFECT_SCROLL_HANDLER); 2031 ScrollHandlerState::SCROLL_DOES_NOT_AFFECT_SCROLL_HANDLER);
(...skipping 16 matching lines...) Expand all
1977 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 2048 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1978 2049
1979 // Finish the previous commit and draw it. 2050 // Finish the previous commit and draw it.
1980 FinishPreviousCommitAndDrawWithoutExitingDeadline(&state); 2051 FinishPreviousCommitAndDrawWithoutExitingDeadline(&state);
1981 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 2052 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1982 2053
1983 // Verify we do not send another BeginMainFrame if was are submit-frame 2054 // Verify we do not send another BeginMainFrame if was are submit-frame
1984 // throttled and did not just submit one. 2055 // throttled and did not just submit one.
1985 state.SetNeedsBeginMainFrame(); 2056 state.SetNeedsBeginMainFrame();
1986 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 2057 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1987 state.OnBeginImplFrame(); 2058 state.IssueNextBeginImplFrame();
1988 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 2059 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1989 EXPECT_FALSE(state.ShouldTriggerBeginImplFrameDeadlineImmediately()); 2060 EXPECT_FALSE(state.ShouldTriggerBeginImplFrameDeadlineImmediately());
1990 state.OnBeginImplFrameDeadline(); 2061 state.OnBeginImplFrameDeadline();
1991 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 2062 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1992 } 2063 }
1993 2064
1994 TEST(SchedulerStateMachineTest, 2065 TEST(SchedulerStateMachineTest,
1995 TestTriggerDeadlineImmediatelyOnLostCompositorFrameSink) { 2066 TestTriggerDeadlineImmediatelyOnLostCompositorFrameSink) {
1996 SchedulerSettings default_scheduler_settings; 2067 SchedulerSettings default_scheduler_settings;
1997 StateMachine state(default_scheduler_settings); 2068 StateMachine state(default_scheduler_settings);
1998 SET_UP_STATE(state) 2069 SET_UP_STATE(state)
1999 2070
2000 state.SetNeedsBeginMainFrame(); 2071 state.SetNeedsBeginMainFrame();
2001 2072
2002 state.OnBeginImplFrame(); 2073 state.IssueNextBeginImplFrame();
2003 EXPECT_ACTION_UPDATE_STATE( 2074 EXPECT_ACTION_UPDATE_STATE(
2004 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 2075 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
2005 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 2076 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
2006 EXPECT_FALSE(state.ShouldTriggerBeginImplFrameDeadlineImmediately()); 2077 EXPECT_FALSE(state.ShouldTriggerBeginImplFrameDeadlineImmediately());
2007 2078
2008 state.DidLoseCompositorFrameSink(); 2079 state.DidLoseCompositorFrameSink();
2009 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 2080 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
2010 // The deadline should be triggered immediately when CompositorFrameSink is 2081 // The deadline should be triggered immediately when CompositorFrameSink is
2011 // lost. 2082 // lost.
2012 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineImmediately()); 2083 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineImmediately());
2013 } 2084 }
2014 2085
2015 TEST(SchedulerStateMachineTest, TestTriggerDeadlineImmediatelyWhenInvisible) { 2086 TEST(SchedulerStateMachineTest, TestTriggerDeadlineImmediatelyWhenInvisible) {
2016 SchedulerSettings default_scheduler_settings; 2087 SchedulerSettings default_scheduler_settings;
2017 StateMachine state(default_scheduler_settings); 2088 StateMachine state(default_scheduler_settings);
2018 SET_UP_STATE(state) 2089 SET_UP_STATE(state)
2019 2090
2020 state.SetNeedsBeginMainFrame(); 2091 state.SetNeedsBeginMainFrame();
2021 2092
2022 state.OnBeginImplFrame(); 2093 state.IssueNextBeginImplFrame();
2023 EXPECT_ACTION_UPDATE_STATE( 2094 EXPECT_ACTION_UPDATE_STATE(
2024 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 2095 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
2025 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 2096 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
2026 EXPECT_FALSE(state.ShouldTriggerBeginImplFrameDeadlineImmediately()); 2097 EXPECT_FALSE(state.ShouldTriggerBeginImplFrameDeadlineImmediately());
2027 2098
2028 state.SetVisible(false); 2099 state.SetVisible(false);
2029 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 2100 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
2030 EXPECT_TRUE(state.PendingActivationsShouldBeForced()); 2101 EXPECT_TRUE(state.PendingActivationsShouldBeForced());
2031 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineImmediately()); 2102 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineImmediately());
2032 } 2103 }
2033 2104
2034 TEST(SchedulerStateMachineTest, 2105 TEST(SchedulerStateMachineTest,
2035 TestTriggerDeadlineImmediatelyWhenBeginFrameSourcePaused) { 2106 TestTriggerDeadlineImmediatelyWhenBeginFrameSourcePaused) {
2036 SchedulerSettings default_scheduler_settings; 2107 SchedulerSettings default_scheduler_settings;
2037 StateMachine state(default_scheduler_settings); 2108 StateMachine state(default_scheduler_settings);
2038 SET_UP_STATE(state) 2109 SET_UP_STATE(state)
2039 2110
2040 state.SetNeedsBeginMainFrame(); 2111 state.SetNeedsBeginMainFrame();
2041 2112
2042 state.OnBeginImplFrame(); 2113 state.IssueNextBeginImplFrame();
2043 EXPECT_ACTION_UPDATE_STATE( 2114 EXPECT_ACTION_UPDATE_STATE(
2044 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 2115 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
2045 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 2116 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
2046 EXPECT_FALSE(state.ShouldTriggerBeginImplFrameDeadlineImmediately()); 2117 EXPECT_FALSE(state.ShouldTriggerBeginImplFrameDeadlineImmediately());
2047 2118
2048 state.SetBeginFrameSourcePaused(true); 2119 state.SetBeginFrameSourcePaused(true);
2049 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 2120 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
2050 EXPECT_TRUE(state.PendingActivationsShouldBeForced()); 2121 EXPECT_TRUE(state.PendingActivationsShouldBeForced());
2051 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineImmediately()); 2122 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineImmediately());
2052 } 2123 }
2053 2124
2054 TEST(SchedulerStateMachineTest, TestDeferCommit) { 2125 TEST(SchedulerStateMachineTest, TestDeferCommit) {
2055 SchedulerSettings settings; 2126 SchedulerSettings settings;
2056 StateMachine state(settings); 2127 StateMachine state(settings);
2057 SET_UP_STATE(state) 2128 SET_UP_STATE(state)
2058 2129
2059 state.SetDeferCommits(true); 2130 state.SetDeferCommits(true);
2060 2131
2061 state.SetNeedsBeginMainFrame(); 2132 state.SetNeedsBeginMainFrame();
2062 EXPECT_FALSE(state.BeginFrameNeeded()); 2133 EXPECT_FALSE(state.BeginFrameNeeded());
2063 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 2134 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
2064 2135
2065 state.OnBeginImplFrame(); 2136 state.IssueNextBeginImplFrame();
2066 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 2137 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
2067 2138
2068 state.OnBeginImplFrameDeadline(); 2139 state.OnBeginImplFrameDeadline();
2069 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 2140 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
2070 2141
2071 state.SetDeferCommits(false); 2142 state.SetDeferCommits(false);
2072 state.OnBeginImplFrame(); 2143 state.IssueNextBeginImplFrame();
2073 EXPECT_ACTION_UPDATE_STATE( 2144 EXPECT_ACTION_UPDATE_STATE(
2074 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 2145 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
2075 } 2146 }
2076 2147
2077 TEST(SchedulerStateMachineTest, EarlyOutCommitWantsProactiveBeginFrame) { 2148 TEST(SchedulerStateMachineTest, EarlyOutCommitWantsProactiveBeginFrame) {
2078 SchedulerSettings settings; 2149 SchedulerSettings settings;
2079 StateMachine state(settings); 2150 StateMachine state(settings);
2080 SET_UP_STATE(state); 2151 SET_UP_STATE(state);
2081 2152
2082 EXPECT_FALSE(state.ProactiveBeginFrameWanted()); 2153 EXPECT_FALSE(state.ProactiveBeginFrameWanted());
2083 bool commit_has_no_updates = true; 2154 bool commit_has_no_updates = true;
2084 state.WillCommit(commit_has_no_updates); 2155 state.WillCommit(commit_has_no_updates);
2085 EXPECT_TRUE(state.ProactiveBeginFrameWanted()); 2156 EXPECT_TRUE(state.ProactiveBeginFrameWanted());
2086 state.OnBeginImplFrame(); 2157 state.IssueNextBeginImplFrame();
2087 EXPECT_FALSE(state.ProactiveBeginFrameWanted()); 2158 EXPECT_FALSE(state.ProactiveBeginFrameWanted());
2088 } 2159 }
2089 2160
2090 TEST(SchedulerStateMachineTest, 2161 TEST(SchedulerStateMachineTest,
2091 NoCompositorFrameSinkCreationWhileCommitPending) { 2162 NoCompositorFrameSinkCreationWhileCommitPending) {
2092 SchedulerSettings settings; 2163 SchedulerSettings settings;
2093 StateMachine state(settings); 2164 StateMachine state(settings);
2094 SET_UP_STATE(state); 2165 SET_UP_STATE(state);
2095 2166
2096 // Set up the request for a commit and start a frame. 2167 // Set up the request for a commit and start a frame.
2097 state.SetNeedsBeginMainFrame(); 2168 state.SetNeedsBeginMainFrame();
2098 state.OnBeginImplFrame(); 2169 state.IssueNextBeginImplFrame();
2099 PerformAction(&state, SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 2170 PerformAction(&state, SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
2100 2171
2101 // Lose the CompositorFrameSink. 2172 // Lose the CompositorFrameSink.
2102 state.DidLoseCompositorFrameSink(); 2173 state.DidLoseCompositorFrameSink();
2103 2174
2104 // The scheduler shouldn't trigger the CompositorFrameSink creation till the 2175 // The scheduler shouldn't trigger the CompositorFrameSink creation till the
2105 // previous commit has been cleared. 2176 // previous commit has been cleared.
2106 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 2177 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
2107 2178
2108 // Trigger the deadline and ensure that the scheduler does not trigger any 2179 // Trigger the deadline and ensure that the scheduler does not trigger any
2109 // actions until we receive a response for the pending commit. 2180 // actions until we receive a response for the pending commit.
2110 state.OnBeginImplFrameDeadline(); 2181 state.OnBeginImplFrameDeadline();
2111 state.OnBeginImplFrameIdle(); 2182 state.OnBeginImplFrameIdle();
2112 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 2183 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
2113 2184
2114 // Abort the commit, since that is what we expect the main thread to do if the 2185 // Abort the commit, since that is what we expect the main thread to do if the
2115 // CompositorFrameSink was lost due to a synchronous call from the main thread 2186 // CompositorFrameSink was lost due to a synchronous call from the main thread
2116 // to release the CompositorFrameSink. 2187 // to release the CompositorFrameSink.
2117 state.NotifyBeginMainFrameStarted(); 2188 state.NotifyBeginMainFrameStarted();
2118 state.BeginMainFrameAborted( 2189 state.BeginMainFrameAborted(
2119 CommitEarlyOutReason::ABORTED_COMPOSITOR_FRAME_SINK_LOST); 2190 CommitEarlyOutReason::ABORTED_COMPOSITOR_FRAME_SINK_LOST);
2120 2191
2121 // The scheduler should begin the CompositorFrameSink creation now. 2192 // The scheduler should begin the CompositorFrameSink creation now.
2122 EXPECT_ACTION_UPDATE_STATE( 2193 EXPECT_ACTION_UPDATE_STATE(
2123 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION); 2194 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION);
2124 } 2195 }
2125 2196
2197 TEST(SchedulerStateMachineTest, TestBeginFrameFreshnessInitialState) {
2198 SchedulerSettings default_scheduler_settings;
2199 StateMachine state(default_scheduler_settings);
2200 SET_UP_STATE(state)
2201
2202 // Initially, we report invalid frame numbers.
2203 EXPECT_SEQUENCE_NUMBERS(
2204 BeginFrameArgs::kInvalidFrameNumber, BeginFrameArgs::kInvalidFrameNumber,
2205 BeginFrameArgs::kInvalidFrameNumber, BeginFrameArgs::kInvalidFrameNumber,
2206 BeginFrameArgs::kInvalidFrameNumber);
2207 }
2208
2209 TEST(SchedulerStateMachineTest, TestBeginFrameFreshnessWithoutUpdates) {
2210 // Setup without any requested updates.
2211 SchedulerSettings default_scheduler_settings;
2212 StateMachine state(default_scheduler_settings);
2213 SET_UP_STATE(state)
2214 state.SetNeedsRedraw(false);
2215 EXPECT_FALSE(state.RedrawPending());
2216 EXPECT_FALSE(state.NeedsCommit());
2217
2218 // OnBeginImplFrame() updates the sequence number.
2219 state.OnBeginImplFrame(0, 10);
2220 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
2221 EXPECT_SEQUENCE_NUMBERS(10u, BeginFrameArgs::kInvalidFrameNumber,
2222 BeginFrameArgs::kInvalidFrameNumber,
2223 BeginFrameArgs::kInvalidFrameNumber,
2224 BeginFrameArgs::kInvalidFrameNumber);
2225
2226 // When no updates are required, OnBeginImplFrameDeadline() updates active
2227 // tree and compositor frame freshness.
2228 state.OnBeginImplFrameDeadline();
2229 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
2230 EXPECT_SEQUENCE_NUMBERS(10u, BeginFrameArgs::kInvalidFrameNumber,
2231 BeginFrameArgs::kInvalidFrameNumber, 10u, 10u);
2232 state.OnBeginImplFrameIdle();
2233 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
2234 }
2235
2236 TEST(SchedulerStateMachineTest, TestBeginFrameFreshnessWithImplFrameUpdates) {
2237 // Setup with an impl-thread draw requested.
2238 SchedulerSettings default_scheduler_settings;
2239 StateMachine state(default_scheduler_settings);
2240 SET_UP_STATE(state)
2241 state.SetNeedsRedraw(true);
2242 EXPECT_TRUE(state.RedrawPending());
2243 EXPECT_FALSE(state.NeedsCommit());
2244
2245 // OnBeginImplFrame() updates the sequence number.
2246 state.OnBeginImplFrame(0, 10);
2247 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
2248 EXPECT_SEQUENCE_NUMBERS(10u, BeginFrameArgs::kInvalidFrameNumber,
2249 BeginFrameArgs::kInvalidFrameNumber,
2250 BeginFrameArgs::kInvalidFrameNumber,
2251 BeginFrameArgs::kInvalidFrameNumber);
2252
2253 // With only an impl-thread draw requested, OnBeginImplFrameDeadline()
2254 // updates the active tree freshness.
2255 state.OnBeginImplFrameDeadline();
2256 EXPECT_SEQUENCE_NUMBERS(10u, BeginFrameArgs::kInvalidFrameNumber,
2257 BeginFrameArgs::kInvalidFrameNumber, 10u,
2258 BeginFrameArgs::kInvalidFrameNumber);
2259
2260 // Compositor frame freshness is updated when active tree is drawn.
2261 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
2262 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
2263 EXPECT_FALSE(state.RedrawPending());
2264 state.DidSubmitCompositorFrame();
2265 state.DidReceiveCompositorFrameAck();
2266 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
2267 EXPECT_SEQUENCE_NUMBERS(10u, BeginFrameArgs::kInvalidFrameNumber,
2268 BeginFrameArgs::kInvalidFrameNumber, 10u, 10u);
2269 state.OnBeginImplFrameIdle();
2270 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
2271 }
2272
2273 TEST(SchedulerStateMachineTest, TestBeginFrameFreshnessWithMainFrameUpdates) {
2274 // Setup with a BeginMainFrame requested.
2275 SchedulerSettings default_scheduler_settings;
2276 StateMachine state(default_scheduler_settings);
2277 SET_UP_STATE(state)
2278 state.SetNeedsRedraw(false);
2279 state.SetNeedsBeginMainFrameForTest(true);
2280 EXPECT_FALSE(state.RedrawPending());
2281 EXPECT_TRUE(state.NeedsCommit());
2282
2283 // OnBeginImplFrame() updates the sequence number, WillSendBeginMainFrame()
2284 // updates begin_main_frame_sent sequence number.
2285 state.OnBeginImplFrame(0, 10);
2286 EXPECT_ACTION_UPDATE_STATE(
2287 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
2288 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
2289 EXPECT_FALSE(state.NeedsCommit());
2290 EXPECT_TRUE(state.CommitPending());
2291 EXPECT_SEQUENCE_NUMBERS(10u, 10u, BeginFrameArgs::kInvalidFrameNumber,
2292 BeginFrameArgs::kInvalidFrameNumber,
2293 BeginFrameArgs::kInvalidFrameNumber);
2294
2295 // When a BeginMainFrame is needed, OnBeginImplFrameDeadline() updates no
2296 // freshness numbers.
2297 state.OnBeginImplFrameDeadline();
2298 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
2299 EXPECT_SEQUENCE_NUMBERS(10u, 10u, BeginFrameArgs::kInvalidFrameNumber,
2300 BeginFrameArgs::kInvalidFrameNumber,
2301 BeginFrameArgs::kInvalidFrameNumber);
2302 state.OnBeginImplFrameIdle();
2303 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
2304
2305 // When a main frame is in progress, OnBeginImplFrameDeadline() updates no
2306 // freshness numbers.
2307 state.NotifyBeginMainFrameStarted();
2308 state.OnBeginImplFrame(0, 11);
2309 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
2310 state.OnBeginImplFrameDeadline();
2311 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
2312 EXPECT_SEQUENCE_NUMBERS(11u, 10u, BeginFrameArgs::kInvalidFrameNumber,
2313 BeginFrameArgs::kInvalidFrameNumber,
2314 BeginFrameArgs::kInvalidFrameNumber);
2315 state.OnBeginImplFrameIdle();
2316 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
2317
2318 // Pending tree freshness is updated when the new pending tree is committed.
2319 state.NotifyReadyToCommit();
2320 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
2321 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
2322 EXPECT_FALSE(state.CommitPending());
2323 EXPECT_TRUE(state.has_pending_tree());
2324 EXPECT_SEQUENCE_NUMBERS(11u, 10u, 10u, BeginFrameArgs::kInvalidFrameNumber,
2325 BeginFrameArgs::kInvalidFrameNumber);
2326
2327 // If no further BeginMainFrame is needed, OnBeginFrameImplDeadline()
2328 // updates the pending tree's frame number.
2329 state.OnBeginImplFrame(0, 12);
2330 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
2331 EXPECT_SEQUENCE_NUMBERS(12u, 10u, 10u, BeginFrameArgs::kInvalidFrameNumber,
2332 BeginFrameArgs::kInvalidFrameNumber);
2333 state.OnBeginImplFrameDeadline();
2334 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
2335 EXPECT_SEQUENCE_NUMBERS(12u, 10u, 12u, BeginFrameArgs::kInvalidFrameNumber,
2336 BeginFrameArgs::kInvalidFrameNumber);
2337 state.OnBeginImplFrameIdle();
2338 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
2339
2340 // If a further BeginMainFrame is needed, OnBeginFrameImplDeadline()
2341 // updates no freshness numbers.
2342 state.SetNeedsBeginMainFrameForTest(true);
2343 EXPECT_TRUE(state.NeedsCommit());
2344 state.OnBeginImplFrame(0, 13);
2345 // BMF will be sent only after pending_tree activation.
2346 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
2347 state.OnBeginImplFrameDeadline();
2348 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
2349 EXPECT_SEQUENCE_NUMBERS(13u, 10u, 12u, BeginFrameArgs::kInvalidFrameNumber,
2350 BeginFrameArgs::kInvalidFrameNumber);
2351 state.OnBeginImplFrameIdle();
2352 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
2353
2354 // Active tree freshness is updated when pending frame is activated.
2355 state.NotifyReadyToActivate();
2356 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE);
2357 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
2358 EXPECT_FALSE(state.has_pending_tree());
2359 EXPECT_SEQUENCE_NUMBERS(13u, 10u, 12u, 12u,
2360 BeginFrameArgs::kInvalidFrameNumber);
2361 EXPECT_TRUE(state.RedrawPending());
2362
2363 // BMF requested above will be sent after activation.
2364 state.OnBeginImplFrame(0, 14);
2365 EXPECT_ACTION_UPDATE_STATE(
2366 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
2367 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
2368
2369 // Active tree freshness is updated when commit didn't have updates, but
2370 // compositor frame freshness is not updated.
2371 state.NotifyBeginMainFrameStarted();
2372 state.BeginMainFrameAborted(CommitEarlyOutReason::FINISHED_NO_UPDATES);
2373 EXPECT_SEQUENCE_NUMBERS(14u, 14u, 12u, 14u,
2374 BeginFrameArgs::kInvalidFrameNumber);
2375
2376 // Compositor frame freshness is updated when active tree is drawn.
2377 state.OnBeginImplFrameDeadline();
2378 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
2379 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
2380 EXPECT_FALSE(state.RedrawPending());
2381 state.DidSubmitCompositorFrame();
2382 state.DidReceiveCompositorFrameAck();
2383 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
2384 EXPECT_SEQUENCE_NUMBERS(14u, 14u, 12u, 14u, 14u);
2385 state.OnBeginImplFrameIdle();
2386 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
2387
2388 // When no updates are required, OnBeginImplFrameDeadline() updates active
2389 // tree and compositor frame freshness.
2390 state.OnBeginImplFrame(0, 15);
2391 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
2392 state.OnBeginImplFrameDeadline();
2393 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
2394 EXPECT_SEQUENCE_NUMBERS(15u, 14u, 12u, 15u, 15u);
2395 state.OnBeginImplFrameIdle();
2396 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
2397
2398 // Active tree and compositor frame freshness are updated when commit doesn't
2399 // have updates and compositor frame was fresh before.
2400 state.SetNeedsBeginMainFrameForTest(true);
2401 EXPECT_TRUE(state.NeedsCommit());
2402 state.OnBeginImplFrame(0, 16);
2403 EXPECT_ACTION_UPDATE_STATE(
2404 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
2405 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
2406 EXPECT_FALSE(state.NeedsCommit());
2407 EXPECT_TRUE(state.CommitPending());
2408 state.NotifyBeginMainFrameStarted();
2409 state.BeginMainFrameAborted(CommitEarlyOutReason::FINISHED_NO_UPDATES);
2410 EXPECT_SEQUENCE_NUMBERS(16u, 16u, 12u, 16u, 16u);
2411 state.OnBeginImplFrameDeadline();
2412 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
2413 EXPECT_SEQUENCE_NUMBERS(16u, 16u, 12u, 16u, 16u);
2414 state.OnBeginImplFrameIdle();
2415 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
2416
2417 // When the source changes, the current frame number is updated and frame
2418 // numbers for freshness are reset to invalid numbers.
2419 state.OnBeginImplFrame(1, 5);
2420 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
2421 EXPECT_SEQUENCE_NUMBERS(5u, BeginFrameArgs::kInvalidFrameNumber,
2422 BeginFrameArgs::kInvalidFrameNumber,
2423 BeginFrameArgs::kInvalidFrameNumber,
2424 BeginFrameArgs::kInvalidFrameNumber);
2425
2426 // When no updates are required, OnBeginImplFrameDeadline() updates active
2427 // tree and compositor frame freshness.
2428 state.OnBeginImplFrameDeadline();
2429 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
2430 EXPECT_SEQUENCE_NUMBERS(5u, BeginFrameArgs::kInvalidFrameNumber,
2431 BeginFrameArgs::kInvalidFrameNumber, 5u, 5u);
2432 state.OnBeginImplFrameIdle();
2433 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
2434 }
2435
2436 TEST(SchedulerStateMachineTest,
2437 TestBeginFrameFreshnessWithNoUpdatesCommitAndPendingTree) {
2438 // Setup with main_frame_before_activation_enabled, a pending tree, and a
2439 // new BeginMainFrame requested.
2440 SchedulerSettings settings;
2441 settings.main_frame_before_activation_enabled = true;
2442 StateMachine state(settings);
2443 SET_UP_STATE(state)
2444 state.SetHasPendingTree(true);
2445 state.SetNeedsRedraw(false);
2446 state.SetNeedsBeginMainFrameForTest(true);
2447 EXPECT_FALSE(state.RedrawPending());
2448 EXPECT_TRUE(state.NeedsCommit());
2449
2450 // OnBeginImplFrame() updates the sequence number, WillSendBeginMainFrame()
2451 // updates begin_main_frame_sent sequence number.
2452 state.OnBeginImplFrame(0, 10);
2453 EXPECT_ACTION_UPDATE_STATE(
2454 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
2455 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
2456 EXPECT_FALSE(state.NeedsCommit());
2457 EXPECT_TRUE(state.CommitPending());
2458 EXPECT_SEQUENCE_NUMBERS(10u, 10u, BeginFrameArgs::kInvalidFrameNumber,
2459 BeginFrameArgs::kInvalidFrameNumber,
2460 BeginFrameArgs::kInvalidFrameNumber);
2461
2462 // Pending tree freshness is updated when commit didn't have updates, but an
2463 // older pending tree is still pending.
2464 state.NotifyBeginMainFrameStarted();
2465 state.BeginMainFrameAborted(CommitEarlyOutReason::FINISHED_NO_UPDATES);
2466 EXPECT_SEQUENCE_NUMBERS(10u, 10u, 10u, BeginFrameArgs::kInvalidFrameNumber,
2467 BeginFrameArgs::kInvalidFrameNumber);
2468
2469 // As no further BeginMainFrame is needed, OnBeginFrameImplDeadline()
2470 // updates the pending tree's frame number, but without any visible change.
2471 state.OnBeginImplFrameDeadline();
2472 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
2473 EXPECT_SEQUENCE_NUMBERS(10u, 10u, 10u, BeginFrameArgs::kInvalidFrameNumber,
2474 BeginFrameArgs::kInvalidFrameNumber);
2475 state.OnBeginImplFrameIdle();
2476 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
2477 }
2478
2126 } // namespace 2479 } // namespace
2127 } // namespace cc 2480 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698