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

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

Issue 131683005: cc: Make PrepareToDraw return an enum for why it aborts (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 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 | Annotate | Revision Log
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 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
166 state.UpdateState(state.NextAction()); 166 state.UpdateState(state.NextAction());
167 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 167 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
168 state.SetVisible(true); 168 state.SetVisible(true);
169 state.UpdateState(SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 169 state.UpdateState(SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
170 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS, 170 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS,
171 state.CommitState()); 171 state.CommitState());
172 EXPECT_FALSE(state.NeedsCommit()); 172 EXPECT_FALSE(state.NeedsCommit());
173 } 173 }
174 } 174 }
175 175
176 TEST(SchedulerStateMachineTest, 176 TEST(SchedulerStateMachineTest, TestFailedDrawSetsRedrawAndCommitFlags) {
177 TestFailedDrawSetsNeedsCommitAndDoesNotDrawAgain) {
178 SchedulerSettings default_scheduler_settings; 177 SchedulerSettings default_scheduler_settings;
179 StateMachine state(default_scheduler_settings); 178 StateMachine state(default_scheduler_settings);
180 state.SetCanStart(); 179 state.SetCanStart();
181 state.UpdateState(state.NextAction()); 180 state.UpdateState(state.NextAction());
182 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 181 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
183 state.SetVisible(true); 182 state.SetVisible(true);
184 state.SetCanDraw(true); 183 state.SetCanDraw(true);
185 state.SetNeedsRedraw(true); 184 state.SetNeedsRedraw(true);
186 EXPECT_TRUE(state.RedrawPending()); 185 EXPECT_TRUE(state.RedrawPending());
187 EXPECT_TRUE(state.BeginImplFrameNeeded()); 186 EXPECT_TRUE(state.BeginImplFrameNeeded());
188 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting());
189 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
190 state.OnBeginImplFrameDeadline();
191 187
192 // We're drawing now. 188 DrawSwapReadbackResult::DrawResult aborts[] = {
brianderson 2014/01/29 01:31:22 Thanks for testing all the new abort results.
193 EXPECT_ACTION_UPDATE_STATE( 189 DrawSwapReadbackResult::DRAW_ABORTED_CANT_DRAW,
194 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 190 DrawSwapReadbackResult::DRAW_ABORTED_NO_TREE,
195 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 191 DrawSwapReadbackResult::DRAW_ABORTED_NO_RENDERER,
192 DrawSwapReadbackResult::DRAW_ABORTED_CHECKERBOARD_ANIMATIONS, };
196 193
197 EXPECT_FALSE(state.RedrawPending()); 194 for (size_t i = 0; i < arraysize(aborts); ++i) {
198 EXPECT_FALSE(state.CommitPending()); 195 state.SetNeedsRedraw(true);
196 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting());
197 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
198 state.OnBeginImplFrameDeadline();
199 199
200 // Failing the draw makes us require a commit. 200 EXPECT_ACTION_UPDATE_STATE(
201 state.DidDrawIfPossibleCompleted(false); 201 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
202 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); 202 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
203 EXPECT_ACTION_UPDATE_STATE( 203 EXPECT_FALSE(state.RedrawPending());
204 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 204 EXPECT_FALSE(state.CommitPending());
205 EXPECT_TRUE(state.RedrawPending()); 205
206 EXPECT_TRUE(state.CommitPending()); 206 state.DidDrawIfPossibleCompleted(aborts[i]);
207
208 if (aborts[i] ==
209 DrawSwapReadbackResult::DRAW_ABORTED_CHECKERBOARD_ANIMATIONS) {
210 // Failing the draw for checkerboarding causes a commit/redraw.
211 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting());
212 EXPECT_ACTION_UPDATE_STATE(
213 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
214 EXPECT_TRUE(state.RedrawPending());
215 EXPECT_TRUE(state.CommitPending());
216 } else {
217 // Failing the draw for most reasons does not require a commit or a
218 // redraw.
219 EXPECT_FALSE(state.RedrawPending());
220 EXPECT_FALSE(state.CommitPending());
221 }
222 }
207 } 223 }
208 224
209 TEST(SchedulerStateMachineTest, 225 TEST(SchedulerStateMachineTest,
210 TestsetNeedsRedrawDuringFailedDrawDoesNotRemoveNeedsRedraw) { 226 TestsetNeedsRedrawDuringFailedDrawDoesNotRemoveNeedsRedraw) {
211 SchedulerSettings default_scheduler_settings; 227 SchedulerSettings default_scheduler_settings;
212 StateMachine state(default_scheduler_settings); 228 StateMachine state(default_scheduler_settings);
213 state.SetCanStart(); 229 state.SetCanStart();
214 state.UpdateState(state.NextAction()); 230 state.UpdateState(state.NextAction());
215 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 231 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
216 232
(...skipping 11 matching lines...) Expand all
228 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 244 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
229 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 245 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
230 EXPECT_FALSE(state.RedrawPending()); 246 EXPECT_FALSE(state.RedrawPending());
231 EXPECT_FALSE(state.CommitPending()); 247 EXPECT_FALSE(state.CommitPending());
232 248
233 // While still in the same BeginMainFrame callback on the main thread, 249 // While still in the same BeginMainFrame callback on the main thread,
234 // set needs redraw again. This should not redraw. 250 // set needs redraw again. This should not redraw.
235 state.SetNeedsRedraw(true); 251 state.SetNeedsRedraw(true);
236 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 252 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
237 253
238 // Failing the draw makes us require a commit. 254 // Failing the draw for animation checkerboards makes us require a commit.
239 state.DidDrawIfPossibleCompleted(false); 255 state.DidDrawIfPossibleCompleted(
256 DrawSwapReadbackResult::DRAW_ABORTED_CHECKERBOARD_ANIMATIONS);
240 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); 257 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting());
241 EXPECT_ACTION_UPDATE_STATE( 258 EXPECT_ACTION_UPDATE_STATE(
242 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 259 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
243 EXPECT_TRUE(state.RedrawPending()); 260 EXPECT_TRUE(state.RedrawPending());
244 } 261 }
245 262
246 void TestFailedDrawsWillEventuallyForceADrawAfterTheNextCommit( 263 void TestFailedDrawsWillEventuallyForceADrawAfterTheNextCommit(
247 bool deadline_scheduling_enabled) { 264 bool deadline_scheduling_enabled) {
248 SchedulerSettings scheduler_settings; 265 SchedulerSettings scheduler_settings;
249 scheduler_settings.maximum_number_of_failed_draws_before_draw_is_forced_ = 1; 266 scheduler_settings.maximum_number_of_failed_draws_before_draw_is_forced_ = 1;
(...skipping 20 matching lines...) Expand all
270 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 287 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
271 EXPECT_TRUE(state.CommitPending()); 288 EXPECT_TRUE(state.CommitPending());
272 289
273 // Then initiate a draw. 290 // Then initiate a draw.
274 state.SetNeedsRedraw(true); 291 state.SetNeedsRedraw(true);
275 state.OnBeginImplFrameDeadline(); 292 state.OnBeginImplFrameDeadline();
276 EXPECT_ACTION_UPDATE_STATE( 293 EXPECT_ACTION_UPDATE_STATE(
277 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 294 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
278 295
279 // Fail the draw. 296 // Fail the draw.
280 state.DidDrawIfPossibleCompleted(false); 297 state.DidDrawIfPossibleCompleted(
298 DrawSwapReadbackResult::DRAW_ABORTED_CHECKERBOARD_ANIMATIONS);
281 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 299 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
282 EXPECT_TRUE(state.BeginImplFrameNeeded()); 300 EXPECT_TRUE(state.BeginImplFrameNeeded());
283 EXPECT_TRUE(state.RedrawPending()); 301 EXPECT_TRUE(state.RedrawPending());
284 // But the commit is ongoing. 302 // But the commit is ongoing.
285 EXPECT_TRUE(state.CommitPending()); 303 EXPECT_TRUE(state.CommitPending());
286 304
287 // Finish the commit. Note, we should not yet be forcing a draw, but should 305 // Finish the commit. Note, we should not yet be forcing a draw, but should
288 // continue the commit as usual. 306 // continue the commit as usual.
289 state.FinishCommit(); 307 state.FinishCommit();
290 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 308 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
(...skipping 18 matching lines...) Expand all
309 TEST(SchedulerStateMachineTest, 327 TEST(SchedulerStateMachineTest,
310 TestFailedDrawsWillEventuallyForceADrawAfterTheNextCommit_Deadline) { 328 TestFailedDrawsWillEventuallyForceADrawAfterTheNextCommit_Deadline) {
311 bool deadline_scheduling_enabled = true; 329 bool deadline_scheduling_enabled = true;
312 TestFailedDrawsWillEventuallyForceADrawAfterTheNextCommit( 330 TestFailedDrawsWillEventuallyForceADrawAfterTheNextCommit(
313 deadline_scheduling_enabled); 331 deadline_scheduling_enabled);
314 } 332 }
315 333
316 void TestFailedDrawsDoNotRestartForcedDraw( 334 void TestFailedDrawsDoNotRestartForcedDraw(
317 bool deadline_scheduling_enabled) { 335 bool deadline_scheduling_enabled) {
318 SchedulerSettings scheduler_settings; 336 SchedulerSettings scheduler_settings;
319 int drawLimit = 1; 337 int draw_limit = 1;
320 scheduler_settings.maximum_number_of_failed_draws_before_draw_is_forced_ = 338 scheduler_settings.maximum_number_of_failed_draws_before_draw_is_forced_ =
321 drawLimit; 339 draw_limit;
322 scheduler_settings.deadline_scheduling_enabled = deadline_scheduling_enabled; 340 scheduler_settings.deadline_scheduling_enabled = deadline_scheduling_enabled;
323 scheduler_settings.impl_side_painting = true; 341 scheduler_settings.impl_side_painting = true;
324 StateMachine state(scheduler_settings); 342 StateMachine state(scheduler_settings);
325 state.SetCanStart(); 343 state.SetCanStart();
326 state.UpdateState(state.NextAction()); 344 state.UpdateState(state.NextAction());
327 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 345 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
328 state.SetVisible(true); 346 state.SetVisible(true);
329 state.SetCanDraw(true); 347 state.SetCanDraw(true);
330 348
331 // Start a commit. 349 // Start a commit.
(...skipping 12 matching lines...) Expand all
344 EXPECT_TRUE(state.CommitPending()); 362 EXPECT_TRUE(state.CommitPending());
345 363
346 // Then initiate a draw. 364 // Then initiate a draw.
347 state.SetNeedsRedraw(true); 365 state.SetNeedsRedraw(true);
348 state.OnBeginImplFrameDeadline(); 366 state.OnBeginImplFrameDeadline();
349 EXPECT_ACTION_UPDATE_STATE( 367 EXPECT_ACTION_UPDATE_STATE(
350 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 368 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
351 369
352 // Fail the draw enough times to force a redraw, 370 // Fail the draw enough times to force a redraw,
353 // then once more for good measure. 371 // then once more for good measure.
354 for (int i = 0; i < drawLimit; ++i) 372 for (int i = 0; i < draw_limit + 1; ++i) {
355 state.DidDrawIfPossibleCompleted(false); 373 state.DidDrawIfPossibleCompleted(
356 state.DidDrawIfPossibleCompleted(false); 374 DrawSwapReadbackResult::DRAW_ABORTED_CHECKERBOARD_ANIMATIONS);
375 }
357 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 376 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
358 EXPECT_TRUE(state.BeginImplFrameNeeded()); 377 EXPECT_TRUE(state.BeginImplFrameNeeded());
359 EXPECT_TRUE(state.RedrawPending()); 378 EXPECT_TRUE(state.RedrawPending());
360 // But the commit is ongoing. 379 // But the commit is ongoing.
361 EXPECT_TRUE(state.CommitPending()); 380 EXPECT_TRUE(state.CommitPending());
362 EXPECT_TRUE(state.ForcedRedrawState() == 381 EXPECT_TRUE(state.ForcedRedrawState() ==
363 SchedulerStateMachine::FORCED_REDRAW_STATE_WAITING_FOR_COMMIT); 382 SchedulerStateMachine::FORCED_REDRAW_STATE_WAITING_FOR_COMMIT);
364 383
365 state.FinishCommit(); 384 state.FinishCommit();
366 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 385 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
367 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 386 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
368 EXPECT_TRUE(state.RedrawPending()); 387 EXPECT_TRUE(state.RedrawPending());
369 EXPECT_FALSE(state.CommitPending()); 388 EXPECT_FALSE(state.CommitPending());
370 389
371 // Now force redraw should be in waiting for activation 390 // Now force redraw should be in waiting for activation
372 EXPECT_TRUE(state.ForcedRedrawState() == 391 EXPECT_TRUE(state.ForcedRedrawState() ==
373 SchedulerStateMachine::FORCED_REDRAW_STATE_WAITING_FOR_ACTIVATION); 392 SchedulerStateMachine::FORCED_REDRAW_STATE_WAITING_FOR_ACTIVATION);
374 393
375 // After failing additional draws, we should still be in a forced 394 // After failing additional draws, we should still be in a forced
376 // redraw, but not back in WAITING_FOR_COMMIT. 395 // redraw, but not back in WAITING_FOR_COMMIT.
377 for (int i = 0; i < drawLimit; ++i) 396 for (int i = 0; i < draw_limit + 1; ++i) {
378 state.DidDrawIfPossibleCompleted(false); 397 state.DidDrawIfPossibleCompleted(
379 state.DidDrawIfPossibleCompleted(false); 398 DrawSwapReadbackResult::DRAW_ABORTED_CHECKERBOARD_ANIMATIONS);
399 }
380 EXPECT_TRUE(state.RedrawPending()); 400 EXPECT_TRUE(state.RedrawPending());
381 EXPECT_TRUE(state.ForcedRedrawState() == 401 EXPECT_TRUE(state.ForcedRedrawState() ==
382 SchedulerStateMachine::FORCED_REDRAW_STATE_WAITING_FOR_ACTIVATION); 402 SchedulerStateMachine::FORCED_REDRAW_STATE_WAITING_FOR_ACTIVATION);
383 } 403 }
384 404
385 TEST(SchedulerStateMachineTest, 405 TEST(SchedulerStateMachineTest,
386 TestFailedDrawsDoNotRestartForcedDraw) { 406 TestFailedDrawsDoNotRestartForcedDraw) {
387 bool deadline_scheduling_enabled = false; 407 bool deadline_scheduling_enabled = false;
388 TestFailedDrawsDoNotRestartForcedDraw( 408 TestFailedDrawsDoNotRestartForcedDraw(
389 deadline_scheduling_enabled); 409 deadline_scheduling_enabled);
(...skipping 18 matching lines...) Expand all
408 // Start a draw. 428 // Start a draw.
409 state.SetNeedsRedraw(true); 429 state.SetNeedsRedraw(true);
410 EXPECT_TRUE(state.BeginImplFrameNeeded()); 430 EXPECT_TRUE(state.BeginImplFrameNeeded());
411 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); 431 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting());
412 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 432 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
413 state.OnBeginImplFrameDeadline(); 433 state.OnBeginImplFrameDeadline();
414 EXPECT_TRUE(state.RedrawPending()); 434 EXPECT_TRUE(state.RedrawPending());
415 EXPECT_ACTION_UPDATE_STATE( 435 EXPECT_ACTION_UPDATE_STATE(
416 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 436 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
417 437
418 // Fail the draw 438 // Failing the draw for animation checkerboards makes us require a commit.
419 state.DidDrawIfPossibleCompleted(false); 439 state.DidDrawIfPossibleCompleted(
440 DrawSwapReadbackResult::DRAW_ABORTED_CHECKERBOARD_ANIMATIONS);
420 EXPECT_ACTION_UPDATE_STATE( 441 EXPECT_ACTION_UPDATE_STATE(
421 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 442 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
422 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 443 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
423 EXPECT_TRUE(state.RedrawPending()); 444 EXPECT_TRUE(state.RedrawPending());
424 445
425 // We should not be trying to draw again now, but we have a commit pending. 446 // We should not be trying to draw again now, but we have a commit pending.
426 EXPECT_TRUE(state.BeginImplFrameNeeded()); 447 EXPECT_TRUE(state.BeginImplFrameNeeded());
427 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); 448 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting());
428 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 449 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
429 450
(...skipping 16 matching lines...) Expand all
446 state.SetNeedsRedraw(true); 467 state.SetNeedsRedraw(true);
447 468
448 // Draw the first frame. 469 // Draw the first frame.
449 EXPECT_TRUE(state.BeginImplFrameNeeded()); 470 EXPECT_TRUE(state.BeginImplFrameNeeded());
450 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); 471 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting());
451 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 472 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
452 473
453 state.OnBeginImplFrameDeadline(); 474 state.OnBeginImplFrameDeadline();
454 EXPECT_ACTION_UPDATE_STATE( 475 EXPECT_ACTION_UPDATE_STATE(
455 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 476 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
456 state.DidDrawIfPossibleCompleted(true); 477 state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DID_DRAW);
457 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 478 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
458 479
459 // Before the next BeginImplFrame, set needs redraw again. 480 // Before the next BeginImplFrame, set needs redraw again.
460 // This should not redraw until the next BeginImplFrame. 481 // This should not redraw until the next BeginImplFrame.
461 state.SetNeedsRedraw(true); 482 state.SetNeedsRedraw(true);
462 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 483 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
463 484
464 // Move to another frame. This should now draw. 485 // Move to another frame. This should now draw.
465 EXPECT_TRUE(state.BeginImplFrameNeeded()); 486 EXPECT_TRUE(state.BeginImplFrameNeeded());
466 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); 487 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting());
467 488
468 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 489 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
469 490
470 state.OnBeginImplFrameDeadline(); 491 state.OnBeginImplFrameDeadline();
471 EXPECT_ACTION_UPDATE_STATE( 492 EXPECT_ACTION_UPDATE_STATE(
472 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 493 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
473 state.DidDrawIfPossibleCompleted(true); 494 state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DID_DRAW);
474 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 495 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
475 496
476 // We just swapped, so we should proactively request another BeginImplFrame. 497 // We just swapped, so we should proactively request another BeginImplFrame.
477 EXPECT_TRUE(state.BeginImplFrameNeeded()); 498 EXPECT_TRUE(state.BeginImplFrameNeeded());
478 } 499 }
479 500
480 TEST(SchedulerStateMachineTest, TestNextActionDrawsOnBeginImplFrame) { 501 TEST(SchedulerStateMachineTest, TestNextActionDrawsOnBeginImplFrame) {
481 SchedulerSettings default_scheduler_settings; 502 SchedulerSettings default_scheduler_settings;
482 503
483 // When not in BeginImplFrame deadline, or in BeginImplFrame deadline 504 // When not in BeginImplFrame deadline, or in BeginImplFrame deadline
(...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after
708 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction()); 729 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction());
709 730
710 // Commit and make sure we draw on next BeginImplFrame 731 // Commit and make sure we draw on next BeginImplFrame
711 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 732 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
712 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 733 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
713 state.OnBeginImplFrameDeadline(); 734 state.OnBeginImplFrameDeadline();
714 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW, 735 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW,
715 state.CommitState()); 736 state.CommitState());
716 EXPECT_ACTION_UPDATE_STATE( 737 EXPECT_ACTION_UPDATE_STATE(
717 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 738 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
718 state.DidDrawIfPossibleCompleted(true); 739 state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DID_DRAW);
719 740
720 // Verify that another commit will start immediately after draw. 741 // Verify that another commit will start immediately after draw.
721 EXPECT_ACTION_UPDATE_STATE( 742 EXPECT_ACTION_UPDATE_STATE(
722 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 743 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
723 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 744 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
724 } 745 }
725 746
726 TEST(SchedulerStateMachineTest, TestFullCycle) { 747 TEST(SchedulerStateMachineTest, TestFullCycle) {
727 SchedulerSettings default_scheduler_settings; 748 SchedulerSettings default_scheduler_settings;
728 StateMachine state(default_scheduler_settings); 749 StateMachine state(default_scheduler_settings);
(...skipping 26 matching lines...) Expand all
755 state.CommitState()); 776 state.CommitState());
756 EXPECT_TRUE(state.needs_redraw()); 777 EXPECT_TRUE(state.needs_redraw());
757 778
758 // Expect to do nothing until BeginImplFrame deadline 779 // Expect to do nothing until BeginImplFrame deadline
759 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 780 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
760 781
761 // At BeginImplFrame deadline, draw. 782 // At BeginImplFrame deadline, draw.
762 state.OnBeginImplFrameDeadline(); 783 state.OnBeginImplFrameDeadline();
763 EXPECT_ACTION_UPDATE_STATE( 784 EXPECT_ACTION_UPDATE_STATE(
764 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 785 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
765 state.DidDrawIfPossibleCompleted(true); 786 state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DID_DRAW);
766 787
767 // Should be synchronized, no draw needed, no action needed. 788 // Should be synchronized, no draw needed, no action needed.
768 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 789 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
769 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); 790 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState());
770 EXPECT_FALSE(state.needs_redraw()); 791 EXPECT_FALSE(state.needs_redraw());
771 } 792 }
772 793
773 TEST(SchedulerStateMachineTest, TestFullCycleWithCommitRequestInbetween) { 794 TEST(SchedulerStateMachineTest, TestFullCycleWithCommitRequestInbetween) {
774 SchedulerSettings default_scheduler_settings; 795 SchedulerSettings default_scheduler_settings;
775 StateMachine state(default_scheduler_settings); 796 StateMachine state(default_scheduler_settings);
(...skipping 30 matching lines...) Expand all
806 state.CommitState()); 827 state.CommitState());
807 EXPECT_TRUE(state.needs_redraw()); 828 EXPECT_TRUE(state.needs_redraw());
808 829
809 // Expect to do nothing until BeginImplFrame deadline. 830 // Expect to do nothing until BeginImplFrame deadline.
810 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 831 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
811 832
812 // At BeginImplFrame deadline, draw. 833 // At BeginImplFrame deadline, draw.
813 state.OnBeginImplFrameDeadline(); 834 state.OnBeginImplFrameDeadline();
814 EXPECT_ACTION_UPDATE_STATE( 835 EXPECT_ACTION_UPDATE_STATE(
815 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 836 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
816 state.DidDrawIfPossibleCompleted(true); 837 state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DID_DRAW);
817 838
818 // Should be synchronized, no draw needed, no action needed. 839 // Should be synchronized, no draw needed, no action needed.
819 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 840 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
820 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); 841 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState());
821 EXPECT_FALSE(state.needs_redraw()); 842 EXPECT_FALSE(state.needs_redraw());
822 843
823 // Next BeginImplFrame should initiate second commit. 844 // Next BeginImplFrame should initiate second commit.
824 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); 845 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting());
825 EXPECT_ACTION_UPDATE_STATE( 846 EXPECT_ACTION_UPDATE_STATE(
826 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 847 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
(...skipping 615 matching lines...) Expand 10 before | Expand all | Expand 10 after
1442 state.FinishCommit(); 1463 state.FinishCommit();
1443 1464
1444 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT, 1465 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT,
1445 state.CommitState()); 1466 state.CommitState());
1446 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 1467 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
1447 1468
1448 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW, 1469 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW,
1449 state.CommitState()); 1470 state.CommitState());
1450 1471
1451 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_READBACK); 1472 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_READBACK);
1452 state.DidDrawIfPossibleCompleted(true); 1473 state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DID_DRAW);
1453 1474
1454 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1475 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1455 1476
1456 // Should be waiting for the normal BeginMainFrame. 1477 // Should be waiting for the normal BeginMainFrame.
1457 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS, 1478 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS,
1458 state.CommitState()); 1479 state.CommitState());
1459 } 1480 }
1460 1481
1461 void TestImmediateFinishCommitDuringCommit(bool deadline_scheduling_enabled) { 1482 void TestImmediateFinishCommitDuringCommit(bool deadline_scheduling_enabled) {
1462 SchedulerSettings scheduler_settings; 1483 SchedulerSettings scheduler_settings;
(...skipping 22 matching lines...) Expand all
1485 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1506 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1486 state.FinishCommit(); 1507 state.FinishCommit();
1487 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT, 1508 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT,
1488 state.CommitState()); 1509 state.CommitState());
1489 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 1510 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
1490 1511
1491 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW, 1512 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW,
1492 state.CommitState()); 1513 state.CommitState());
1493 1514
1494 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_READBACK); 1515 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_READBACK);
1495 state.DidDrawIfPossibleCompleted(true); 1516 state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DID_DRAW);
1496 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1517 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1497 1518
1498 // Should be waiting for the normal BeginMainFrame. 1519 // Should be waiting for the normal BeginMainFrame.
1499 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS, 1520 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS,
1500 state.CommitState()) 1521 state.CommitState())
1501 << *state.AsValue(); 1522 << *state.AsValue();
1502 } 1523 }
1503 1524
1504 TEST(SchedulerStateMachineTest, TestImmediateFinishCommitDuringCommit) { 1525 TEST(SchedulerStateMachineTest, TestImmediateFinishCommitDuringCommit) {
1505 bool deadline_scheduling_enabled = false; 1526 bool deadline_scheduling_enabled = false;
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
1539 state.FinishCommit(); 1560 state.FinishCommit();
1540 1561
1541 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT, 1562 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT,
1542 state.CommitState()); 1563 state.CommitState());
1543 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 1564 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
1544 1565
1545 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW, 1566 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW,
1546 state.CommitState()); 1567 state.CommitState());
1547 1568
1548 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_READBACK); 1569 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_READBACK);
1549 state.DidDrawIfPossibleCompleted(true); 1570 state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DID_DRAW);
1550 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1571 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1551 1572
1552 // Should be waiting for BeginMainFrame. 1573 // Should be waiting for BeginMainFrame.
1553 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS, 1574 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS,
1554 state.CommitState()) 1575 state.CommitState())
1555 << *state.AsValue(); 1576 << *state.AsValue();
1556 1577
1557 // Become invisible and abort BeginMainFrame. 1578 // Become invisible and abort BeginMainFrame.
1558 state.SetVisible(false); 1579 state.SetVisible(false);
1559 state.BeginMainFrameAborted(false); 1580 state.BeginMainFrameAborted(false);
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
1595 state.FinishCommit(); 1616 state.FinishCommit();
1596 1617
1597 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT, 1618 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT,
1598 state.CommitState()); 1619 state.CommitState());
1599 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 1620 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
1600 1621
1601 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW, 1622 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW,
1602 state.CommitState()); 1623 state.CommitState());
1603 1624
1604 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_READBACK); 1625 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_READBACK);
1605 state.DidDrawIfPossibleCompleted(true); 1626 state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DID_DRAW);
1606 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1627 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1607 } 1628 }
1608 1629
1609 TEST(SchedulerStateMachineTest, ReportIfNotDrawing) { 1630 TEST(SchedulerStateMachineTest, ReportIfNotDrawing) {
1610 SchedulerSettings default_scheduler_settings; 1631 SchedulerSettings default_scheduler_settings;
1611 StateMachine state(default_scheduler_settings); 1632 StateMachine state(default_scheduler_settings);
1612 state.SetCanStart(); 1633 state.SetCanStart();
1613 state.UpdateState(state.NextAction()); 1634 state.UpdateState(state.NextAction());
1614 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 1635 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
1615 1636
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
1756 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1777 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1757 1778
1758 // The deadline is not triggered early until we enter prefer smoothness mode. 1779 // The deadline is not triggered early until we enter prefer smoothness mode.
1759 EXPECT_FALSE(state.ShouldTriggerBeginImplFrameDeadlineEarly()); 1780 EXPECT_FALSE(state.ShouldTriggerBeginImplFrameDeadlineEarly());
1760 state.SetSmoothnessTakesPriority(true); 1781 state.SetSmoothnessTakesPriority(true);
1761 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineEarly()); 1782 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineEarly());
1762 } 1783 }
1763 1784
1764 } // namespace 1785 } // namespace
1765 } // namespace cc 1786 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698