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

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

Issue 2527283003: cc: Introduce BeginFrame sequence numbers and acknowledgements.
Patch Set: Address Brian's comments. Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « cc/scheduler/scheduler_state_machine.cc ('k') | cc/scheduler/scheduler_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2011 The Chromium Authors. All rights reserved. 1 // Copyright 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 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/scheduler/scheduler.h" 10 #include "cc/scheduler/scheduler.h"
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after
196 case SchedulerStateMachine::ACTION_PREPARE_TILES: 196 case SchedulerStateMachine::ACTION_PREPARE_TILES:
197 sm->WillPrepareTiles(); 197 sm->WillPrepareTiles();
198 return; 198 return;
199 199
200 case SchedulerStateMachine::ACTION_INVALIDATE_COMPOSITOR_FRAME_SINK: 200 case SchedulerStateMachine::ACTION_INVALIDATE_COMPOSITOR_FRAME_SINK:
201 sm->WillInvalidateCompositorFrameSink(); 201 sm->WillInvalidateCompositorFrameSink();
202 return; 202 return;
203 } 203 }
204 } 204 }
205 205
206 // TODO(eseckler): Add tests for frame numbers /
207 // last_frame_number_compositor_frame_was_fresh_.
208
206 TEST(SchedulerStateMachineTest, BeginFrameNeeded) { 209 TEST(SchedulerStateMachineTest, BeginFrameNeeded) {
207 SchedulerSettings default_scheduler_settings; 210 SchedulerSettings default_scheduler_settings;
208 StateMachine state(default_scheduler_settings); 211 StateMachine state(default_scheduler_settings);
209 state.SetVisible(true); 212 state.SetVisible(true);
210 EXPECT_ACTION_UPDATE_STATE( 213 EXPECT_ACTION_UPDATE_STATE(
211 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION); 214 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION);
212 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 215 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
213 state.CreateAndInitializeCompositorFrameSinkWithActivatedCommit(); 216 state.CreateAndInitializeCompositorFrameSinkWithActivatedCommit();
214 state.SetBeginMainFrameState( 217 state.SetBeginMainFrameState(
215 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE); 218 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE);
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
264 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION); 267 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION);
265 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 268 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
266 state.CreateAndInitializeCompositorFrameSinkWithActivatedCommit(); 269 state.CreateAndInitializeCompositorFrameSinkWithActivatedCommit();
267 state.SetBeginMainFrameState( 270 state.SetBeginMainFrameState(
268 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE); 271 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE);
269 state.SetNeedsRedraw(false); 272 state.SetNeedsRedraw(false);
270 273
271 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 274 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
272 EXPECT_FALSE(state.NeedsCommit()); 275 EXPECT_FALSE(state.NeedsCommit());
273 276
274 state.OnBeginImplFrame(); 277 state.OnBeginImplFrame(0, 1);
275 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 278 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
276 279
277 state.OnBeginImplFrameDeadline(); 280 state.OnBeginImplFrameDeadline();
278 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 281 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
279 EXPECT_FALSE(state.NeedsCommit()); 282 EXPECT_FALSE(state.NeedsCommit());
280 } 283 }
281 284
282 // If commit requested but not visible yet, do nothing. 285 // If commit requested but not visible yet, do nothing.
283 { 286 {
284 StateMachine state(default_scheduler_settings); 287 StateMachine state(default_scheduler_settings);
285 state.SetBeginMainFrameState( 288 state.SetBeginMainFrameState(
286 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE); 289 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE);
287 state.SetNeedsRedraw(false); 290 state.SetNeedsRedraw(false);
288 state.SetNeedsBeginMainFrame(); 291 state.SetNeedsBeginMainFrame();
289 292
290 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 293 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
291 EXPECT_TRUE(state.NeedsCommit()); 294 EXPECT_TRUE(state.NeedsCommit());
292 295
293 state.OnBeginImplFrame(); 296 state.OnBeginImplFrame(0, 2);
294 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 297 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
295 298
296 state.OnBeginImplFrameDeadline(); 299 state.OnBeginImplFrameDeadline();
297 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 300 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
298 EXPECT_TRUE(state.NeedsCommit()); 301 EXPECT_TRUE(state.NeedsCommit());
299 } 302 }
300 303
301 // If commit requested, begin a main frame. 304 // If commit requested, begin a main frame.
302 { 305 {
303 StateMachine state(default_scheduler_settings); 306 StateMachine state(default_scheduler_settings);
304 state.SetBeginMainFrameState( 307 state.SetBeginMainFrameState(
305 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE); 308 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE);
306 state.SetVisible(true); 309 state.SetVisible(true);
307 EXPECT_ACTION_UPDATE_STATE( 310 EXPECT_ACTION_UPDATE_STATE(
308 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION); 311 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION);
309 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 312 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
310 state.CreateAndInitializeCompositorFrameSinkWithActivatedCommit(); 313 state.CreateAndInitializeCompositorFrameSinkWithActivatedCommit();
311 state.SetNeedsRedraw(false); 314 state.SetNeedsRedraw(false);
312 state.SetNeedsBeginMainFrame(); 315 state.SetNeedsBeginMainFrame();
313 316
314 // Expect nothing to happen until after OnBeginImplFrame. 317 // Expect nothing to happen until after OnBeginImplFrame.
315 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 318 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
316 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE); 319 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE);
317 EXPECT_IMPL_FRAME_STATE(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE); 320 EXPECT_IMPL_FRAME_STATE(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE);
318 EXPECT_TRUE(state.NeedsCommit()); 321 EXPECT_TRUE(state.NeedsCommit());
319 EXPECT_TRUE(state.BeginFrameNeeded()); 322 EXPECT_TRUE(state.BeginFrameNeeded());
320 323
321 state.OnBeginImplFrame(); 324 state.OnBeginImplFrame(0, 3);
322 EXPECT_ACTION_UPDATE_STATE( 325 EXPECT_ACTION_UPDATE_STATE(
323 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 326 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
324 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_SENT); 327 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_SENT);
325 EXPECT_FALSE(state.NeedsCommit()); 328 EXPECT_FALSE(state.NeedsCommit());
326 } 329 }
327 330
328 // If commit requested and can't draw, still begin a main frame. 331 // If commit requested and can't draw, still begin a main frame.
329 { 332 {
330 StateMachine state(default_scheduler_settings); 333 StateMachine state(default_scheduler_settings);
331 state.SetBeginMainFrameState( 334 state.SetBeginMainFrameState(
332 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE); 335 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE);
333 state.SetVisible(true); 336 state.SetVisible(true);
334 EXPECT_ACTION_UPDATE_STATE( 337 EXPECT_ACTION_UPDATE_STATE(
335 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION); 338 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION);
336 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 339 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
337 state.CreateAndInitializeCompositorFrameSinkWithActivatedCommit(); 340 state.CreateAndInitializeCompositorFrameSinkWithActivatedCommit();
338 state.SetNeedsRedraw(false); 341 state.SetNeedsRedraw(false);
339 state.SetNeedsBeginMainFrame(); 342 state.SetNeedsBeginMainFrame();
340 state.SetCanDraw(false); 343 state.SetCanDraw(false);
341 344
342 // Expect nothing to happen until after OnBeginImplFrame. 345 // Expect nothing to happen until after OnBeginImplFrame.
343 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 346 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
344 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE); 347 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE);
345 EXPECT_IMPL_FRAME_STATE(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE); 348 EXPECT_IMPL_FRAME_STATE(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE);
346 EXPECT_TRUE(state.BeginFrameNeeded()); 349 EXPECT_TRUE(state.BeginFrameNeeded());
347 350
348 state.OnBeginImplFrame(); 351 state.OnBeginImplFrame(0, 4);
349 EXPECT_ACTION_UPDATE_STATE( 352 EXPECT_ACTION_UPDATE_STATE(
350 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 353 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
351 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_SENT); 354 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_SENT);
352 EXPECT_FALSE(state.NeedsCommit()); 355 EXPECT_FALSE(state.NeedsCommit());
353 } 356 }
354 } 357 }
355 358
356 // Explicitly test main_frame_before_activation_enabled = true 359 // Explicitly test main_frame_before_activation_enabled = true
357 TEST(SchedulerStateMachineTest, MainFrameBeforeActivationEnabled) { 360 TEST(SchedulerStateMachineTest, MainFrameBeforeActivationEnabled) {
358 SchedulerSettings scheduler_settings; 361 SchedulerSettings scheduler_settings;
359 scheduler_settings.main_frame_before_activation_enabled = true; 362 scheduler_settings.main_frame_before_activation_enabled = true;
360 StateMachine state(scheduler_settings); 363 StateMachine state(scheduler_settings);
361 state.SetBeginMainFrameState( 364 state.SetBeginMainFrameState(
362 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE); 365 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE);
363 SET_UP_STATE(state) 366 SET_UP_STATE(state)
364 state.SetNeedsRedraw(false); 367 state.SetNeedsRedraw(false);
365 state.SetNeedsBeginMainFrame(); 368 state.SetNeedsBeginMainFrame();
366 369
367 EXPECT_TRUE(state.BeginFrameNeeded()); 370 EXPECT_TRUE(state.BeginFrameNeeded());
368 371
369 // Commit to the pending tree. 372 // Commit to the pending tree.
370 state.OnBeginImplFrame(); 373 state.OnBeginImplFrame(0, 1);
371 EXPECT_ACTION_UPDATE_STATE( 374 EXPECT_ACTION_UPDATE_STATE(
372 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 375 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
373 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 376 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
374 377
375 state.NotifyBeginMainFrameStarted(); 378 state.NotifyBeginMainFrameStarted();
376 state.NotifyReadyToCommit(); 379 state.NotifyReadyToCommit();
377 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 380 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
378 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 381 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
379 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE); 382 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE);
380 383
381 state.OnBeginImplFrameDeadline(); 384 state.OnBeginImplFrameDeadline();
382 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 385 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
383 386
384 // Verify that the next commit starts while there is still a pending tree. 387 // Verify that the next commit starts while there is still a pending tree.
385 state.SetNeedsBeginMainFrame(); 388 state.SetNeedsBeginMainFrame();
386 state.OnBeginImplFrame(); 389 state.OnBeginImplFrame(0, 2);
387 EXPECT_ACTION_UPDATE_STATE( 390 EXPECT_ACTION_UPDATE_STATE(
388 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 391 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
389 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 392 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
390 393
391 // Verify the pending commit doesn't overwrite the pending 394 // Verify the pending commit doesn't overwrite the pending
392 // tree until the pending tree has been activated. 395 // tree until the pending tree has been activated.
393 state.NotifyBeginMainFrameStarted(); 396 state.NotifyBeginMainFrameStarted();
394 state.NotifyReadyToCommit(); 397 state.NotifyReadyToCommit();
395 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 398 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
396 399
(...skipping 16 matching lines...) Expand all
413 TEST(SchedulerStateMachineTest, 416 TEST(SchedulerStateMachineTest,
414 FailedDrawForAnimationCheckerboardSetsNeedsCommitAndRetriesDraw) { 417 FailedDrawForAnimationCheckerboardSetsNeedsCommitAndRetriesDraw) {
415 SchedulerSettings default_scheduler_settings; 418 SchedulerSettings default_scheduler_settings;
416 StateMachine state(default_scheduler_settings); 419 StateMachine state(default_scheduler_settings);
417 SET_UP_STATE(state) 420 SET_UP_STATE(state)
418 state.SetNeedsRedraw(true); 421 state.SetNeedsRedraw(true);
419 EXPECT_TRUE(state.RedrawPending()); 422 EXPECT_TRUE(state.RedrawPending());
420 EXPECT_TRUE(state.BeginFrameNeeded()); 423 EXPECT_TRUE(state.BeginFrameNeeded());
421 424
422 // Start a frame. 425 // Start a frame.
423 state.OnBeginImplFrame(); 426 state.OnBeginImplFrame(0, 1);
424 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 427 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
425 EXPECT_FALSE(state.CommitPending()); 428 EXPECT_FALSE(state.CommitPending());
426 429
427 // Failing a draw triggers request for a new BeginMainFrame. 430 // Failing a draw triggers request for a new BeginMainFrame.
428 state.OnBeginImplFrameDeadline(); 431 state.OnBeginImplFrameDeadline();
429 state.SetDrawResultForTest(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); 432 state.SetDrawResultForTest(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS);
430 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); 433 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
431 EXPECT_ACTION_UPDATE_STATE( 434 EXPECT_ACTION_UPDATE_STATE(
432 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 435 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
433 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 436 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
434 state.OnBeginImplFrameIdle(); 437 state.OnBeginImplFrameIdle();
435 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 438 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
436 439
437 // It's okay to attempt more draws just in case additional raster 440 // It's okay to attempt more draws just in case additional raster
438 // finishes and the requested commit wasn't actually necessary. 441 // finishes and the requested commit wasn't actually necessary.
439 EXPECT_TRUE(state.CommitPending()); 442 EXPECT_TRUE(state.CommitPending());
440 EXPECT_TRUE(state.RedrawPending()); 443 EXPECT_TRUE(state.RedrawPending());
441 state.OnBeginImplFrame(); 444 state.OnBeginImplFrame(0, 2);
442 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 445 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
443 state.OnBeginImplFrameDeadline(); 446 state.OnBeginImplFrameDeadline();
444 state.SetDrawResultForTest(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); 447 state.SetDrawResultForTest(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS);
445 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); 448 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
446 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 449 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
447 state.OnBeginImplFrameIdle(); 450 state.OnBeginImplFrameIdle();
448 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 451 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
449 } 452 }
450 453
451 TEST(SchedulerStateMachineTest, FailedDrawForMissingHighResNeedsCommit) { 454 TEST(SchedulerStateMachineTest, FailedDrawForMissingHighResNeedsCommit) {
452 SchedulerSettings default_scheduler_settings; 455 SchedulerSettings default_scheduler_settings;
453 StateMachine state(default_scheduler_settings); 456 StateMachine state(default_scheduler_settings);
454 SET_UP_STATE(state) 457 SET_UP_STATE(state)
455 state.SetNeedsRedraw(true); 458 state.SetNeedsRedraw(true);
456 EXPECT_TRUE(state.RedrawPending()); 459 EXPECT_TRUE(state.RedrawPending());
457 EXPECT_TRUE(state.BeginFrameNeeded()); 460 EXPECT_TRUE(state.BeginFrameNeeded());
458 461
459 // Start a frame. 462 // Start a frame.
460 state.OnBeginImplFrame(); 463 state.OnBeginImplFrame(0, 1);
461 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 464 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
462 EXPECT_FALSE(state.CommitPending()); 465 EXPECT_FALSE(state.CommitPending());
463 466
464 // Failing a draw triggers because of high res tiles missing 467 // Failing a draw triggers because of high res tiles missing
465 // request for a new BeginMainFrame. 468 // request for a new BeginMainFrame.
466 state.OnBeginImplFrameDeadline(); 469 state.OnBeginImplFrameDeadline();
467 state.SetDrawResultForTest(DRAW_ABORTED_MISSING_HIGH_RES_CONTENT); 470 state.SetDrawResultForTest(DRAW_ABORTED_MISSING_HIGH_RES_CONTENT);
468 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); 471 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
469 EXPECT_ACTION_UPDATE_STATE( 472 EXPECT_ACTION_UPDATE_STATE(
470 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 473 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
471 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 474 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
472 state.OnBeginImplFrameIdle(); 475 state.OnBeginImplFrameIdle();
473 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 476 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
474 477
475 // It doesn't request a draw until we get a new commit though. 478 // It doesn't request a draw until we get a new commit though.
476 EXPECT_TRUE(state.CommitPending()); 479 EXPECT_TRUE(state.CommitPending());
477 EXPECT_FALSE(state.RedrawPending()); 480 EXPECT_FALSE(state.RedrawPending());
478 state.OnBeginImplFrame(); 481 state.OnBeginImplFrame(0, 2);
479 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 482 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
480 state.OnBeginImplFrameDeadline(); 483 state.OnBeginImplFrameDeadline();
481 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 484 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
482 state.OnBeginImplFrameIdle(); 485 state.OnBeginImplFrameIdle();
483 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 486 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
484 487
485 // Finish the commit and activation. 488 // Finish the commit and activation.
486 state.NotifyBeginMainFrameStarted(); 489 state.NotifyBeginMainFrameStarted();
487 state.NotifyReadyToCommit(); 490 state.NotifyReadyToCommit();
488 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 491 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
489 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 492 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
490 state.NotifyReadyToActivate(); 493 state.NotifyReadyToActivate();
491 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); 494 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE);
492 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 495 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
493 EXPECT_TRUE(state.RedrawPending()); 496 EXPECT_TRUE(state.RedrawPending());
494 497
495 // Verify we draw with the new frame. 498 // Verify we draw with the new frame.
496 state.OnBeginImplFrame(); 499 state.OnBeginImplFrame(0, 3);
497 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 500 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
498 state.OnBeginImplFrameDeadline(); 501 state.OnBeginImplFrameDeadline();
499 state.SetDrawResultForTest(DRAW_SUCCESS); 502 state.SetDrawResultForTest(DRAW_SUCCESS);
500 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); 503 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
501 state.DidSubmitCompositorFrame(); 504 state.DidSubmitCompositorFrame();
502 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 505 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
503 state.OnBeginImplFrameIdle(); 506 state.OnBeginImplFrameIdle();
504 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 507 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
505 } 508 }
506 509
507 TEST(SchedulerStateMachineTest, 510 TEST(SchedulerStateMachineTest,
508 TestFailedDrawsEventuallyForceDrawAfterNextCommit) { 511 TestFailedDrawsEventuallyForceDrawAfterNextCommit) {
509 SchedulerSettings scheduler_settings; 512 SchedulerSettings scheduler_settings;
510 scheduler_settings.maximum_number_of_failed_draws_before_draw_is_forced = 1; 513 scheduler_settings.maximum_number_of_failed_draws_before_draw_is_forced = 1;
511 StateMachine state(scheduler_settings); 514 StateMachine state(scheduler_settings);
512 SET_UP_STATE(state) 515 SET_UP_STATE(state)
513 516
514 // Start a commit. 517 // Start a commit.
515 state.SetNeedsBeginMainFrame(); 518 state.SetNeedsBeginMainFrame();
516 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 519 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
517 state.OnBeginImplFrame(); 520 state.OnBeginImplFrame(0, 1);
518 EXPECT_ACTION_UPDATE_STATE( 521 EXPECT_ACTION_UPDATE_STATE(
519 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 522 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
520 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 523 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
521 EXPECT_TRUE(state.CommitPending()); 524 EXPECT_TRUE(state.CommitPending());
522 525
523 // Then initiate a draw that fails. 526 // Then initiate a draw that fails.
524 state.SetNeedsRedraw(true); 527 state.SetNeedsRedraw(true);
525 state.OnBeginImplFrameDeadline(); 528 state.OnBeginImplFrameDeadline();
526 state.SetDrawResultForTest(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); 529 state.SetDrawResultForTest(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS);
527 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); 530 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
(...skipping 10 matching lines...) Expand all
538 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 541 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
539 EXPECT_TRUE(state.RedrawPending()); 542 EXPECT_TRUE(state.RedrawPending());
540 543
541 // Activate so we're ready for a new main frame. 544 // Activate so we're ready for a new main frame.
542 state.NotifyReadyToActivate(); 545 state.NotifyReadyToActivate();
543 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); 546 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE);
544 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 547 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
545 EXPECT_TRUE(state.RedrawPending()); 548 EXPECT_TRUE(state.RedrawPending());
546 549
547 // The redraw should be forced at the end of the next BeginImplFrame. 550 // The redraw should be forced at the end of the next BeginImplFrame.
548 state.OnBeginImplFrame(); 551 state.OnBeginImplFrame(0, 2);
549 EXPECT_ACTION_UPDATE_STATE( 552 EXPECT_ACTION_UPDATE_STATE(
550 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 553 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
551 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 554 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
552 state.OnBeginImplFrameDeadline(); 555 state.OnBeginImplFrameDeadline();
553 state.SetDrawResultForTest(DRAW_SUCCESS); 556 state.SetDrawResultForTest(DRAW_SUCCESS);
554 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_FORCED); 557 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_FORCED);
555 state.DidSubmitCompositorFrame(); 558 state.DidSubmitCompositorFrame();
556 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 559 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
557 state.DidReceiveCompositorFrameAck(); 560 state.DidReceiveCompositorFrameAck();
558 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 561 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
559 } 562 }
560 563
561 TEST(SchedulerStateMachineTest, TestFailedDrawsDoNotRestartForcedDraw) { 564 TEST(SchedulerStateMachineTest, TestFailedDrawsDoNotRestartForcedDraw) {
562 SchedulerSettings scheduler_settings; 565 SchedulerSettings scheduler_settings;
563 int draw_limit = 2; 566 int draw_limit = 2;
564 scheduler_settings.maximum_number_of_failed_draws_before_draw_is_forced = 567 scheduler_settings.maximum_number_of_failed_draws_before_draw_is_forced =
565 draw_limit; 568 draw_limit;
566 StateMachine state(scheduler_settings); 569 StateMachine state(scheduler_settings);
567 SET_UP_STATE(state) 570 SET_UP_STATE(state)
568 571
569 // Start a commit. 572 // Start a commit.
570 state.SetNeedsBeginMainFrame(); 573 state.SetNeedsBeginMainFrame();
571 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 574 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
572 state.OnBeginImplFrame(); 575 state.OnBeginImplFrame(0, 1);
573 EXPECT_ACTION_UPDATE_STATE( 576 EXPECT_ACTION_UPDATE_STATE(
574 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 577 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
575 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 578 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
576 EXPECT_TRUE(state.CommitPending()); 579 EXPECT_TRUE(state.CommitPending());
577 580
578 // Then initiate a draw. 581 // Then initiate a draw.
579 state.SetNeedsRedraw(true); 582 state.SetNeedsRedraw(true);
580 state.OnBeginImplFrameDeadline(); 583 state.OnBeginImplFrameDeadline();
581 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); 584 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
582 585
583 // Fail the draw enough times to force a redraw. 586 // Fail the draw enough times to force a redraw.
584 for (int i = 0; i < draw_limit; ++i) { 587 for (int i = 0; i < draw_limit; ++i) {
585 state.SetNeedsRedraw(true); 588 state.SetNeedsRedraw(true);
586 state.OnBeginImplFrame(); 589 state.OnBeginImplFrame(0, i + 2);
587 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 590 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
588 state.OnBeginImplFrameDeadline(); 591 state.OnBeginImplFrameDeadline();
589 state.SetDrawResultForTest(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); 592 state.SetDrawResultForTest(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS);
590 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); 593 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
591 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 594 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
592 state.OnBeginImplFrameIdle(); 595 state.OnBeginImplFrameIdle();
593 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 596 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
594 } 597 }
595 598
596 EXPECT_TRUE(state.BeginFrameNeeded()); 599 EXPECT_TRUE(state.BeginFrameNeeded());
597 EXPECT_TRUE(state.RedrawPending()); 600 EXPECT_TRUE(state.RedrawPending());
598 // But the commit is ongoing. 601 // But the commit is ongoing.
599 EXPECT_TRUE(state.CommitPending()); 602 EXPECT_TRUE(state.CommitPending());
600 EXPECT_TRUE(state.ForcedRedrawState() == 603 EXPECT_TRUE(state.ForcedRedrawState() ==
601 SchedulerStateMachine::FORCED_REDRAW_STATE_WAITING_FOR_COMMIT); 604 SchedulerStateMachine::FORCED_REDRAW_STATE_WAITING_FOR_COMMIT);
602 605
603 // After failing additional draws, we should still be in a forced 606 // After failing additional draws, we should still be in a forced
604 // redraw, but not back in IDLE. 607 // redraw, but not back in IDLE.
605 for (int i = 0; i < draw_limit; ++i) { 608 for (int i = 0; i < draw_limit; ++i) {
606 state.SetNeedsRedraw(true); 609 state.SetNeedsRedraw(true);
607 state.OnBeginImplFrame(); 610 state.OnBeginImplFrame(0, draw_limit + i + 2);
608 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 611 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
609 state.OnBeginImplFrameDeadline(); 612 state.OnBeginImplFrameDeadline();
610 state.SetDrawResultForTest(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); 613 state.SetDrawResultForTest(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS);
611 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); 614 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
612 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 615 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
613 state.OnBeginImplFrameIdle(); 616 state.OnBeginImplFrameIdle();
614 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 617 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
615 } 618 }
616 EXPECT_TRUE(state.RedrawPending()); 619 EXPECT_TRUE(state.RedrawPending());
617 EXPECT_TRUE(state.ForcedRedrawState() == 620 EXPECT_TRUE(state.ForcedRedrawState() ==
618 SchedulerStateMachine::FORCED_REDRAW_STATE_WAITING_FOR_COMMIT); 621 SchedulerStateMachine::FORCED_REDRAW_STATE_WAITING_FOR_COMMIT);
619 } 622 }
620 623
621 TEST(SchedulerStateMachineTest, TestFailedDrawIsRetriedInNextBeginImplFrame) { 624 TEST(SchedulerStateMachineTest, TestFailedDrawIsRetriedInNextBeginImplFrame) {
622 SchedulerSettings default_scheduler_settings; 625 SchedulerSettings default_scheduler_settings;
623 StateMachine state(default_scheduler_settings); 626 StateMachine state(default_scheduler_settings);
624 SET_UP_STATE(state) 627 SET_UP_STATE(state)
625 628
626 // Start a draw. 629 // Start a draw.
627 state.SetNeedsRedraw(true); 630 state.SetNeedsRedraw(true);
628 EXPECT_TRUE(state.BeginFrameNeeded()); 631 EXPECT_TRUE(state.BeginFrameNeeded());
629 state.OnBeginImplFrame(); 632 state.OnBeginImplFrame(0, 1);
630 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 633 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
631 state.OnBeginImplFrameDeadline(); 634 state.OnBeginImplFrameDeadline();
632 EXPECT_TRUE(state.RedrawPending()); 635 EXPECT_TRUE(state.RedrawPending());
633 state.SetDrawResultForTest(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); 636 state.SetDrawResultForTest(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS);
634 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); 637 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
635 638
636 // Failing the draw for animation checkerboards makes us require a commit. 639 // Failing the draw for animation checkerboards makes us require a commit.
637 EXPECT_ACTION_UPDATE_STATE( 640 EXPECT_ACTION_UPDATE_STATE(
638 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 641 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
639 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 642 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
640 EXPECT_TRUE(state.RedrawPending()); 643 EXPECT_TRUE(state.RedrawPending());
641 644
642 // We should not be trying to draw again now, but we have a commit pending. 645 // We should not be trying to draw again now, but we have a commit pending.
643 EXPECT_TRUE(state.BeginFrameNeeded()); 646 EXPECT_TRUE(state.BeginFrameNeeded());
644 state.OnBeginImplFrame(); 647 state.OnBeginImplFrame(0, 2);
645 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 648 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
646 649
647 // We should try to draw again at the end of the next BeginImplFrame on 650 // We should try to draw again at the end of the next BeginImplFrame on
648 // the impl thread. 651 // the impl thread.
649 state.OnBeginImplFrameDeadline(); 652 state.OnBeginImplFrameDeadline();
650 state.SetDrawResultForTest(DRAW_SUCCESS); 653 state.SetDrawResultForTest(DRAW_SUCCESS);
651 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); 654 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
652 state.DidSubmitCompositorFrame(); 655 state.DidSubmitCompositorFrame();
653 state.DidReceiveCompositorFrameAck(); 656 state.DidReceiveCompositorFrameAck();
654 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 657 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
655 } 658 }
656 659
657 TEST(SchedulerStateMachineTest, TestDoestDrawTwiceInSameFrame) { 660 TEST(SchedulerStateMachineTest, TestDoestDrawTwiceInSameFrame) {
658 SchedulerSettings default_scheduler_settings; 661 SchedulerSettings default_scheduler_settings;
659 StateMachine state(default_scheduler_settings); 662 StateMachine state(default_scheduler_settings);
660 SET_UP_STATE(state) 663 SET_UP_STATE(state)
661 state.SetNeedsRedraw(true); 664 state.SetNeedsRedraw(true);
662 665
663 // Draw the first frame. 666 // Draw the first frame.
664 EXPECT_TRUE(state.BeginFrameNeeded()); 667 EXPECT_TRUE(state.BeginFrameNeeded());
665 state.OnBeginImplFrame(); 668 state.OnBeginImplFrame(0, 1);
666 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 669 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
667 670
668 state.OnBeginImplFrameDeadline(); 671 state.OnBeginImplFrameDeadline();
669 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); 672 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
670 state.DidSubmitCompositorFrame(); 673 state.DidSubmitCompositorFrame();
671 state.DidReceiveCompositorFrameAck(); 674 state.DidReceiveCompositorFrameAck();
672 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 675 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
673 676
674 // Before the next BeginImplFrame, set needs redraw again. 677 // Before the next BeginImplFrame, set needs redraw again.
675 // This should not redraw until the next BeginImplFrame. 678 // This should not redraw until the next BeginImplFrame.
676 state.SetNeedsRedraw(true); 679 state.SetNeedsRedraw(true);
677 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 680 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
678 681
679 // Move to another frame. This should now draw. 682 // Move to another frame. This should now draw.
680 EXPECT_TRUE(state.BeginFrameNeeded()); 683 EXPECT_TRUE(state.BeginFrameNeeded());
681 state.OnBeginImplFrame(); 684 state.OnBeginImplFrame(0, 2);
682 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 685 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
683 state.OnBeginImplFrameDeadline(); 686 state.OnBeginImplFrameDeadline();
684 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); 687 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
685 state.DidSubmitCompositorFrame(); 688 state.DidSubmitCompositorFrame();
686 state.DidReceiveCompositorFrameAck(); 689 state.DidReceiveCompositorFrameAck();
687 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 690 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
688 691
689 // We just submitted, so we should proactively request another BeginImplFrame. 692 // We just submitted, so we should proactively request another BeginImplFrame.
690 EXPECT_TRUE(state.BeginFrameNeeded()); 693 EXPECT_TRUE(state.BeginFrameNeeded());
691 } 694 }
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
809 StateMachine state(default_scheduler_settings); 812 StateMachine state(default_scheduler_settings);
810 state.SetVisible(true); 813 state.SetVisible(true);
811 EXPECT_ACTION_UPDATE_STATE( 814 EXPECT_ACTION_UPDATE_STATE(
812 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION); 815 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION);
813 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 816 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
814 state.CreateAndInitializeCompositorFrameSinkWithActivatedCommit(); 817 state.CreateAndInitializeCompositorFrameSinkWithActivatedCommit();
815 state.SetBeginMainFrameState(begin_main_frame_states[i]); 818 state.SetBeginMainFrameState(begin_main_frame_states[i]);
816 state.SetVisible(false); 819 state.SetVisible(false);
817 state.SetNeedsRedraw(true); 820 state.SetNeedsRedraw(true);
818 if (j == 1) 821 if (j == 1)
819 state.OnBeginImplFrame(); 822 state.OnBeginImplFrame(0, i + 1);
820 823
821 state.SetCanDraw(false); 824 state.SetCanDraw(false);
822 EXPECT_NE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, 825 EXPECT_NE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE,
823 state.NextAction()); 826 state.NextAction());
824 } 827 }
825 } 828 }
826 } 829 }
827 830
828 TEST(SchedulerStateMachineTest, 831 TEST(SchedulerStateMachineTest,
829 TestCanRedrawWithWaitingForFirstDrawMakesProgress) { 832 TestCanRedrawWithWaitingForFirstDrawMakesProgress) {
830 SchedulerSettings default_scheduler_settings; 833 SchedulerSettings default_scheduler_settings;
831 StateMachine state(default_scheduler_settings); 834 StateMachine state(default_scheduler_settings);
832 state.SetVisible(true); 835 state.SetVisible(true);
833 EXPECT_ACTION_UPDATE_STATE( 836 EXPECT_ACTION_UPDATE_STATE(
834 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION); 837 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION);
835 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 838 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
836 state.CreateAndInitializeCompositorFrameSinkWithActivatedCommit(); 839 state.CreateAndInitializeCompositorFrameSinkWithActivatedCommit();
837 840
838 state.SetActiveTreeNeedsFirstDraw(true); 841 state.SetActiveTreeNeedsFirstDraw(true);
839 state.SetNeedsBeginMainFrame(); 842 state.SetNeedsBeginMainFrame();
840 state.SetNeedsRedraw(true); 843 state.SetNeedsRedraw(true);
841 state.SetCanDraw(false); 844 state.SetCanDraw(false);
842 state.OnBeginImplFrame(); 845 state.OnBeginImplFrame(0, 1);
843 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_ABORT); 846 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_ABORT);
844 EXPECT_ACTION_UPDATE_STATE( 847 EXPECT_ACTION_UPDATE_STATE(
845 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 848 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
846 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 849 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
847 state.NotifyBeginMainFrameStarted(); 850 state.NotifyBeginMainFrameStarted();
848 state.NotifyReadyToCommit(); 851 state.NotifyReadyToCommit();
849 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 852 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
850 state.NotifyReadyToActivate(); 853 state.NotifyReadyToActivate();
851 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); 854 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE);
852 state.OnBeginImplFrameDeadline(); 855 state.OnBeginImplFrameDeadline();
853 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_ABORT); 856 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_ABORT);
854 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 857 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
855 } 858 }
856 859
857 TEST(SchedulerStateMachineTest, TestSetNeedsBeginMainFrameIsNotLost) { 860 TEST(SchedulerStateMachineTest, TestSetNeedsBeginMainFrameIsNotLost) {
858 SchedulerSettings scheduler_settings; 861 SchedulerSettings scheduler_settings;
859 StateMachine state(scheduler_settings); 862 StateMachine state(scheduler_settings);
860 SET_UP_STATE(state) 863 SET_UP_STATE(state)
861 state.SetNeedsBeginMainFrame(); 864 state.SetNeedsBeginMainFrame();
862 865
863 EXPECT_TRUE(state.BeginFrameNeeded()); 866 EXPECT_TRUE(state.BeginFrameNeeded());
864 867
865 // Begin the frame. 868 // Begin the frame.
866 state.OnBeginImplFrame(); 869 state.OnBeginImplFrame(0, 1);
867 EXPECT_ACTION_UPDATE_STATE( 870 EXPECT_ACTION_UPDATE_STATE(
868 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 871 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
869 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_SENT); 872 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_SENT);
870 873
871 // Now, while the frame is in progress, set another commit. 874 // Now, while the frame is in progress, set another commit.
872 state.SetNeedsBeginMainFrame(); 875 state.SetNeedsBeginMainFrame();
873 EXPECT_TRUE(state.NeedsCommit()); 876 EXPECT_TRUE(state.NeedsCommit());
874 877
875 // Let the frame finish. 878 // Let the frame finish.
876 state.NotifyBeginMainFrameStarted(); 879 state.NotifyBeginMainFrameStarted();
877 state.NotifyReadyToCommit(); 880 state.NotifyReadyToCommit();
878 EXPECT_MAIN_FRAME_STATE( 881 EXPECT_MAIN_FRAME_STATE(
879 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_READY_TO_COMMIT); 882 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_READY_TO_COMMIT);
880 883
881 // Expect to commit regardless of BeginImplFrame state. 884 // Expect to commit regardless of BeginImplFrame state.
882 EXPECT_IMPL_FRAME_STATE( 885 EXPECT_IMPL_FRAME_STATE(
883 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME); 886 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME);
884 EXPECT_ACTION(SchedulerStateMachine::ACTION_COMMIT); 887 EXPECT_ACTION(SchedulerStateMachine::ACTION_COMMIT);
885 888
886 state.OnBeginImplFrameDeadline(); 889 state.OnBeginImplFrameDeadline();
887 EXPECT_IMPL_FRAME_STATE( 890 EXPECT_IMPL_FRAME_STATE(
888 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE); 891 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE);
889 EXPECT_ACTION(SchedulerStateMachine::ACTION_COMMIT); 892 EXPECT_ACTION(SchedulerStateMachine::ACTION_COMMIT);
890 893
891 state.OnBeginImplFrameIdle(); 894 state.OnBeginImplFrameIdle();
892 EXPECT_IMPL_FRAME_STATE(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE); 895 EXPECT_IMPL_FRAME_STATE(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE);
893 EXPECT_ACTION(SchedulerStateMachine::ACTION_COMMIT); 896 EXPECT_ACTION(SchedulerStateMachine::ACTION_COMMIT);
894 897
895 state.OnBeginImplFrame(); 898 state.OnBeginImplFrame(0, 2);
896 EXPECT_IMPL_FRAME_STATE( 899 EXPECT_IMPL_FRAME_STATE(
897 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME); 900 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME);
898 EXPECT_ACTION(SchedulerStateMachine::ACTION_COMMIT); 901 EXPECT_ACTION(SchedulerStateMachine::ACTION_COMMIT);
899 902
900 // Finish the commit and activate, then make sure we start the next commit 903 // Finish the commit and activate, then make sure we start the next commit
901 // immediately and draw on the next BeginImplFrame. 904 // immediately and draw on the next BeginImplFrame.
902 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 905 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
903 state.NotifyReadyToActivate(); 906 state.NotifyReadyToActivate();
904 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); 907 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE);
905 EXPECT_ACTION_UPDATE_STATE( 908 EXPECT_ACTION_UPDATE_STATE(
(...skipping 11 matching lines...) Expand all
917 920
918 TEST(SchedulerStateMachineTest, TestFullCycle) { 921 TEST(SchedulerStateMachineTest, TestFullCycle) {
919 SchedulerSettings default_scheduler_settings; 922 SchedulerSettings default_scheduler_settings;
920 StateMachine state(default_scheduler_settings); 923 StateMachine state(default_scheduler_settings);
921 SET_UP_STATE(state) 924 SET_UP_STATE(state)
922 925
923 // Start clean and set commit. 926 // Start clean and set commit.
924 state.SetNeedsBeginMainFrame(); 927 state.SetNeedsBeginMainFrame();
925 928
926 // Begin the frame. 929 // Begin the frame.
927 state.OnBeginImplFrame(); 930 state.OnBeginImplFrame(0, 1);
928 EXPECT_ACTION_UPDATE_STATE( 931 EXPECT_ACTION_UPDATE_STATE(
929 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 932 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
930 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_SENT); 933 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_SENT);
931 EXPECT_FALSE(state.NeedsCommit()); 934 EXPECT_FALSE(state.NeedsCommit());
932 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 935 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
933 936
934 // Tell the scheduler the frame finished. 937 // Tell the scheduler the frame finished.
935 state.NotifyBeginMainFrameStarted(); 938 state.NotifyBeginMainFrameStarted();
936 state.NotifyReadyToCommit(); 939 state.NotifyReadyToCommit();
937 EXPECT_MAIN_FRAME_STATE( 940 EXPECT_MAIN_FRAME_STATE(
(...skipping 25 matching lines...) Expand all
963 966
964 TEST(SchedulerStateMachineTest, CommitWithoutDrawWithPendingTree) { 967 TEST(SchedulerStateMachineTest, CommitWithoutDrawWithPendingTree) {
965 SchedulerSettings default_scheduler_settings; 968 SchedulerSettings default_scheduler_settings;
966 StateMachine state(default_scheduler_settings); 969 StateMachine state(default_scheduler_settings);
967 SET_UP_STATE(state) 970 SET_UP_STATE(state)
968 971
969 // Start clean and set commit. 972 // Start clean and set commit.
970 state.SetNeedsBeginMainFrame(); 973 state.SetNeedsBeginMainFrame();
971 974
972 // Make a main frame, commit and activate it. But don't draw it. 975 // Make a main frame, commit and activate it. But don't draw it.
973 state.OnBeginImplFrame(); 976 state.OnBeginImplFrame(0, 1);
974 EXPECT_ACTION_UPDATE_STATE( 977 EXPECT_ACTION_UPDATE_STATE(
975 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 978 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
976 state.NotifyBeginMainFrameStarted(); 979 state.NotifyBeginMainFrameStarted();
977 state.NotifyReadyToCommit(); 980 state.NotifyReadyToCommit();
978 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 981 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
979 state.NotifyReadyToActivate(); 982 state.NotifyReadyToActivate();
980 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); 983 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE);
981 984
982 // Try to make a new main frame before drawing. Since we will commit it to a 985 // 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 986 // pending tree and not clobber the active tree, we're able to start a new
984 // begin frame and commit it. 987 // begin frame and commit it.
985 state.SetNeedsBeginMainFrame(); 988 state.SetNeedsBeginMainFrame();
986 state.OnBeginImplFrame(); 989 state.OnBeginImplFrame(0, 2);
987 EXPECT_ACTION_UPDATE_STATE( 990 EXPECT_ACTION_UPDATE_STATE(
988 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 991 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
989 state.NotifyBeginMainFrameStarted(); 992 state.NotifyBeginMainFrameStarted();
990 state.NotifyReadyToCommit(); 993 state.NotifyReadyToCommit();
991 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 994 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
992 } 995 }
993 996
994 TEST(SchedulerStateMachineTest, DontCommitWithoutDrawWithoutPendingTree) { 997 TEST(SchedulerStateMachineTest, DontCommitWithoutDrawWithoutPendingTree) {
995 SchedulerSettings scheduler_settings; 998 SchedulerSettings scheduler_settings;
996 scheduler_settings.commit_to_active_tree = true; 999 scheduler_settings.commit_to_active_tree = true;
997 scheduler_settings.main_frame_before_activation_enabled = false; 1000 scheduler_settings.main_frame_before_activation_enabled = false;
998 StateMachine state(scheduler_settings); 1001 StateMachine state(scheduler_settings);
999 SET_UP_STATE(state) 1002 SET_UP_STATE(state)
1000 1003
1001 // Start clean and set commit. 1004 // Start clean and set commit.
1002 state.SetNeedsBeginMainFrame(); 1005 state.SetNeedsBeginMainFrame();
1003 1006
1004 // Make a main frame, commit and activate it. But don't draw it. 1007 // Make a main frame, commit and activate it. But don't draw it.
1005 state.OnBeginImplFrame(); 1008 state.OnBeginImplFrame(0, 1);
1006 EXPECT_ACTION_UPDATE_STATE( 1009 EXPECT_ACTION_UPDATE_STATE(
1007 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1010 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
1008 state.NotifyBeginMainFrameStarted(); 1011 state.NotifyBeginMainFrameStarted();
1009 state.NotifyReadyToCommit(); 1012 state.NotifyReadyToCommit();
1010 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 1013 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
1011 state.NotifyReadyToActivate(); 1014 state.NotifyReadyToActivate();
1012 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); 1015 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE);
1013 1016
1014 // Try to make a new main frame before drawing, but since we would clobber the 1017 // Try to make a new main frame before drawing, but since we would clobber the
1015 // active tree, we will not do so. 1018 // active tree, we will not do so.
1016 state.SetNeedsBeginMainFrame(); 1019 state.SetNeedsBeginMainFrame();
1017 state.OnBeginImplFrame(); 1020 state.OnBeginImplFrame(0, 2);
1018 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1021 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1019 } 1022 }
1020 1023
1021 TEST(SchedulerStateMachineTest, AbortedMainFrameDoesNotResetPendingTree) { 1024 TEST(SchedulerStateMachineTest, AbortedMainFrameDoesNotResetPendingTree) {
1022 SchedulerSettings scheduler_settings; 1025 SchedulerSettings scheduler_settings;
1023 scheduler_settings.main_frame_before_activation_enabled = true; 1026 scheduler_settings.main_frame_before_activation_enabled = true;
1024 StateMachine state(scheduler_settings); 1027 StateMachine state(scheduler_settings);
1025 SET_UP_STATE(state); 1028 SET_UP_STATE(state);
1026 1029
1027 // Perform a commit so that we have an active tree. 1030 // Perform a commit so that we have an active tree.
1028 state.SetNeedsBeginMainFrame(); 1031 state.SetNeedsBeginMainFrame();
1029 state.OnBeginImplFrame(); 1032 state.OnBeginImplFrame(0, 1);
1030 EXPECT_ACTION_UPDATE_STATE( 1033 EXPECT_ACTION_UPDATE_STATE(
1031 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1034 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
1032 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1035 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1033 state.NotifyBeginMainFrameStarted(); 1036 state.NotifyBeginMainFrameStarted();
1034 state.NotifyReadyToCommit(); 1037 state.NotifyReadyToCommit();
1035 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 1038 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
1036 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1039 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1037 EXPECT_TRUE(state.has_pending_tree()); 1040 EXPECT_TRUE(state.has_pending_tree());
1038 state.OnBeginImplFrameDeadline(); 1041 state.OnBeginImplFrameDeadline();
1039 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1042 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1040 1043
1041 // Ask for another commit but abort it. Verify that we didn't reset pending 1044 // Ask for another commit but abort it. Verify that we didn't reset pending
1042 // tree state. 1045 // tree state.
1043 state.SetNeedsBeginMainFrame(); 1046 state.SetNeedsBeginMainFrame();
1044 state.OnBeginImplFrame(); 1047 state.OnBeginImplFrame(0, 2);
1045 EXPECT_ACTION_UPDATE_STATE( 1048 EXPECT_ACTION_UPDATE_STATE(
1046 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1049 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
1047 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1050 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1048 EXPECT_TRUE(state.has_pending_tree()); 1051 EXPECT_TRUE(state.has_pending_tree());
1049 state.NotifyBeginMainFrameStarted(); 1052 state.NotifyBeginMainFrameStarted();
1050 state.BeginMainFrameAborted(CommitEarlyOutReason::FINISHED_NO_UPDATES); 1053 state.BeginMainFrameAborted(CommitEarlyOutReason::FINISHED_NO_UPDATES);
1051 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1054 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1052 EXPECT_TRUE(state.has_pending_tree()); 1055 EXPECT_TRUE(state.has_pending_tree());
1053 state.OnBeginImplFrameDeadline(); 1056 state.OnBeginImplFrameDeadline();
1054 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1057 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1055 1058
1056 // Ask for another commit that doesn't abort. 1059 // Ask for another commit that doesn't abort.
1057 state.SetNeedsBeginMainFrame(); 1060 state.SetNeedsBeginMainFrame();
1058 state.OnBeginImplFrame(); 1061 state.OnBeginImplFrame(0, 3);
1059 EXPECT_ACTION_UPDATE_STATE( 1062 EXPECT_ACTION_UPDATE_STATE(
1060 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1063 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
1061 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1064 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1062 state.NotifyBeginMainFrameStarted(); 1065 state.NotifyBeginMainFrameStarted();
1063 state.NotifyReadyToCommit(); 1066 state.NotifyReadyToCommit();
1064 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1067 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1065 EXPECT_TRUE(state.has_pending_tree()); 1068 EXPECT_TRUE(state.has_pending_tree());
1066 1069
1067 // Verify that commit is delayed until the pending tree is activated. 1070 // Verify that commit is delayed until the pending tree is activated.
1068 state.NotifyReadyToActivate(); 1071 state.NotifyReadyToActivate();
1069 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); 1072 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE);
1070 EXPECT_FALSE(state.has_pending_tree()); 1073 EXPECT_FALSE(state.has_pending_tree());
1071 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 1074 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
1072 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1075 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1073 EXPECT_TRUE(state.has_pending_tree()); 1076 EXPECT_TRUE(state.has_pending_tree());
1074 } 1077 }
1075 1078
1076 TEST(SchedulerStateMachineTest, TestFullCycleWithCommitToActive) { 1079 TEST(SchedulerStateMachineTest, TestFullCycleWithCommitToActive) {
1077 SchedulerSettings scheduler_settings; 1080 SchedulerSettings scheduler_settings;
1078 scheduler_settings.commit_to_active_tree = true; 1081 scheduler_settings.commit_to_active_tree = true;
1079 scheduler_settings.main_frame_before_activation_enabled = false; 1082 scheduler_settings.main_frame_before_activation_enabled = false;
1080 StateMachine state(scheduler_settings); 1083 StateMachine state(scheduler_settings);
1081 SET_UP_STATE(state) 1084 SET_UP_STATE(state)
1082 1085
1083 // Start clean and set commit. 1086 // Start clean and set commit.
1084 state.SetNeedsBeginMainFrame(); 1087 state.SetNeedsBeginMainFrame();
1085 1088
1086 // Begin the frame. 1089 // Begin the frame.
1087 state.OnBeginImplFrame(); 1090 state.OnBeginImplFrame(0, 1);
1088 EXPECT_ACTION_UPDATE_STATE( 1091 EXPECT_ACTION_UPDATE_STATE(
1089 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1092 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
1090 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_SENT); 1093 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_SENT);
1091 EXPECT_FALSE(state.NeedsCommit()); 1094 EXPECT_FALSE(state.NeedsCommit());
1092 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1095 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1093 1096
1094 // Tell the scheduler the frame finished. 1097 // Tell the scheduler the frame finished.
1095 state.NotifyBeginMainFrameStarted(); 1098 state.NotifyBeginMainFrameStarted();
1096 state.NotifyReadyToCommit(); 1099 state.NotifyReadyToCommit();
1097 EXPECT_MAIN_FRAME_STATE( 1100 EXPECT_MAIN_FRAME_STATE(
1098 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_READY_TO_COMMIT); 1101 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_READY_TO_COMMIT);
1099 // Commit. 1102 // Commit.
1100 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 1103 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
1101 // Commit always calls NotifyReadyToActivate in this mode. 1104 // Commit always calls NotifyReadyToActivate in this mode.
1102 state.NotifyReadyToActivate(); 1105 state.NotifyReadyToActivate();
1103 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); 1106 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE);
1104 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1107 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1105 1108
1106 // No draw because we haven't received NotifyReadyToDraw yet. 1109 // No draw because we haven't received NotifyReadyToDraw yet.
1107 state.OnBeginImplFrameDeadline(); 1110 state.OnBeginImplFrameDeadline();
1108 EXPECT_TRUE(state.active_tree_needs_first_draw()); 1111 EXPECT_TRUE(state.active_tree_needs_first_draw());
1109 EXPECT_TRUE(state.needs_redraw()); 1112 EXPECT_TRUE(state.needs_redraw());
1110 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1113 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1111 1114
1112 // Can't BeginMainFrame yet since last commit hasn't been drawn yet. 1115 // Can't BeginMainFrame yet since last commit hasn't been drawn yet.
1113 state.SetNeedsBeginMainFrame(); 1116 state.SetNeedsBeginMainFrame();
1114 state.OnBeginImplFrame(); 1117 state.OnBeginImplFrame(0, 2);
1115 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1118 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1116 1119
1117 // Now call ready to draw which will allow the draw to happen and 1120 // Now call ready to draw which will allow the draw to happen and
1118 // BeginMainFrame to be sent. 1121 // BeginMainFrame to be sent.
1119 state.NotifyReadyToDraw(); 1122 state.NotifyReadyToDraw();
1120 state.OnBeginImplFrameDeadline(); 1123 state.OnBeginImplFrameDeadline();
1121 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); 1124 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
1122 // Submit throttled from this point. 1125 // Submit throttled from this point.
1123 state.DidSubmitCompositorFrame(); 1126 state.DidSubmitCompositorFrame();
1124 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1127 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1125 1128
1126 // Can't BeginMainFrame yet since we're submit-frame throttled. 1129 // Can't BeginMainFrame yet since we're submit-frame throttled.
1127 state.OnBeginImplFrame(); 1130 state.OnBeginImplFrame(0, 3);
1128 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1131 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1129 1132
1130 // CompositorFrameAck unblocks BeginMainFrame. 1133 // CompositorFrameAck unblocks BeginMainFrame.
1131 state.DidReceiveCompositorFrameAck(); 1134 state.DidReceiveCompositorFrameAck();
1132 EXPECT_ACTION_UPDATE_STATE( 1135 EXPECT_ACTION_UPDATE_STATE(
1133 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1136 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
1134 state.NotifyBeginMainFrameStarted(); 1137 state.NotifyBeginMainFrameStarted();
1135 state.NotifyReadyToCommit(); 1138 state.NotifyReadyToCommit();
1136 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 1139 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
1137 state.NotifyReadyToActivate(); 1140 state.NotifyReadyToActivate();
1138 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); 1141 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE);
1139 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1142 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1140 1143
1141 // Draw the newly activated tree. 1144 // Draw the newly activated tree.
1142 state.NotifyReadyToDraw(); 1145 state.NotifyReadyToDraw();
1143 state.OnBeginImplFrameDeadline(); 1146 state.OnBeginImplFrameDeadline();
1144 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); 1147 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
1145 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1148 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1146 } 1149 }
1147 1150
1148 TEST(SchedulerStateMachineTest, TestFullCycleWithCommitRequestInbetween) { 1151 TEST(SchedulerStateMachineTest, TestFullCycleWithCommitRequestInbetween) {
1149 SchedulerSettings default_scheduler_settings; 1152 SchedulerSettings default_scheduler_settings;
1150 StateMachine state(default_scheduler_settings); 1153 StateMachine state(default_scheduler_settings);
1151 SET_UP_STATE(state) 1154 SET_UP_STATE(state)
1152 1155
1153 // Start clean and set commit. 1156 // Start clean and set commit.
1154 state.SetNeedsBeginMainFrame(); 1157 state.SetNeedsBeginMainFrame();
1155 1158
1156 // Begin the frame. 1159 // Begin the frame.
1157 state.OnBeginImplFrame(); 1160 state.OnBeginImplFrame(0, 1);
1158 EXPECT_ACTION_UPDATE_STATE( 1161 EXPECT_ACTION_UPDATE_STATE(
1159 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1162 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
1160 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_SENT); 1163 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_SENT);
1161 EXPECT_FALSE(state.NeedsCommit()); 1164 EXPECT_FALSE(state.NeedsCommit());
1162 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1165 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1163 1166
1164 // Request another commit while the commit is in flight. 1167 // Request another commit while the commit is in flight.
1165 state.SetNeedsBeginMainFrame(); 1168 state.SetNeedsBeginMainFrame();
1166 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1169 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1167 1170
(...skipping 18 matching lines...) Expand all
1186 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); 1189 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
1187 state.DidSubmitCompositorFrame(); 1190 state.DidSubmitCompositorFrame();
1188 state.DidReceiveCompositorFrameAck(); 1191 state.DidReceiveCompositorFrameAck();
1189 1192
1190 // Should be synchronized, no draw needed, no action needed. 1193 // Should be synchronized, no draw needed, no action needed.
1191 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1194 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1192 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE); 1195 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE);
1193 EXPECT_FALSE(state.needs_redraw()); 1196 EXPECT_FALSE(state.needs_redraw());
1194 1197
1195 // Next BeginImplFrame should initiate second commit. 1198 // Next BeginImplFrame should initiate second commit.
1196 state.OnBeginImplFrame(); 1199 state.OnBeginImplFrame(0, 2);
1197 EXPECT_ACTION_UPDATE_STATE( 1200 EXPECT_ACTION_UPDATE_STATE(
1198 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1201 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
1199 } 1202 }
1200 1203
1201 TEST(SchedulerStateMachineTest, TestNoRequestCommitWhenInvisible) { 1204 TEST(SchedulerStateMachineTest, TestNoRequestCommitWhenInvisible) {
1202 SchedulerSettings default_scheduler_settings; 1205 SchedulerSettings default_scheduler_settings;
1203 StateMachine state(default_scheduler_settings); 1206 StateMachine state(default_scheduler_settings);
1204 state.SetVisible(true); 1207 state.SetVisible(true);
1205 EXPECT_ACTION_UPDATE_STATE( 1208 EXPECT_ACTION_UPDATE_STATE(
1206 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION); 1209 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION);
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
1249 // "EarlyOut_CompositorFrameSinkLost" cases. 1252 // "EarlyOut_CompositorFrameSinkLost" cases.
1250 TEST(SchedulerStateMachineTest, TestAbortBeginMainFrameBecauseInvisible) { 1253 TEST(SchedulerStateMachineTest, TestAbortBeginMainFrameBecauseInvisible) {
1251 SchedulerSettings default_scheduler_settings; 1254 SchedulerSettings default_scheduler_settings;
1252 StateMachine state(default_scheduler_settings); 1255 StateMachine state(default_scheduler_settings);
1253 SET_UP_STATE(state) 1256 SET_UP_STATE(state)
1254 1257
1255 // Start clean and set commit. 1258 // Start clean and set commit.
1256 state.SetNeedsBeginMainFrame(); 1259 state.SetNeedsBeginMainFrame();
1257 1260
1258 // Begin the frame while visible. 1261 // Begin the frame while visible.
1259 state.OnBeginImplFrame(); 1262 state.OnBeginImplFrame(0, 1);
1260 EXPECT_ACTION_UPDATE_STATE( 1263 EXPECT_ACTION_UPDATE_STATE(
1261 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1264 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
1262 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_SENT); 1265 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_SENT);
1263 EXPECT_FALSE(state.NeedsCommit()); 1266 EXPECT_FALSE(state.NeedsCommit());
1264 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1267 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1265 1268
1266 // Become invisible and abort BeginMainFrame. 1269 // Become invisible and abort BeginMainFrame.
1267 state.SetVisible(false); 1270 state.SetVisible(false);
1268 state.NotifyBeginMainFrameStarted(); 1271 state.NotifyBeginMainFrameStarted();
1269 state.BeginMainFrameAborted(CommitEarlyOutReason::ABORTED_NOT_VISIBLE); 1272 state.BeginMainFrameAborted(CommitEarlyOutReason::ABORTED_NOT_VISIBLE);
(...skipping 13 matching lines...) Expand all
1283 // Become visible again. 1286 // Become visible again.
1284 state.SetVisible(true); 1287 state.SetVisible(true);
1285 1288
1286 // Although we have aborted on this frame and haven't cancelled the commit 1289 // Although we have aborted on this frame and haven't cancelled the commit
1287 // (i.e. need another), don't send another BeginMainFrame yet. 1290 // (i.e. need another), don't send another BeginMainFrame yet.
1288 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE); 1291 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE);
1289 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); 1292 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE);
1290 EXPECT_TRUE(state.NeedsCommit()); 1293 EXPECT_TRUE(state.NeedsCommit());
1291 1294
1292 // Start a new frame. 1295 // Start a new frame.
1293 state.OnBeginImplFrame(); 1296 state.OnBeginImplFrame(0, 2);
1294 EXPECT_ACTION_UPDATE_STATE( 1297 EXPECT_ACTION_UPDATE_STATE(
1295 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1298 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
1296 1299
1297 // We should be starting the commit now. 1300 // We should be starting the commit now.
1298 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_SENT); 1301 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_SENT);
1299 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1302 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1300 } 1303 }
1301 1304
1302 // See ProxyMain::BeginMainFrame "EarlyOut_NoUpdates" case. 1305 // See ProxyMain::BeginMainFrame "EarlyOut_NoUpdates" case.
1303 TEST(SchedulerStateMachineTest, TestAbortBeginMainFrameBecauseCommitNotNeeded) { 1306 TEST(SchedulerStateMachineTest, TestAbortBeginMainFrameBecauseCommitNotNeeded) {
1304 SchedulerSettings default_scheduler_settings; 1307 SchedulerSettings default_scheduler_settings;
1305 StateMachine state(default_scheduler_settings); 1308 StateMachine state(default_scheduler_settings);
1306 state.SetVisible(true); 1309 state.SetVisible(true);
1307 EXPECT_ACTION_UPDATE_STATE( 1310 EXPECT_ACTION_UPDATE_STATE(
1308 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION); 1311 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION);
1309 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1312 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1310 state.DidCreateAndInitializeCompositorFrameSink(); 1313 state.DidCreateAndInitializeCompositorFrameSink();
1311 state.SetCanDraw(true); 1314 state.SetCanDraw(true);
1312 1315
1313 // Get into a begin frame / commit state. 1316 // Get into a begin frame / commit state.
1314 state.SetNeedsBeginMainFrame(); 1317 state.SetNeedsBeginMainFrame();
1315 state.OnBeginImplFrame(); 1318 state.OnBeginImplFrame(0, 1);
1316 EXPECT_ACTION_UPDATE_STATE( 1319 EXPECT_ACTION_UPDATE_STATE(
1317 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1320 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
1318 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_SENT); 1321 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_SENT);
1319 EXPECT_FALSE(state.NeedsCommit()); 1322 EXPECT_FALSE(state.NeedsCommit());
1320 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); 1323 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE);
1321 1324
1322 // Abort the commit, true means that the BeginMainFrame was sent but there 1325 // Abort the commit, true means that the BeginMainFrame was sent but there
1323 // was no work to do on the main thread. 1326 // was no work to do on the main thread.
1324 state.NotifyBeginMainFrameStarted(); 1327 state.NotifyBeginMainFrameStarted();
1325 state.BeginMainFrameAborted(CommitEarlyOutReason::FINISHED_NO_UPDATES); 1328 state.BeginMainFrameAborted(CommitEarlyOutReason::FINISHED_NO_UPDATES);
1326 1329
1327 // NeedsCommit should now be false because the commit was actually handled. 1330 // NeedsCommit should now be false because the commit was actually handled.
1328 EXPECT_FALSE(state.NeedsCommit()); 1331 EXPECT_FALSE(state.NeedsCommit());
1329 1332
1330 // Since the commit was aborted, we don't need to try and draw. 1333 // Since the commit was aborted, we don't need to try and draw.
1331 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1334 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1332 state.OnBeginImplFrameDeadline(); 1335 state.OnBeginImplFrameDeadline();
1333 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1336 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1334 1337
1335 // Verify another commit doesn't start on another frame either. 1338 // Verify another commit doesn't start on another frame either.
1336 EXPECT_FALSE(state.NeedsCommit()); 1339 EXPECT_FALSE(state.NeedsCommit());
1337 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE); 1340 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE);
1338 1341
1339 state.OnBeginImplFrame(); 1342 state.OnBeginImplFrame(0, 2);
1340 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1343 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1341 state.OnBeginImplFrameDeadline(); 1344 state.OnBeginImplFrameDeadline();
1342 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1345 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1343 1346
1344 // Verify another commit can start if requested, though. 1347 // Verify another commit can start if requested, though.
1345 state.SetNeedsBeginMainFrame(); 1348 state.SetNeedsBeginMainFrame();
1346 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE); 1349 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE);
1347 state.OnBeginImplFrame(); 1350 state.OnBeginImplFrame(0, 3);
1348 EXPECT_ACTION(SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1351 EXPECT_ACTION(SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
1349 } 1352 }
1350 1353
1351 TEST(SchedulerStateMachineTest, TestFirstContextCreation) { 1354 TEST(SchedulerStateMachineTest, TestFirstContextCreation) {
1352 SchedulerSettings default_scheduler_settings; 1355 SchedulerSettings default_scheduler_settings;
1353 StateMachine state(default_scheduler_settings); 1356 StateMachine state(default_scheduler_settings);
1354 state.SetVisible(true); 1357 state.SetVisible(true);
1355 state.SetCanDraw(true); 1358 state.SetCanDraw(true);
1356 1359
1357 EXPECT_ACTION_UPDATE_STATE( 1360 EXPECT_ACTION_UPDATE_STATE(
1358 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION); 1361 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION);
1359 state.CreateAndInitializeCompositorFrameSinkWithActivatedCommit(); 1362 state.CreateAndInitializeCompositorFrameSinkWithActivatedCommit();
1360 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1363 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1361 1364
1362 // Check that the first init does not SetNeedsBeginMainFrame. 1365 // Check that the first init does not SetNeedsBeginMainFrame.
1363 state.OnBeginImplFrame(); 1366 state.OnBeginImplFrame(0, 1);
1364 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1367 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1365 state.OnBeginImplFrameDeadline(); 1368 state.OnBeginImplFrameDeadline();
1366 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1369 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1367 1370
1368 // Check that a needs commit initiates a BeginMainFrame. 1371 // Check that a needs commit initiates a BeginMainFrame.
1369 state.SetNeedsBeginMainFrame(); 1372 state.SetNeedsBeginMainFrame();
1370 state.OnBeginImplFrame(); 1373 state.OnBeginImplFrame(0, 2);
1371 EXPECT_ACTION_UPDATE_STATE( 1374 EXPECT_ACTION_UPDATE_STATE(
1372 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1375 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
1373 } 1376 }
1374 1377
1375 TEST(SchedulerStateMachineTest, TestContextLostWhenCompletelyIdle) { 1378 TEST(SchedulerStateMachineTest, TestContextLostWhenCompletelyIdle) {
1376 SchedulerSettings default_scheduler_settings; 1379 SchedulerSettings default_scheduler_settings;
1377 StateMachine state(default_scheduler_settings); 1380 StateMachine state(default_scheduler_settings);
1378 SET_UP_STATE(state) 1381 SET_UP_STATE(state)
1379 1382
1380 EXPECT_NE(SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION, 1383 EXPECT_NE(SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION,
1381 state.NextAction()); 1384 state.NextAction());
1382 state.DidLoseCompositorFrameSink(); 1385 state.DidLoseCompositorFrameSink();
1383 1386
1384 EXPECT_ACTION_UPDATE_STATE( 1387 EXPECT_ACTION_UPDATE_STATE(
1385 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION); 1388 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION);
1386 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1389 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1387 1390
1388 // Once context recreation begins, nothing should happen. 1391 // Once context recreation begins, nothing should happen.
1389 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1392 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1390 1393
1391 // Recreate the context. 1394 // Recreate the context.
1392 state.CreateAndInitializeCompositorFrameSinkWithActivatedCommit(); 1395 state.CreateAndInitializeCompositorFrameSinkWithActivatedCommit();
1393 1396
1394 // When the context is recreated, we should begin a commit. 1397 // When the context is recreated, we should begin a commit.
1395 state.OnBeginImplFrame(); 1398 state.OnBeginImplFrame(0, 1);
1396 EXPECT_ACTION_UPDATE_STATE( 1399 EXPECT_ACTION_UPDATE_STATE(
1397 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1400 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
1398 } 1401 }
1399 1402
1400 TEST(SchedulerStateMachineTest, 1403 TEST(SchedulerStateMachineTest,
1401 TestContextLostWhenIdleAndCommitRequestedWhileRecreating) { 1404 TestContextLostWhenIdleAndCommitRequestedWhileRecreating) {
1402 SchedulerSettings default_scheduler_settings; 1405 SchedulerSettings default_scheduler_settings;
1403 StateMachine state(default_scheduler_settings); 1406 StateMachine state(default_scheduler_settings);
1404 SET_UP_STATE(state) 1407 SET_UP_STATE(state)
1405 1408
1406 EXPECT_NE(SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION, 1409 EXPECT_NE(SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION,
1407 state.NextAction()); 1410 state.NextAction());
1408 state.DidLoseCompositorFrameSink(); 1411 state.DidLoseCompositorFrameSink();
1409 EXPECT_EQ(state.compositor_frame_sink_state(), 1412 EXPECT_EQ(state.compositor_frame_sink_state(),
1410 SchedulerStateMachine::COMPOSITOR_FRAME_SINK_NONE); 1413 SchedulerStateMachine::COMPOSITOR_FRAME_SINK_NONE);
1411 1414
1412 EXPECT_ACTION_UPDATE_STATE( 1415 EXPECT_ACTION_UPDATE_STATE(
1413 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION); 1416 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION);
1414 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1417 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1415 1418
1416 // Once context recreation begins, nothing should happen. 1419 // Once context recreation begins, nothing should happen.
1417 state.OnBeginImplFrame(); 1420 state.OnBeginImplFrame(0, 1);
1418 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1421 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1419 state.OnBeginImplFrameDeadline(); 1422 state.OnBeginImplFrameDeadline();
1420 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1423 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1421 1424
1422 // While context is recreating, commits shouldn't begin. 1425 // While context is recreating, commits shouldn't begin.
1423 state.SetNeedsBeginMainFrame(); 1426 state.SetNeedsBeginMainFrame();
1424 state.OnBeginImplFrame(); 1427 state.OnBeginImplFrame(0, 2);
1425 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1428 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1426 state.OnBeginImplFrameDeadline(); 1429 state.OnBeginImplFrameDeadline();
1427 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1430 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1428 1431
1429 // Recreate the context 1432 // Recreate the context
1430 state.DidCreateAndInitializeCompositorFrameSink(); 1433 state.DidCreateAndInitializeCompositorFrameSink();
1431 EXPECT_EQ( 1434 EXPECT_EQ(
1432 state.compositor_frame_sink_state(), 1435 state.compositor_frame_sink_state(),
1433 SchedulerStateMachine::COMPOSITOR_FRAME_SINK_WAITING_FOR_FIRST_COMMIT); 1436 SchedulerStateMachine::COMPOSITOR_FRAME_SINK_WAITING_FOR_FIRST_COMMIT);
1434 EXPECT_FALSE(state.RedrawPending()); 1437 EXPECT_FALSE(state.RedrawPending());
1435 1438
1436 // When the context is recreated, we wait until the next BeginImplFrame 1439 // When the context is recreated, we wait until the next BeginImplFrame
1437 // before starting. 1440 // before starting.
1438 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1441 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1439 1442
1440 // When the BeginFrame comes in we should begin a commit 1443 // When the BeginFrame comes in we should begin a commit
1441 state.OnBeginImplFrame(); 1444 state.OnBeginImplFrame(0, 3);
1442 EXPECT_ACTION_UPDATE_STATE( 1445 EXPECT_ACTION_UPDATE_STATE(
1443 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1446 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
1444 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1447 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1445 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_SENT); 1448 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_SENT);
1446 1449
1447 // Until that commit finishes, we shouldn't be drawing. 1450 // Until that commit finishes, we shouldn't be drawing.
1448 state.OnBeginImplFrameDeadline(); 1451 state.OnBeginImplFrameDeadline();
1449 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1452 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1450 1453
1451 // Finish the commit, which should make the surface active. 1454 // Finish the commit, which should make the surface active.
1452 state.NotifyBeginMainFrameStarted(); 1455 state.NotifyBeginMainFrameStarted();
1453 state.NotifyReadyToCommit(); 1456 state.NotifyReadyToCommit();
1454 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 1457 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
1455 EXPECT_EQ(state.compositor_frame_sink_state(), 1458 EXPECT_EQ(state.compositor_frame_sink_state(),
1456 SchedulerStateMachine:: 1459 SchedulerStateMachine::
1457 COMPOSITOR_FRAME_SINK_WAITING_FOR_FIRST_ACTIVATION); 1460 COMPOSITOR_FRAME_SINK_WAITING_FOR_FIRST_ACTIVATION);
1458 state.NotifyReadyToActivate(); 1461 state.NotifyReadyToActivate();
1459 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); 1462 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE);
1460 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1463 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1461 EXPECT_EQ(state.compositor_frame_sink_state(), 1464 EXPECT_EQ(state.compositor_frame_sink_state(),
1462 SchedulerStateMachine::COMPOSITOR_FRAME_SINK_ACTIVE); 1465 SchedulerStateMachine::COMPOSITOR_FRAME_SINK_ACTIVE);
1463 1466
1464 // Finishing the first commit after initializing an CompositorFrameSink should 1467 // Finishing the first commit after initializing an CompositorFrameSink should
1465 // automatically cause a redraw. 1468 // automatically cause a redraw.
1466 EXPECT_TRUE(state.RedrawPending()); 1469 EXPECT_TRUE(state.RedrawPending());
1467 state.OnBeginImplFrame(); 1470 state.OnBeginImplFrame(0, 4);
1468 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1471 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1469 state.OnBeginImplFrameDeadline(); 1472 state.OnBeginImplFrameDeadline();
1470 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); 1473 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
1471 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1474 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1472 EXPECT_FALSE(state.RedrawPending()); 1475 EXPECT_FALSE(state.RedrawPending());
1473 1476
1474 // Next frame as no work to do. 1477 // Next frame as no work to do.
1475 state.OnBeginImplFrame(); 1478 state.OnBeginImplFrame(0, 5);
1476 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1479 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1477 state.OnBeginImplFrameDeadline(); 1480 state.OnBeginImplFrameDeadline();
1478 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1481 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1479 1482
1480 // Once the context is recreated, whether we draw should be based on 1483 // Once the context is recreated, whether we draw should be based on
1481 // SetCanDraw if waiting on first draw after activate. 1484 // SetCanDraw if waiting on first draw after activate.
1482 state.SetNeedsRedraw(true); 1485 state.SetNeedsRedraw(true);
1483 state.OnBeginImplFrame(); 1486 state.OnBeginImplFrame(0, 6);
1484 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1487 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1485 state.OnBeginImplFrameDeadline(); 1488 state.OnBeginImplFrameDeadline();
1486 EXPECT_ACTION(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); 1489 EXPECT_ACTION(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
1487 state.SetCanDraw(false); 1490 state.SetCanDraw(false);
1488 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); 1491 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE);
1489 state.SetCanDraw(true); 1492 state.SetCanDraw(true);
1490 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); 1493 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
1491 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1494 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1492 1495
1493 // Once the context is recreated, whether we draw should be based on 1496 // Once the context is recreated, whether we draw should be based on
1494 // SetCanDraw if waiting on first draw after activate. 1497 // SetCanDraw if waiting on first draw after activate.
1495 state.SetNeedsRedraw(true); 1498 state.SetNeedsRedraw(true);
1496 state.SetNeedsBeginMainFrame(); 1499 state.SetNeedsBeginMainFrame();
1497 state.OnBeginImplFrame(); 1500 state.OnBeginImplFrame(0, 7);
1498 EXPECT_ACTION_UPDATE_STATE( 1501 EXPECT_ACTION_UPDATE_STATE(
1499 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1502 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
1500 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1503 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1501 // Activate so we need the first draw 1504 // Activate so we need the first draw
1502 state.NotifyBeginMainFrameStarted(); 1505 state.NotifyBeginMainFrameStarted();
1503 state.NotifyReadyToCommit(); 1506 state.NotifyReadyToCommit();
1504 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 1507 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
1505 state.NotifyReadyToActivate(); 1508 state.NotifyReadyToActivate();
1506 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); 1509 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE);
1507 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1510 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
(...skipping 11 matching lines...) Expand all
1519 TEST(SchedulerStateMachineTest, TestContextLostWhileCommitInProgress) { 1522 TEST(SchedulerStateMachineTest, TestContextLostWhileCommitInProgress) {
1520 SchedulerSettings scheduler_settings; 1523 SchedulerSettings scheduler_settings;
1521 StateMachine state(scheduler_settings); 1524 StateMachine state(scheduler_settings);
1522 SET_UP_STATE(state) 1525 SET_UP_STATE(state)
1523 1526
1524 // Get a commit in flight. 1527 // Get a commit in flight.
1525 state.SetNeedsBeginMainFrame(); 1528 state.SetNeedsBeginMainFrame();
1526 1529
1527 // Set damage and expect a draw. 1530 // Set damage and expect a draw.
1528 state.SetNeedsRedraw(true); 1531 state.SetNeedsRedraw(true);
1529 state.OnBeginImplFrame(); 1532 state.OnBeginImplFrame(0, 1);
1530 EXPECT_ACTION_UPDATE_STATE( 1533 EXPECT_ACTION_UPDATE_STATE(
1531 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1534 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
1532 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1535 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1533 state.OnBeginImplFrameDeadline(); 1536 state.OnBeginImplFrameDeadline();
1534 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); 1537 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
1535 state.DidSubmitCompositorFrame(); 1538 state.DidSubmitCompositorFrame();
1536 state.DidReceiveCompositorFrameAck(); 1539 state.DidReceiveCompositorFrameAck();
1537 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1540 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1538 1541
1539 // Cause a lost context while the BeginMainFrame is in flight. 1542 // Cause a lost context while the BeginMainFrame is in flight.
(...skipping 13 matching lines...) Expand all
1553 // We will abort the draw when the CompositorFrameSink is lost if we are 1556 // We will abort the draw when the CompositorFrameSink is lost if we are
1554 // waiting for the first draw to unblock the main thread. 1557 // waiting for the first draw to unblock the main thread.
1555 EXPECT_TRUE(state.active_tree_needs_first_draw()); 1558 EXPECT_TRUE(state.active_tree_needs_first_draw());
1556 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_ABORT); 1559 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_ABORT);
1557 1560
1558 // Expect to begin context recreation only in BEGIN_IMPL_FRAME_STATE_IDLE 1561 // Expect to begin context recreation only in BEGIN_IMPL_FRAME_STATE_IDLE
1559 EXPECT_IMPL_FRAME_STATE(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE); 1562 EXPECT_IMPL_FRAME_STATE(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE);
1560 EXPECT_ACTION( 1563 EXPECT_ACTION(
1561 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION); 1564 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION);
1562 1565
1563 state.OnBeginImplFrame(); 1566 state.OnBeginImplFrame(0, 2);
1564 EXPECT_IMPL_FRAME_STATE( 1567 EXPECT_IMPL_FRAME_STATE(
1565 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME); 1568 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME);
1566 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); 1569 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE);
1567 1570
1568 state.OnBeginImplFrameDeadline(); 1571 state.OnBeginImplFrameDeadline();
1569 EXPECT_IMPL_FRAME_STATE( 1572 EXPECT_IMPL_FRAME_STATE(
1570 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE); 1573 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE);
1571 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); 1574 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE);
1572 } 1575 }
1573 1576
1574 TEST(SchedulerStateMachineTest, 1577 TEST(SchedulerStateMachineTest,
1575 TestContextLostWhileCommitInProgressAndAnotherCommitRequested) { 1578 TestContextLostWhileCommitInProgressAndAnotherCommitRequested) {
1576 SchedulerSettings scheduler_settings; 1579 SchedulerSettings scheduler_settings;
1577 StateMachine state(scheduler_settings); 1580 StateMachine state(scheduler_settings);
1578 SET_UP_STATE(state) 1581 SET_UP_STATE(state)
1579 1582
1580 // Get a commit in flight. 1583 // Get a commit in flight.
1581 state.SetNeedsBeginMainFrame(); 1584 state.SetNeedsBeginMainFrame();
1582 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1585 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1583 1586
1584 // Set damage and expect a draw. 1587 // Set damage and expect a draw.
1585 state.SetNeedsRedraw(true); 1588 state.SetNeedsRedraw(true);
1586 state.OnBeginImplFrame(); 1589 state.OnBeginImplFrame(0, 1);
1587 EXPECT_ACTION_UPDATE_STATE( 1590 EXPECT_ACTION_UPDATE_STATE(
1588 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1591 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
1589 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1592 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1590 state.OnBeginImplFrameDeadline(); 1593 state.OnBeginImplFrameDeadline();
1591 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); 1594 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
1592 state.DidSubmitCompositorFrame(); 1595 state.DidSubmitCompositorFrame();
1593 state.DidReceiveCompositorFrameAck(); 1596 state.DidReceiveCompositorFrameAck();
1594 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1597 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1595 1598
1596 // Cause a lost context while the BeginMainFrame is in flight. 1599 // 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()); 1613 EXPECT_TRUE(state.active_tree_needs_first_draw());
1611 1614
1612 // Because the CompositorFrameSink is missing, we expect the draw to abort. 1615 // Because the CompositorFrameSink is missing, we expect the draw to abort.
1613 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_ABORT); 1616 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_ABORT);
1614 1617
1615 // Expect to begin context recreation only in BEGIN_IMPL_FRAME_STATE_IDLE 1618 // Expect to begin context recreation only in BEGIN_IMPL_FRAME_STATE_IDLE
1616 EXPECT_IMPL_FRAME_STATE(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE); 1619 EXPECT_IMPL_FRAME_STATE(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE);
1617 EXPECT_ACTION( 1620 EXPECT_ACTION(
1618 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION); 1621 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION);
1619 1622
1620 state.OnBeginImplFrame(); 1623 state.OnBeginImplFrame(0, 2);
1621 EXPECT_IMPL_FRAME_STATE( 1624 EXPECT_IMPL_FRAME_STATE(
1622 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME); 1625 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME);
1623 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); 1626 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE);
1624 1627
1625 state.OnBeginImplFrameDeadline(); 1628 state.OnBeginImplFrameDeadline();
1626 EXPECT_IMPL_FRAME_STATE( 1629 EXPECT_IMPL_FRAME_STATE(
1627 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE); 1630 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE);
1628 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); 1631 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE);
1629 1632
1630 state.OnBeginImplFrameIdle(); 1633 state.OnBeginImplFrameIdle();
1631 EXPECT_ACTION_UPDATE_STATE( 1634 EXPECT_ACTION_UPDATE_STATE(
1632 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION); 1635 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION);
1633 1636
1634 // After we get a new CompositorFrameSink, the commit flow should start. 1637 // After we get a new CompositorFrameSink, the commit flow should start.
1635 state.CreateAndInitializeCompositorFrameSinkWithActivatedCommit(); 1638 state.CreateAndInitializeCompositorFrameSinkWithActivatedCommit();
1636 state.OnBeginImplFrame(); 1639 state.OnBeginImplFrame(0, 3);
1637 EXPECT_ACTION_UPDATE_STATE( 1640 EXPECT_ACTION_UPDATE_STATE(
1638 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1641 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
1639 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1642 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1640 state.NotifyBeginMainFrameStarted(); 1643 state.NotifyBeginMainFrameStarted();
1641 state.NotifyReadyToCommit(); 1644 state.NotifyReadyToCommit();
1642 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 1645 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
1643 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1646 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1644 state.NotifyReadyToActivate(); 1647 state.NotifyReadyToActivate();
1645 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); 1648 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE);
1646 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1649 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
(...skipping 13 matching lines...) Expand all
1660 state.SetNeedsRedraw(true); 1663 state.SetNeedsRedraw(true);
1661 1664
1662 // Cause a lost CompositorFrameSink, and restore it. 1665 // Cause a lost CompositorFrameSink, and restore it.
1663 state.DidLoseCompositorFrameSink(); 1666 state.DidLoseCompositorFrameSink();
1664 EXPECT_ACTION_UPDATE_STATE( 1667 EXPECT_ACTION_UPDATE_STATE(
1665 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION); 1668 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION);
1666 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1669 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1667 state.DidCreateAndInitializeCompositorFrameSink(); 1670 state.DidCreateAndInitializeCompositorFrameSink();
1668 1671
1669 EXPECT_FALSE(state.RedrawPending()); 1672 EXPECT_FALSE(state.RedrawPending());
1670 state.OnBeginImplFrame(); 1673 state.OnBeginImplFrame(0, 1);
1671 EXPECT_ACTION(SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1674 EXPECT_ACTION(SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
1672 } 1675 }
1673 1676
1674 TEST(SchedulerStateMachineTest, 1677 TEST(SchedulerStateMachineTest,
1675 TestPendingActivationsShouldBeForcedAfterLostCompositorFrameSink) { 1678 TestPendingActivationsShouldBeForcedAfterLostCompositorFrameSink) {
1676 SchedulerSettings default_scheduler_settings; 1679 SchedulerSettings default_scheduler_settings;
1677 StateMachine state(default_scheduler_settings); 1680 StateMachine state(default_scheduler_settings);
1678 SET_UP_STATE(state) 1681 SET_UP_STATE(state)
1679 1682
1680 state.SetBeginMainFrameState( 1683 state.SetBeginMainFrameState(
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
1723 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1726 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1724 state.CreateAndInitializeCompositorFrameSinkWithActivatedCommit(); 1727 state.CreateAndInitializeCompositorFrameSinkWithActivatedCommit();
1725 state.SetVisible(false); 1728 state.SetVisible(false);
1726 state.SetNeedsBeginMainFrame(); 1729 state.SetNeedsBeginMainFrame();
1727 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); 1730 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE);
1728 EXPECT_FALSE(state.BeginFrameNeeded()); 1731 EXPECT_FALSE(state.BeginFrameNeeded());
1729 1732
1730 // When become visible again, the needs commit should still be pending. 1733 // When become visible again, the needs commit should still be pending.
1731 state.SetVisible(true); 1734 state.SetVisible(true);
1732 EXPECT_TRUE(state.BeginFrameNeeded()); 1735 EXPECT_TRUE(state.BeginFrameNeeded());
1733 state.OnBeginImplFrame(); 1736 state.OnBeginImplFrame(0, 1);
1734 EXPECT_ACTION_UPDATE_STATE( 1737 EXPECT_ACTION_UPDATE_STATE(
1735 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1738 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
1736 } 1739 }
1737 1740
1738 TEST(SchedulerStateMachineTest, TestFinishCommitWhenCommitInProgress) { 1741 TEST(SchedulerStateMachineTest, TestFinishCommitWhenCommitInProgress) {
1739 SchedulerSettings default_scheduler_settings; 1742 SchedulerSettings default_scheduler_settings;
1740 StateMachine state(default_scheduler_settings); 1743 StateMachine state(default_scheduler_settings);
1741 state.SetVisible(true); 1744 state.SetVisible(true);
1742 EXPECT_ACTION_UPDATE_STATE( 1745 EXPECT_ACTION_UPDATE_STATE(
1743 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION); 1746 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION);
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
1887 } 1890 }
1888 1891
1889 TEST(SchedulerStateMachineTest, 1892 TEST(SchedulerStateMachineTest,
1890 TestTriggerDeadlineImmediatelyAfterAbortedCommit) { 1893 TestTriggerDeadlineImmediatelyAfterAbortedCommit) {
1891 SchedulerSettings default_scheduler_settings; 1894 SchedulerSettings default_scheduler_settings;
1892 StateMachine state(default_scheduler_settings); 1895 StateMachine state(default_scheduler_settings);
1893 SET_UP_STATE(state) 1896 SET_UP_STATE(state)
1894 1897
1895 // This test mirrors what happens during the first frame of a scroll gesture. 1898 // This test mirrors what happens during the first frame of a scroll gesture.
1896 // First we get the input event and a BeginFrame. 1899 // First we get the input event and a BeginFrame.
1897 state.OnBeginImplFrame(); 1900 state.OnBeginImplFrame(0, 1);
1898 1901
1899 // As a response the compositor requests a redraw and a commit to tell the 1902 // As a response the compositor requests a redraw and a commit to tell the
1900 // main thread about the new scroll offset. 1903 // main thread about the new scroll offset.
1901 state.SetNeedsRedraw(true); 1904 state.SetNeedsRedraw(true);
1902 state.SetNeedsBeginMainFrame(); 1905 state.SetNeedsBeginMainFrame();
1903 1906
1904 // We should start the commit normally. 1907 // We should start the commit normally.
1905 EXPECT_ACTION_UPDATE_STATE( 1908 EXPECT_ACTION_UPDATE_STATE(
1906 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1909 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
1907 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1910 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
(...skipping 14 matching lines...) Expand all
1922 StateMachine& state = *state_ptr; 1925 StateMachine& state = *state_ptr;
1923 1926
1924 state.NotifyBeginMainFrameStarted(); 1927 state.NotifyBeginMainFrameStarted();
1925 state.NotifyReadyToCommit(); 1928 state.NotifyReadyToCommit();
1926 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 1929 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
1927 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1930 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1928 state.NotifyReadyToActivate(); 1931 state.NotifyReadyToActivate();
1929 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); 1932 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE);
1930 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1933 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1931 1934
1932 state.OnBeginImplFrame(); 1935 state.OnBeginImplFrame(0, 1);
1933 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1936 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1934 1937
1935 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineImmediately()); 1938 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineImmediately());
1936 state.OnBeginImplFrameDeadline(); 1939 state.OnBeginImplFrameDeadline();
1937 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); 1940 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
1938 state.DidSubmitCompositorFrame(); 1941 state.DidSubmitCompositorFrame();
1939 } 1942 }
1940 1943
1941 TEST(SchedulerStateMachineTest, TestImplLatencyTakesPriority) { 1944 TEST(SchedulerStateMachineTest, TestImplLatencyTakesPriority) {
1942 SchedulerSettings default_scheduler_settings; 1945 SchedulerSettings default_scheduler_settings;
1943 StateMachine state(default_scheduler_settings); 1946 StateMachine state(default_scheduler_settings);
1944 SET_UP_STATE(state) 1947 SET_UP_STATE(state)
1945 1948
1946 // This test ensures that impl-draws are prioritized over main thread updates 1949 // This test ensures that impl-draws are prioritized over main thread updates
1947 // in prefer impl latency mode. 1950 // in prefer impl latency mode.
1948 state.SetNeedsRedraw(true); 1951 state.SetNeedsRedraw(true);
1949 state.SetNeedsBeginMainFrame(); 1952 state.SetNeedsBeginMainFrame();
1950 state.OnBeginImplFrame(); 1953 state.OnBeginImplFrame(0, 1);
1951 EXPECT_ACTION_UPDATE_STATE( 1954 EXPECT_ACTION_UPDATE_STATE(
1952 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1955 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
1953 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1956 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1954 1957
1955 // Verify the deadline is not triggered early until we enter 1958 // Verify the deadline is not triggered early until we enter
1956 // prefer impl latency mode. 1959 // prefer impl latency mode.
1957 EXPECT_FALSE(state.ShouldTriggerBeginImplFrameDeadlineImmediately()); 1960 EXPECT_FALSE(state.ShouldTriggerBeginImplFrameDeadlineImmediately());
1958 state.SetTreePrioritiesAndScrollState( 1961 state.SetTreePrioritiesAndScrollState(
1959 SMOOTHNESS_TAKES_PRIORITY, 1962 SMOOTHNESS_TAKES_PRIORITY,
1960 ScrollHandlerState::SCROLL_DOES_NOT_AFFECT_SCROLL_HANDLER); 1963 ScrollHandlerState::SCROLL_DOES_NOT_AFFECT_SCROLL_HANDLER);
(...skipping 16 matching lines...) Expand all
1977 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1980 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1978 1981
1979 // Finish the previous commit and draw it. 1982 // Finish the previous commit and draw it.
1980 FinishPreviousCommitAndDrawWithoutExitingDeadline(&state); 1983 FinishPreviousCommitAndDrawWithoutExitingDeadline(&state);
1981 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1984 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1982 1985
1983 // Verify we do not send another BeginMainFrame if was are submit-frame 1986 // Verify we do not send another BeginMainFrame if was are submit-frame
1984 // throttled and did not just submit one. 1987 // throttled and did not just submit one.
1985 state.SetNeedsBeginMainFrame(); 1988 state.SetNeedsBeginMainFrame();
1986 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1989 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1987 state.OnBeginImplFrame(); 1990 state.OnBeginImplFrame(0, 2);
1988 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1991 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1989 EXPECT_FALSE(state.ShouldTriggerBeginImplFrameDeadlineImmediately()); 1992 EXPECT_FALSE(state.ShouldTriggerBeginImplFrameDeadlineImmediately());
1990 state.OnBeginImplFrameDeadline(); 1993 state.OnBeginImplFrameDeadline();
1991 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1994 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1992 } 1995 }
1993 1996
1994 TEST(SchedulerStateMachineTest, 1997 TEST(SchedulerStateMachineTest,
1995 TestTriggerDeadlineImmediatelyOnLostCompositorFrameSink) { 1998 TestTriggerDeadlineImmediatelyOnLostCompositorFrameSink) {
1996 SchedulerSettings default_scheduler_settings; 1999 SchedulerSettings default_scheduler_settings;
1997 StateMachine state(default_scheduler_settings); 2000 StateMachine state(default_scheduler_settings);
1998 SET_UP_STATE(state) 2001 SET_UP_STATE(state)
1999 2002
2000 state.SetNeedsBeginMainFrame(); 2003 state.SetNeedsBeginMainFrame();
2001 2004
2002 state.OnBeginImplFrame(); 2005 state.OnBeginImplFrame(0, 1);
2003 EXPECT_ACTION_UPDATE_STATE( 2006 EXPECT_ACTION_UPDATE_STATE(
2004 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 2007 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
2005 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 2008 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
2006 EXPECT_FALSE(state.ShouldTriggerBeginImplFrameDeadlineImmediately()); 2009 EXPECT_FALSE(state.ShouldTriggerBeginImplFrameDeadlineImmediately());
2007 2010
2008 state.DidLoseCompositorFrameSink(); 2011 state.DidLoseCompositorFrameSink();
2009 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 2012 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
2010 // The deadline should be triggered immediately when CompositorFrameSink is 2013 // The deadline should be triggered immediately when CompositorFrameSink is
2011 // lost. 2014 // lost.
2012 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineImmediately()); 2015 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineImmediately());
2013 } 2016 }
2014 2017
2015 TEST(SchedulerStateMachineTest, TestTriggerDeadlineImmediatelyWhenInvisible) { 2018 TEST(SchedulerStateMachineTest, TestTriggerDeadlineImmediatelyWhenInvisible) {
2016 SchedulerSettings default_scheduler_settings; 2019 SchedulerSettings default_scheduler_settings;
2017 StateMachine state(default_scheduler_settings); 2020 StateMachine state(default_scheduler_settings);
2018 SET_UP_STATE(state) 2021 SET_UP_STATE(state)
2019 2022
2020 state.SetNeedsBeginMainFrame(); 2023 state.SetNeedsBeginMainFrame();
2021 2024
2022 state.OnBeginImplFrame(); 2025 state.OnBeginImplFrame(0, 1);
2023 EXPECT_ACTION_UPDATE_STATE( 2026 EXPECT_ACTION_UPDATE_STATE(
2024 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 2027 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
2025 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 2028 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
2026 EXPECT_FALSE(state.ShouldTriggerBeginImplFrameDeadlineImmediately()); 2029 EXPECT_FALSE(state.ShouldTriggerBeginImplFrameDeadlineImmediately());
2027 2030
2028 state.SetVisible(false); 2031 state.SetVisible(false);
2029 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 2032 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
2030 EXPECT_TRUE(state.PendingActivationsShouldBeForced()); 2033 EXPECT_TRUE(state.PendingActivationsShouldBeForced());
2031 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineImmediately()); 2034 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineImmediately());
2032 } 2035 }
2033 2036
2034 TEST(SchedulerStateMachineTest, 2037 TEST(SchedulerStateMachineTest,
2035 TestTriggerDeadlineImmediatelyWhenBeginFrameSourcePaused) { 2038 TestTriggerDeadlineImmediatelyWhenBeginFrameSourcePaused) {
2036 SchedulerSettings default_scheduler_settings; 2039 SchedulerSettings default_scheduler_settings;
2037 StateMachine state(default_scheduler_settings); 2040 StateMachine state(default_scheduler_settings);
2038 SET_UP_STATE(state) 2041 SET_UP_STATE(state)
2039 2042
2040 state.SetNeedsBeginMainFrame(); 2043 state.SetNeedsBeginMainFrame();
2041 2044
2042 state.OnBeginImplFrame(); 2045 state.OnBeginImplFrame(0, 1);
2043 EXPECT_ACTION_UPDATE_STATE( 2046 EXPECT_ACTION_UPDATE_STATE(
2044 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 2047 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
2045 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 2048 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
2046 EXPECT_FALSE(state.ShouldTriggerBeginImplFrameDeadlineImmediately()); 2049 EXPECT_FALSE(state.ShouldTriggerBeginImplFrameDeadlineImmediately());
2047 2050
2048 state.SetBeginFrameSourcePaused(true); 2051 state.SetBeginFrameSourcePaused(true);
2049 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 2052 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
2050 EXPECT_TRUE(state.PendingActivationsShouldBeForced()); 2053 EXPECT_TRUE(state.PendingActivationsShouldBeForced());
2051 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineImmediately()); 2054 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineImmediately());
2052 } 2055 }
2053 2056
2054 TEST(SchedulerStateMachineTest, TestDeferCommit) { 2057 TEST(SchedulerStateMachineTest, TestDeferCommit) {
2055 SchedulerSettings settings; 2058 SchedulerSettings settings;
2056 StateMachine state(settings); 2059 StateMachine state(settings);
2057 SET_UP_STATE(state) 2060 SET_UP_STATE(state)
2058 2061
2059 state.SetDeferCommits(true); 2062 state.SetDeferCommits(true);
2060 2063
2061 state.SetNeedsBeginMainFrame(); 2064 state.SetNeedsBeginMainFrame();
2062 EXPECT_FALSE(state.BeginFrameNeeded()); 2065 EXPECT_FALSE(state.BeginFrameNeeded());
2063 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 2066 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
2064 2067
2065 state.OnBeginImplFrame(); 2068 state.OnBeginImplFrame(0, 1);
2066 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 2069 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
2067 2070
2068 state.OnBeginImplFrameDeadline(); 2071 state.OnBeginImplFrameDeadline();
2069 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 2072 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
2070 2073
2071 state.SetDeferCommits(false); 2074 state.SetDeferCommits(false);
2072 state.OnBeginImplFrame(); 2075 state.OnBeginImplFrame(0, 2);
2073 EXPECT_ACTION_UPDATE_STATE( 2076 EXPECT_ACTION_UPDATE_STATE(
2074 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 2077 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
2075 } 2078 }
2076 2079
2077 TEST(SchedulerStateMachineTest, EarlyOutCommitWantsProactiveBeginFrame) { 2080 TEST(SchedulerStateMachineTest, EarlyOutCommitWantsProactiveBeginFrame) {
2078 SchedulerSettings settings; 2081 SchedulerSettings settings;
2079 StateMachine state(settings); 2082 StateMachine state(settings);
2080 SET_UP_STATE(state); 2083 SET_UP_STATE(state);
2081 2084
2082 EXPECT_FALSE(state.ProactiveBeginFrameWanted()); 2085 EXPECT_FALSE(state.ProactiveBeginFrameWanted());
2083 bool commit_has_no_updates = true; 2086 bool commit_has_no_updates = true;
2084 state.WillCommit(commit_has_no_updates); 2087 state.WillCommit(commit_has_no_updates);
2085 EXPECT_TRUE(state.ProactiveBeginFrameWanted()); 2088 EXPECT_TRUE(state.ProactiveBeginFrameWanted());
2086 state.OnBeginImplFrame(); 2089 state.OnBeginImplFrame(0, 1);
2087 EXPECT_FALSE(state.ProactiveBeginFrameWanted()); 2090 EXPECT_FALSE(state.ProactiveBeginFrameWanted());
2088 } 2091 }
2089 2092
2090 TEST(SchedulerStateMachineTest, 2093 TEST(SchedulerStateMachineTest,
2091 NoCompositorFrameSinkCreationWhileCommitPending) { 2094 NoCompositorFrameSinkCreationWhileCommitPending) {
2092 SchedulerSettings settings; 2095 SchedulerSettings settings;
2093 StateMachine state(settings); 2096 StateMachine state(settings);
2094 SET_UP_STATE(state); 2097 SET_UP_STATE(state);
2095 2098
2096 // Set up the request for a commit and start a frame. 2099 // Set up the request for a commit and start a frame.
2097 state.SetNeedsBeginMainFrame(); 2100 state.SetNeedsBeginMainFrame();
2098 state.OnBeginImplFrame(); 2101 state.OnBeginImplFrame(0, 1);
2099 PerformAction(&state, SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 2102 PerformAction(&state, SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
2100 2103
2101 // Lose the CompositorFrameSink. 2104 // Lose the CompositorFrameSink.
2102 state.DidLoseCompositorFrameSink(); 2105 state.DidLoseCompositorFrameSink();
2103 2106
2104 // The scheduler shouldn't trigger the CompositorFrameSink creation till the 2107 // The scheduler shouldn't trigger the CompositorFrameSink creation till the
2105 // previous commit has been cleared. 2108 // previous commit has been cleared.
2106 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 2109 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
2107 2110
2108 // Trigger the deadline and ensure that the scheduler does not trigger any 2111 // Trigger the deadline and ensure that the scheduler does not trigger any
(...skipping 15 matching lines...) Expand all
2124 } 2127 }
2125 2128
2126 TEST(SchedulerStateMachineTest, CompositorFrameSinkCreationWhileCommitPending) { 2129 TEST(SchedulerStateMachineTest, CompositorFrameSinkCreationWhileCommitPending) {
2127 SchedulerSettings settings; 2130 SchedulerSettings settings;
2128 settings.abort_commit_before_compositor_frame_sink_creation = false; 2131 settings.abort_commit_before_compositor_frame_sink_creation = false;
2129 StateMachine state(settings); 2132 StateMachine state(settings);
2130 SET_UP_STATE(state); 2133 SET_UP_STATE(state);
2131 2134
2132 // Set up the request for a commit and start a frame. 2135 // Set up the request for a commit and start a frame.
2133 state.SetNeedsBeginMainFrame(); 2136 state.SetNeedsBeginMainFrame();
2134 state.OnBeginImplFrame(); 2137 state.OnBeginImplFrame(0, 1);
2135 PerformAction(&state, SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 2138 PerformAction(&state, SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
2136 2139
2137 // Lose the CompositorFrameSink. 2140 // Lose the CompositorFrameSink.
2138 state.DidLoseCompositorFrameSink(); 2141 state.DidLoseCompositorFrameSink();
2139 2142
2140 // The scheduler shouldn't trigger the CompositorFrameSink creation till the 2143 // The scheduler shouldn't trigger the CompositorFrameSink creation till the
2141 // previous begin impl frame state is cleared from the pipeline. 2144 // previous begin impl frame state is cleared from the pipeline.
2142 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 2145 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
2143 2146
2144 // Cycle through the frame stages to clear the scheduler state. 2147 // Cycle through the frame stages to clear the scheduler state.
2145 state.OnBeginImplFrameDeadline(); 2148 state.OnBeginImplFrameDeadline();
2146 state.OnBeginImplFrameIdle(); 2149 state.OnBeginImplFrameIdle();
2147 2150
2148 // The scheduler should begin the CompositorFrameSink creation now. 2151 // The scheduler should begin the CompositorFrameSink creation now.
2149 EXPECT_ACTION_UPDATE_STATE( 2152 EXPECT_ACTION_UPDATE_STATE(
2150 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION); 2153 SchedulerStateMachine::ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION);
2151 } 2154 }
2152 2155
2153 } // namespace 2156 } // namespace
2154 } // namespace cc 2157 } // namespace cc
OLDNEW
« no previous file with comments | « cc/scheduler/scheduler_state_machine.cc ('k') | cc/scheduler/scheduler_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698