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