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

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

Issue 218633010: cc: Handle retroactive BeginFrames in the Scheduler. (Closed) Base URL: http://git.chromium.org/chromium/src.git@compositorVsyncDisable
Patch Set: rebase on pending patches Created 6 years, 8 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 "cc/scheduler/scheduler.h" 7 #include "cc/scheduler/scheduler.h"
8 #include "testing/gtest/include/gtest/gtest.h" 8 #include "testing/gtest/include/gtest/gtest.h"
9 9
10 #define EXPECT_ACTION_UPDATE_STATE(action) \ 10 #define EXPECT_ACTION_UPDATE_STATE(action) \
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
115 { 115 {
116 StateMachine state(default_scheduler_settings); 116 StateMachine state(default_scheduler_settings);
117 state.SetCanStart(); 117 state.SetCanStart();
118 EXPECT_ACTION_UPDATE_STATE( 118 EXPECT_ACTION_UPDATE_STATE(
119 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION) 119 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION)
120 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 120 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
121 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE); 121 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE);
122 state.SetNeedsRedraw(false); 122 state.SetNeedsRedraw(false);
123 state.SetVisible(true); 123 state.SetVisible(true);
124 124
125 EXPECT_FALSE(state.BeginImplFrameNeeded()); 125 EXPECT_FALSE(state.BeginFrameNeeded());
126 126
127 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 127 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
128 EXPECT_FALSE(state.BeginImplFrameNeeded()); 128 EXPECT_FALSE(state.BeginFrameNeeded());
129 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); 129 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting());
130 130
131 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 131 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
132 state.OnBeginImplFrameDeadline(); 132 state.OnBeginImplFrameDeadline();
133 } 133 }
134 134
135 // If commit requested but can_start is still false, do nothing. 135 // If commit requested but can_start is still false, do nothing.
136 { 136 {
137 StateMachine state(default_scheduler_settings); 137 StateMachine state(default_scheduler_settings);
138 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE); 138 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE);
139 state.SetNeedsRedraw(false); 139 state.SetNeedsRedraw(false);
140 state.SetVisible(true); 140 state.SetVisible(true);
141 state.SetNeedsCommit(); 141 state.SetNeedsCommit();
142 142
143 EXPECT_FALSE(state.BeginImplFrameNeeded()); 143 EXPECT_FALSE(state.BeginFrameNeeded());
144 144
145 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 145 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
146 EXPECT_FALSE(state.BeginImplFrameNeeded()); 146 EXPECT_FALSE(state.BeginFrameNeeded());
147 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); 147 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting());
148 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 148 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
149 state.OnBeginImplFrameDeadline(); 149 state.OnBeginImplFrameDeadline();
150 } 150 }
151 151
152 // If commit requested, begin a main frame. 152 // If commit requested, begin a main frame.
153 { 153 {
154 StateMachine state(default_scheduler_settings); 154 StateMachine state(default_scheduler_settings);
155 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE); 155 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE);
156 state.SetCanStart(); 156 state.SetCanStart();
157 state.UpdateState(state.NextAction()); 157 state.UpdateState(state.NextAction());
158 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 158 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
159 state.SetNeedsRedraw(false); 159 state.SetNeedsRedraw(false);
160 state.SetVisible(true); 160 state.SetVisible(true);
161 state.SetNeedsCommit(); 161 state.SetNeedsCommit();
162 162
163 EXPECT_TRUE(state.BeginImplFrameNeeded()); 163 EXPECT_TRUE(state.BeginFrameNeeded());
164 164
165 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); 165 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting());
166 EXPECT_ACTION_UPDATE_STATE( 166 EXPECT_ACTION_UPDATE_STATE(
167 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 167 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
168 } 168 }
169 169
170 // Begin the frame, make sure needs_commit and commit_state update correctly. 170 // Begin the frame, make sure needs_commit and commit_state update correctly.
171 { 171 {
172 StateMachine state(default_scheduler_settings); 172 StateMachine state(default_scheduler_settings);
173 state.SetCanStart(); 173 state.SetCanStart();
(...skipping 15 matching lines...) Expand all
189 StateMachine state(scheduler_settings); 189 StateMachine state(scheduler_settings);
190 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE); 190 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE);
191 state.SetCanStart(); 191 state.SetCanStart();
192 state.UpdateState(state.NextAction()); 192 state.UpdateState(state.NextAction());
193 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 193 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
194 state.SetNeedsRedraw(false); 194 state.SetNeedsRedraw(false);
195 state.SetVisible(true); 195 state.SetVisible(true);
196 state.SetCanDraw(true); 196 state.SetCanDraw(true);
197 state.SetNeedsCommit(); 197 state.SetNeedsCommit();
198 198
199 EXPECT_TRUE(state.BeginImplFrameNeeded()); 199 EXPECT_TRUE(state.BeginFrameNeeded());
200 200
201 // Commit to the pending tree. 201 // Commit to the pending tree.
202 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); 202 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting());
203 EXPECT_ACTION_UPDATE_STATE( 203 EXPECT_ACTION_UPDATE_STATE(
204 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 204 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
205 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 205 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
206 state.NotifyBeginMainFrameStarted(); 206 state.NotifyBeginMainFrameStarted();
207 state.NotifyReadyToCommit(); 207 state.NotifyReadyToCommit();
208 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 208 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
209 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 209 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
257 StateMachine state(scheduler_settings); 257 StateMachine state(scheduler_settings);
258 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE); 258 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE);
259 state.SetCanStart(); 259 state.SetCanStart();
260 state.UpdateState(state.NextAction()); 260 state.UpdateState(state.NextAction());
261 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 261 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
262 state.SetNeedsRedraw(false); 262 state.SetNeedsRedraw(false);
263 state.SetVisible(true); 263 state.SetVisible(true);
264 state.SetCanDraw(true); 264 state.SetCanDraw(true);
265 state.SetNeedsCommit(); 265 state.SetNeedsCommit();
266 266
267 EXPECT_TRUE(state.BeginImplFrameNeeded()); 267 EXPECT_TRUE(state.BeginFrameNeeded());
268 268
269 // Commit to the pending tree. 269 // Commit to the pending tree.
270 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); 270 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting());
271 EXPECT_ACTION_UPDATE_STATE( 271 EXPECT_ACTION_UPDATE_STATE(
272 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 272 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
273 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 273 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
274 274
275 state.NotifyBeginMainFrameStarted(); 275 state.NotifyBeginMainFrameStarted();
276 state.NotifyReadyToCommit(); 276 state.NotifyReadyToCommit();
277 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 277 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
314 TestFailedDrawForAnimationCheckerboardSetsNeedsCommitAndDoesNotDrawAgain) { 314 TestFailedDrawForAnimationCheckerboardSetsNeedsCommitAndDoesNotDrawAgain) {
315 SchedulerSettings default_scheduler_settings; 315 SchedulerSettings default_scheduler_settings;
316 StateMachine state(default_scheduler_settings); 316 StateMachine state(default_scheduler_settings);
317 state.SetCanStart(); 317 state.SetCanStart();
318 state.UpdateState(state.NextAction()); 318 state.UpdateState(state.NextAction());
319 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 319 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
320 state.SetVisible(true); 320 state.SetVisible(true);
321 state.SetCanDraw(true); 321 state.SetCanDraw(true);
322 state.SetNeedsRedraw(true); 322 state.SetNeedsRedraw(true);
323 EXPECT_TRUE(state.RedrawPending()); 323 EXPECT_TRUE(state.RedrawPending());
324 EXPECT_TRUE(state.BeginImplFrameNeeded()); 324 EXPECT_TRUE(state.BeginFrameNeeded());
325 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); 325 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting());
326 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 326 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
327 state.OnBeginImplFrameDeadline(); 327 state.OnBeginImplFrameDeadline();
328 328
329 // We're drawing now. 329 // We're drawing now.
330 EXPECT_ACTION_UPDATE_STATE( 330 EXPECT_ACTION_UPDATE_STATE(
331 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 331 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
332 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 332 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
333 333
334 EXPECT_FALSE(state.RedrawPending()); 334 EXPECT_FALSE(state.RedrawPending());
(...skipping 12 matching lines...) Expand all
347 TEST(SchedulerStateMachineTest, TestFailedDrawForMissingHighResNeedsCommit) { 347 TEST(SchedulerStateMachineTest, TestFailedDrawForMissingHighResNeedsCommit) {
348 SchedulerSettings default_scheduler_settings; 348 SchedulerSettings default_scheduler_settings;
349 StateMachine state(default_scheduler_settings); 349 StateMachine state(default_scheduler_settings);
350 state.SetCanStart(); 350 state.SetCanStart();
351 state.UpdateState(state.NextAction()); 351 state.UpdateState(state.NextAction());
352 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 352 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
353 state.SetVisible(true); 353 state.SetVisible(true);
354 state.SetCanDraw(true); 354 state.SetCanDraw(true);
355 state.SetNeedsRedraw(true); 355 state.SetNeedsRedraw(true);
356 EXPECT_TRUE(state.RedrawPending()); 356 EXPECT_TRUE(state.RedrawPending());
357 EXPECT_TRUE(state.BeginImplFrameNeeded()); 357 EXPECT_TRUE(state.BeginFrameNeeded());
358 358
359 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); 359 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting());
360 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 360 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
361 state.OnBeginImplFrameDeadline(); 361 state.OnBeginImplFrameDeadline();
362 EXPECT_ACTION_UPDATE_STATE( 362 EXPECT_ACTION_UPDATE_STATE(
363 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 363 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
364 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 364 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
365 EXPECT_FALSE(state.RedrawPending()); 365 EXPECT_FALSE(state.RedrawPending());
366 EXPECT_FALSE(state.CommitPending()); 366 EXPECT_FALSE(state.CommitPending());
367 367
(...skipping 12 matching lines...) Expand all
380 SchedulerSettings default_scheduler_settings; 380 SchedulerSettings default_scheduler_settings;
381 StateMachine state(default_scheduler_settings); 381 StateMachine state(default_scheduler_settings);
382 state.SetCanStart(); 382 state.SetCanStart();
383 state.UpdateState(state.NextAction()); 383 state.UpdateState(state.NextAction());
384 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 384 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
385 385
386 state.SetVisible(true); 386 state.SetVisible(true);
387 state.SetCanDraw(true); 387 state.SetCanDraw(true);
388 state.SetNeedsRedraw(true); 388 state.SetNeedsRedraw(true);
389 EXPECT_TRUE(state.RedrawPending()); 389 EXPECT_TRUE(state.RedrawPending());
390 EXPECT_TRUE(state.BeginImplFrameNeeded()); 390 EXPECT_TRUE(state.BeginFrameNeeded());
391 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); 391 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting());
392 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 392 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
393 state.OnBeginImplFrameDeadline(); 393 state.OnBeginImplFrameDeadline();
394 394
395 // We're drawing now. 395 // We're drawing now.
396 EXPECT_ACTION_UPDATE_STATE( 396 EXPECT_ACTION_UPDATE_STATE(
397 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 397 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
398 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 398 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
399 EXPECT_FALSE(state.RedrawPending()); 399 EXPECT_FALSE(state.RedrawPending());
400 EXPECT_FALSE(state.CommitPending()); 400 EXPECT_FALSE(state.CommitPending());
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
438 // Then initiate a draw. 438 // Then initiate a draw.
439 state.SetNeedsRedraw(true); 439 state.SetNeedsRedraw(true);
440 state.OnBeginImplFrameDeadline(); 440 state.OnBeginImplFrameDeadline();
441 EXPECT_ACTION_UPDATE_STATE( 441 EXPECT_ACTION_UPDATE_STATE(
442 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 442 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
443 443
444 // Fail the draw. 444 // Fail the draw.
445 state.DidDrawIfPossibleCompleted( 445 state.DidDrawIfPossibleCompleted(
446 DrawSwapReadbackResult::DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); 446 DrawSwapReadbackResult::DRAW_ABORTED_CHECKERBOARD_ANIMATIONS);
447 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 447 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
448 EXPECT_TRUE(state.BeginImplFrameNeeded()); 448 EXPECT_TRUE(state.BeginFrameNeeded());
449 EXPECT_TRUE(state.RedrawPending()); 449 EXPECT_TRUE(state.RedrawPending());
450 // But the commit is ongoing. 450 // But the commit is ongoing.
451 EXPECT_TRUE(state.CommitPending()); 451 EXPECT_TRUE(state.CommitPending());
452 452
453 // Finish the commit. Note, we should not yet be forcing a draw, but should 453 // Finish the commit. Note, we should not yet be forcing a draw, but should
454 // continue the commit as usual. 454 // continue the commit as usual.
455 state.NotifyBeginMainFrameStarted(); 455 state.NotifyBeginMainFrameStarted();
456 state.NotifyReadyToCommit(); 456 state.NotifyReadyToCommit();
457 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 457 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
458 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 458 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
512 EXPECT_ACTION_UPDATE_STATE( 512 EXPECT_ACTION_UPDATE_STATE(
513 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 513 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
514 514
515 // Fail the draw enough times to force a redraw, 515 // Fail the draw enough times to force a redraw,
516 // then once more for good measure. 516 // then once more for good measure.
517 for (int i = 0; i < draw_limit + 1; ++i) { 517 for (int i = 0; i < draw_limit + 1; ++i) {
518 state.DidDrawIfPossibleCompleted( 518 state.DidDrawIfPossibleCompleted(
519 DrawSwapReadbackResult::DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); 519 DrawSwapReadbackResult::DRAW_ABORTED_CHECKERBOARD_ANIMATIONS);
520 } 520 }
521 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 521 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
522 EXPECT_TRUE(state.BeginImplFrameNeeded()); 522 EXPECT_TRUE(state.BeginFrameNeeded());
523 EXPECT_TRUE(state.RedrawPending()); 523 EXPECT_TRUE(state.RedrawPending());
524 // But the commit is ongoing. 524 // But the commit is ongoing.
525 EXPECT_TRUE(state.CommitPending()); 525 EXPECT_TRUE(state.CommitPending());
526 EXPECT_TRUE(state.ForcedRedrawState() == 526 EXPECT_TRUE(state.ForcedRedrawState() ==
527 SchedulerStateMachine::FORCED_REDRAW_STATE_WAITING_FOR_COMMIT); 527 SchedulerStateMachine::FORCED_REDRAW_STATE_WAITING_FOR_COMMIT);
528 528
529 state.NotifyBeginMainFrameStarted(); 529 state.NotifyBeginMainFrameStarted();
530 state.NotifyReadyToCommit(); 530 state.NotifyReadyToCommit();
531 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 531 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
532 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 532 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
(...skipping 19 matching lines...) Expand all
552 SchedulerSettings default_scheduler_settings; 552 SchedulerSettings default_scheduler_settings;
553 StateMachine state(default_scheduler_settings); 553 StateMachine state(default_scheduler_settings);
554 state.SetCanStart(); 554 state.SetCanStart();
555 state.UpdateState(state.NextAction()); 555 state.UpdateState(state.NextAction());
556 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 556 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
557 state.SetVisible(true); 557 state.SetVisible(true);
558 state.SetCanDraw(true); 558 state.SetCanDraw(true);
559 559
560 // Start a draw. 560 // Start a draw.
561 state.SetNeedsRedraw(true); 561 state.SetNeedsRedraw(true);
562 EXPECT_TRUE(state.BeginImplFrameNeeded()); 562 EXPECT_TRUE(state.BeginFrameNeeded());
563 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); 563 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting());
564 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 564 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
565 state.OnBeginImplFrameDeadline(); 565 state.OnBeginImplFrameDeadline();
566 EXPECT_TRUE(state.RedrawPending()); 566 EXPECT_TRUE(state.RedrawPending());
567 EXPECT_ACTION_UPDATE_STATE( 567 EXPECT_ACTION_UPDATE_STATE(
568 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 568 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
569 569
570 // Failing the draw for animation checkerboards makes us require a commit. 570 // Failing the draw for animation checkerboards makes us require a commit.
571 state.DidDrawIfPossibleCompleted( 571 state.DidDrawIfPossibleCompleted(
572 DrawSwapReadbackResult::DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); 572 DrawSwapReadbackResult::DRAW_ABORTED_CHECKERBOARD_ANIMATIONS);
573 EXPECT_ACTION_UPDATE_STATE( 573 EXPECT_ACTION_UPDATE_STATE(
574 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 574 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
575 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 575 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
576 EXPECT_TRUE(state.RedrawPending()); 576 EXPECT_TRUE(state.RedrawPending());
577 577
578 // We should not be trying to draw again now, but we have a commit pending. 578 // We should not be trying to draw again now, but we have a commit pending.
579 EXPECT_TRUE(state.BeginImplFrameNeeded()); 579 EXPECT_TRUE(state.BeginFrameNeeded());
580 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); 580 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting());
581 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 581 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
582 582
583 // We should try to draw again at the end of the next BeginImplFrame on 583 // We should try to draw again at the end of the next BeginImplFrame on
584 // the impl thread. 584 // the impl thread.
585 state.OnBeginImplFrameDeadline(); 585 state.OnBeginImplFrameDeadline();
586 EXPECT_ACTION_UPDATE_STATE( 586 EXPECT_ACTION_UPDATE_STATE(
587 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 587 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
588 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 588 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
589 } 589 }
590 590
591 TEST(SchedulerStateMachineTest, TestDoestDrawTwiceInSameFrame) { 591 TEST(SchedulerStateMachineTest, TestDoestDrawTwiceInSameFrame) {
592 SchedulerSettings default_scheduler_settings; 592 SchedulerSettings default_scheduler_settings;
593 StateMachine state(default_scheduler_settings); 593 StateMachine state(default_scheduler_settings);
594 state.SetCanStart(); 594 state.SetCanStart();
595 state.UpdateState(state.NextAction()); 595 state.UpdateState(state.NextAction());
596 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 596 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
597 state.SetVisible(true); 597 state.SetVisible(true);
598 state.SetCanDraw(true); 598 state.SetCanDraw(true);
599 state.SetNeedsRedraw(true); 599 state.SetNeedsRedraw(true);
600 600
601 // Draw the first frame. 601 // Draw the first frame.
602 EXPECT_TRUE(state.BeginImplFrameNeeded()); 602 EXPECT_TRUE(state.BeginFrameNeeded());
603 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); 603 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting());
604 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 604 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
605 605
606 state.OnBeginImplFrameDeadline(); 606 state.OnBeginImplFrameDeadline();
607 EXPECT_ACTION_UPDATE_STATE( 607 EXPECT_ACTION_UPDATE_STATE(
608 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 608 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
609 state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DRAW_SUCCESS); 609 state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DRAW_SUCCESS);
610 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 610 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
611 611
612 // Before the next BeginImplFrame, set needs redraw again. 612 // Before the next BeginImplFrame, set needs redraw again.
613 // This should not redraw until the next BeginImplFrame. 613 // This should not redraw until the next BeginImplFrame.
614 state.SetNeedsRedraw(true); 614 state.SetNeedsRedraw(true);
615 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 615 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
616 616
617 // Move to another frame. This should now draw. 617 // Move to another frame. This should now draw.
618 EXPECT_TRUE(state.BeginImplFrameNeeded()); 618 EXPECT_TRUE(state.BeginFrameNeeded());
619 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); 619 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting());
620 620
621 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 621 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
622 622
623 state.OnBeginImplFrameDeadline(); 623 state.OnBeginImplFrameDeadline();
624 EXPECT_ACTION_UPDATE_STATE( 624 EXPECT_ACTION_UPDATE_STATE(
625 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 625 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
626 state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DRAW_SUCCESS); 626 state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DRAW_SUCCESS);
627 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 627 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
628 628
629 // We just swapped, so we should proactively request another BeginImplFrame. 629 // We just swapped, so we should proactively request another BeginImplFrame.
630 EXPECT_TRUE(state.BeginImplFrameNeeded()); 630 EXPECT_TRUE(state.BeginFrameNeeded());
631 } 631 }
632 632
633 TEST(SchedulerStateMachineTest, TestNextActionDrawsOnBeginImplFrame) { 633 TEST(SchedulerStateMachineTest, TestNextActionDrawsOnBeginImplFrame) {
634 SchedulerSettings default_scheduler_settings; 634 SchedulerSettings default_scheduler_settings;
635 635
636 // When not in BeginImplFrame deadline, or in BeginImplFrame deadline 636 // When not in BeginImplFrame deadline, or in BeginImplFrame deadline
637 // but not visible, don't draw. 637 // but not visible, don't draw.
638 size_t num_commit_states = 638 size_t num_commit_states =
639 sizeof(all_commit_states) / sizeof(SchedulerStateMachine::CommitState); 639 sizeof(all_commit_states) / sizeof(SchedulerStateMachine::CommitState);
640 size_t num_begin_impl_frame_states = 640 size_t num_begin_impl_frame_states =
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
693 expected_action = SchedulerStateMachine::ACTION_DRAW_AND_READBACK; 693 expected_action = SchedulerStateMachine::ACTION_DRAW_AND_READBACK;
694 } else if (all_commit_states[i] == 694 } else if (all_commit_states[i] ==
695 SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT) { 695 SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT) {
696 expected_action = SchedulerStateMachine::ACTION_COMMIT; 696 expected_action = SchedulerStateMachine::ACTION_COMMIT;
697 } else { 697 } else {
698 expected_action = 698 expected_action =
699 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE; 699 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE;
700 } 700 }
701 701
702 // Case 1: needs_commit=false. 702 // Case 1: needs_commit=false.
703 EXPECT_NE(state.BeginImplFrameNeeded(), request_readback) 703 EXPECT_NE(state.BeginFrameNeeded(), request_readback) << *state.AsValue();
704 << *state.AsValue();
705 EXPECT_EQ(state.NextAction(), expected_action) << *state.AsValue(); 704 EXPECT_EQ(state.NextAction(), expected_action) << *state.AsValue();
706 705
707 // Case 2: needs_commit=true. 706 // Case 2: needs_commit=true.
708 state.SetNeedsCommit(); 707 state.SetNeedsCommit();
709 EXPECT_NE(state.BeginImplFrameNeeded(), request_readback) 708 EXPECT_NE(state.BeginFrameNeeded(), request_readback) << *state.AsValue();
710 << *state.AsValue();
711 EXPECT_EQ(state.NextAction(), expected_action) << *state.AsValue(); 709 EXPECT_EQ(state.NextAction(), expected_action) << *state.AsValue();
712 } 710 }
713 } 711 }
714 } 712 }
715 713
716 TEST(SchedulerStateMachineTest, TestNoCommitStatesRedrawWhenInvisible) { 714 TEST(SchedulerStateMachineTest, TestNoCommitStatesRedrawWhenInvisible) {
717 SchedulerSettings default_scheduler_settings; 715 SchedulerSettings default_scheduler_settings;
718 716
719 size_t num_commit_states = 717 size_t num_commit_states =
720 sizeof(all_commit_states) / sizeof(SchedulerStateMachine::CommitState); 718 sizeof(all_commit_states) / sizeof(SchedulerStateMachine::CommitState);
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
802 scheduler_settings.main_frame_before_draw_enabled = 800 scheduler_settings.main_frame_before_draw_enabled =
803 main_frame_before_draw_enabled; 801 main_frame_before_draw_enabled;
804 StateMachine state(scheduler_settings); 802 StateMachine state(scheduler_settings);
805 state.SetCanStart(); 803 state.SetCanStart();
806 state.UpdateState(state.NextAction()); 804 state.UpdateState(state.NextAction());
807 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 805 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
808 state.SetNeedsCommit(); 806 state.SetNeedsCommit();
809 state.SetVisible(true); 807 state.SetVisible(true);
810 state.SetCanDraw(true); 808 state.SetCanDraw(true);
811 809
812 EXPECT_TRUE(state.BeginImplFrameNeeded()); 810 EXPECT_TRUE(state.BeginFrameNeeded());
813 811
814 // Begin the frame. 812 // Begin the frame.
815 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); 813 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting());
816 EXPECT_ACTION_UPDATE_STATE( 814 EXPECT_ACTION_UPDATE_STATE(
817 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 815 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
818 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT, 816 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT,
819 state.CommitState()); 817 state.CommitState());
820 818
821 // Now, while the frame is in progress, set another commit. 819 // Now, while the frame is in progress, set another commit.
822 state.SetNeedsCommit(); 820 state.SetNeedsCommit();
(...skipping 1077 matching lines...) Expand 10 before | Expand all | Expand 10 after
1900 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1898 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1901 1899
1902 // The deadline is not triggered early until we enter prefer smoothness mode. 1900 // The deadline is not triggered early until we enter prefer smoothness mode.
1903 EXPECT_FALSE(state.ShouldTriggerBeginImplFrameDeadlineEarly()); 1901 EXPECT_FALSE(state.ShouldTriggerBeginImplFrameDeadlineEarly());
1904 state.SetSmoothnessTakesPriority(true); 1902 state.SetSmoothnessTakesPriority(true);
1905 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineEarly()); 1903 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineEarly());
1906 } 1904 }
1907 1905
1908 } // namespace 1906 } // namespace
1909 } // namespace cc 1907 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698