| 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 "base/trace_event/trace_event.h" | 7 #include "base/trace_event/trace_event.h" |
| 8 #include "cc/scheduler/scheduler.h" | 8 #include "cc/scheduler/scheduler.h" |
| 9 #include "cc/test/begin_frame_args_test.h" | 9 #include "cc/test/begin_frame_args_test.h" |
| 10 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" |
| (...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 125 | 125 |
| 126 bool PendingActivationsShouldBeForced() const { | 126 bool PendingActivationsShouldBeForced() const { |
| 127 return SchedulerStateMachine::PendingActivationsShouldBeForced(); | 127 return SchedulerStateMachine::PendingActivationsShouldBeForced(); |
| 128 } | 128 } |
| 129 | 129 |
| 130 void SetHasPendingTree(bool has_pending_tree) { | 130 void SetHasPendingTree(bool has_pending_tree) { |
| 131 has_pending_tree_ = has_pending_tree; | 131 has_pending_tree_ = has_pending_tree; |
| 132 } | 132 } |
| 133 | 133 |
| 134 using SchedulerStateMachine::ShouldTriggerBeginImplFrameDeadlineImmediately; | 134 using SchedulerStateMachine::ShouldTriggerBeginImplFrameDeadlineImmediately; |
| 135 using SchedulerStateMachine::ProactiveBeginFrameWanted; |
| 136 using SchedulerStateMachine::UpdateStateOnCommit; |
| 135 }; | 137 }; |
| 136 | 138 |
| 137 TEST(SchedulerStateMachineTest, TestNextActionBeginsMainFrameIfNeeded) { | 139 TEST(SchedulerStateMachineTest, TestNextActionBeginsMainFrameIfNeeded) { |
| 138 SchedulerSettings default_scheduler_settings; | 140 SchedulerSettings default_scheduler_settings; |
| 139 | 141 |
| 140 // If no commit needed, do nothing. | 142 // If no commit needed, do nothing. |
| 141 { | 143 { |
| 142 StateMachine state(default_scheduler_settings); | 144 StateMachine state(default_scheduler_settings); |
| 143 state.SetCanStart(); | 145 state.SetCanStart(); |
| 144 EXPECT_ACTION_UPDATE_STATE( | 146 EXPECT_ACTION_UPDATE_STATE( |
| 145 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION) | 147 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION) |
| 146 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 148 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 147 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE); | 149 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE); |
| 148 state.SetNeedsRedraw(false); | 150 state.SetNeedsRedraw(false); |
| 149 state.SetVisible(true); | 151 state.SetVisible(true); |
| 150 | 152 |
| 151 EXPECT_FALSE(state.BeginFrameNeeded()); | 153 EXPECT_FALSE(state.BeginFrameNeeded()); |
| 152 | 154 |
| 153 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 155 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 154 EXPECT_FALSE(state.BeginFrameNeeded()); | 156 EXPECT_FALSE(state.BeginFrameNeeded()); |
| 155 state.OnBeginImplFrame( | 157 state.OnBeginImplFrame(); |
| 156 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | |
| 157 | 158 |
| 158 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 159 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 159 state.OnBeginImplFrameDeadline(); | 160 state.OnBeginImplFrameDeadline(); |
| 160 } | 161 } |
| 161 | 162 |
| 162 // If commit requested but can_start is still false, do nothing. | 163 // If commit requested but can_start is still false, do nothing. |
| 163 { | 164 { |
| 164 StateMachine state(default_scheduler_settings); | 165 StateMachine state(default_scheduler_settings); |
| 165 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE); | 166 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE); |
| 166 state.SetNeedsRedraw(false); | 167 state.SetNeedsRedraw(false); |
| 167 state.SetVisible(true); | 168 state.SetVisible(true); |
| 168 state.SetNeedsCommit(); | 169 state.SetNeedsCommit(); |
| 169 | 170 |
| 170 EXPECT_FALSE(state.BeginFrameNeeded()); | 171 EXPECT_FALSE(state.BeginFrameNeeded()); |
| 171 | 172 |
| 172 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 173 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 173 EXPECT_FALSE(state.BeginFrameNeeded()); | 174 EXPECT_FALSE(state.BeginFrameNeeded()); |
| 174 state.OnBeginImplFrame( | 175 state.OnBeginImplFrame(); |
| 175 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | |
| 176 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 176 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 177 state.OnBeginImplFrameDeadline(); | 177 state.OnBeginImplFrameDeadline(); |
| 178 } | 178 } |
| 179 | 179 |
| 180 // If commit requested, begin a main frame. | 180 // If commit requested, begin a main frame. |
| 181 { | 181 { |
| 182 StateMachine state(default_scheduler_settings); | 182 StateMachine state(default_scheduler_settings); |
| 183 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE); | 183 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE); |
| 184 state.SetCanStart(); | 184 state.SetCanStart(); |
| 185 state.UpdateState(state.NextAction()); | 185 state.UpdateState(state.NextAction()); |
| 186 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 186 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 187 state.SetNeedsRedraw(false); | 187 state.SetNeedsRedraw(false); |
| 188 state.SetVisible(true); | 188 state.SetVisible(true); |
| 189 state.SetNeedsCommit(); | 189 state.SetNeedsCommit(); |
| 190 | 190 |
| 191 EXPECT_TRUE(state.BeginFrameNeeded()); | 191 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 192 | 192 |
| 193 state.OnBeginImplFrame( | 193 state.OnBeginImplFrame(); |
| 194 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | |
| 195 EXPECT_ACTION_UPDATE_STATE( | 194 EXPECT_ACTION_UPDATE_STATE( |
| 196 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 195 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 197 } | 196 } |
| 198 | 197 |
| 199 // Begin the frame, make sure needs_commit and commit_state update correctly. | 198 // Begin the frame, make sure needs_commit and commit_state update correctly. |
| 200 { | 199 { |
| 201 StateMachine state(default_scheduler_settings); | 200 StateMachine state(default_scheduler_settings); |
| 202 state.SetCanStart(); | 201 state.SetCanStart(); |
| 203 state.UpdateState(state.NextAction()); | 202 state.UpdateState(state.NextAction()); |
| 204 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 203 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 217 scheduler_settings.main_frame_before_activation_enabled = true; | 216 scheduler_settings.main_frame_before_activation_enabled = true; |
| 218 StateMachine state(scheduler_settings); | 217 StateMachine state(scheduler_settings); |
| 219 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE); | 218 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE); |
| 220 SET_UP_STATE(state) | 219 SET_UP_STATE(state) |
| 221 state.SetNeedsRedraw(false); | 220 state.SetNeedsRedraw(false); |
| 222 state.SetNeedsCommit(); | 221 state.SetNeedsCommit(); |
| 223 | 222 |
| 224 EXPECT_TRUE(state.BeginFrameNeeded()); | 223 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 225 | 224 |
| 226 // Commit to the pending tree. | 225 // Commit to the pending tree. |
| 227 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 226 state.OnBeginImplFrame(); |
| 228 EXPECT_ACTION_UPDATE_STATE( | 227 EXPECT_ACTION_UPDATE_STATE( |
| 229 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 228 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 230 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 229 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 231 | 230 |
| 232 state.NotifyBeginMainFrameStarted(); | 231 state.NotifyBeginMainFrameStarted(); |
| 233 state.NotifyReadyToCommit(); | 232 state.NotifyReadyToCommit(); |
| 234 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 233 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
| 235 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 234 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 236 EXPECT_COMMIT_STATE(SchedulerStateMachine::COMMIT_STATE_IDLE); | 235 EXPECT_COMMIT_STATE(SchedulerStateMachine::COMMIT_STATE_IDLE); |
| 237 | 236 |
| 238 state.OnBeginImplFrameDeadline(); | 237 state.OnBeginImplFrameDeadline(); |
| 239 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 238 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 240 | 239 |
| 241 // Verify that the next commit starts while there is still a pending tree. | 240 // Verify that the next commit starts while there is still a pending tree. |
| 242 state.SetNeedsCommit(); | 241 state.SetNeedsCommit(); |
| 243 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 242 state.OnBeginImplFrame(); |
| 244 EXPECT_ACTION_UPDATE_STATE( | 243 EXPECT_ACTION_UPDATE_STATE( |
| 245 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 244 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 246 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 245 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 247 | 246 |
| 248 // Verify the pending commit doesn't overwrite the pending | 247 // Verify the pending commit doesn't overwrite the pending |
| 249 // tree until the pending tree has been activated. | 248 // tree until the pending tree has been activated. |
| 250 state.NotifyBeginMainFrameStarted(); | 249 state.NotifyBeginMainFrameStarted(); |
| 251 state.NotifyReadyToCommit(); | 250 state.NotifyReadyToCommit(); |
| 252 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 251 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 253 | 252 |
| (...skipping 16 matching lines...) Expand all Loading... |
| 270 } | 269 } |
| 271 | 270 |
| 272 TEST(SchedulerStateMachineTest, | 271 TEST(SchedulerStateMachineTest, |
| 273 TestFailedDrawForAnimationCheckerboardSetsNeedsCommitAndDoesNotDrawAgain) { | 272 TestFailedDrawForAnimationCheckerboardSetsNeedsCommitAndDoesNotDrawAgain) { |
| 274 SchedulerSettings default_scheduler_settings; | 273 SchedulerSettings default_scheduler_settings; |
| 275 StateMachine state(default_scheduler_settings); | 274 StateMachine state(default_scheduler_settings); |
| 276 SET_UP_STATE(state) | 275 SET_UP_STATE(state) |
| 277 state.SetNeedsRedraw(true); | 276 state.SetNeedsRedraw(true); |
| 278 EXPECT_TRUE(state.RedrawPending()); | 277 EXPECT_TRUE(state.RedrawPending()); |
| 279 EXPECT_TRUE(state.BeginFrameNeeded()); | 278 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 280 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 279 state.OnBeginImplFrame(); |
| 281 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 280 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 282 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 281 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 283 state.OnBeginImplFrameDeadline(); | 282 state.OnBeginImplFrameDeadline(); |
| 284 | 283 |
| 285 // We're drawing now. | 284 // We're drawing now. |
| 286 EXPECT_ACTION_UPDATE_STATE( | 285 EXPECT_ACTION_UPDATE_STATE( |
| 287 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 286 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 288 state.DidSwapBuffers(); | 287 state.DidSwapBuffers(); |
| 289 state.DidSwapBuffersComplete(); | 288 state.DidSwapBuffersComplete(); |
| 290 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 289 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 291 | 290 |
| 292 EXPECT_FALSE(state.RedrawPending()); | 291 EXPECT_FALSE(state.RedrawPending()); |
| 293 EXPECT_FALSE(state.CommitPending()); | 292 EXPECT_FALSE(state.CommitPending()); |
| 294 | 293 |
| 295 // Failing the draw makes us require a commit. | 294 // Failing the draw makes us require a commit. |
| 296 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); | 295 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); |
| 297 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 296 state.OnBeginImplFrame(); |
| 298 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 297 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 299 EXPECT_ACTION_UPDATE_STATE( | 298 EXPECT_ACTION_UPDATE_STATE( |
| 300 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 299 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 301 EXPECT_TRUE(state.RedrawPending()); | 300 EXPECT_TRUE(state.RedrawPending()); |
| 302 EXPECT_TRUE(state.CommitPending()); | 301 EXPECT_TRUE(state.CommitPending()); |
| 303 } | 302 } |
| 304 | 303 |
| 305 TEST(SchedulerStateMachineTest, TestFailedDrawForMissingHighResNeedsCommit) { | 304 TEST(SchedulerStateMachineTest, TestFailedDrawForMissingHighResNeedsCommit) { |
| 306 SchedulerSettings default_scheduler_settings; | 305 SchedulerSettings default_scheduler_settings; |
| 307 StateMachine state(default_scheduler_settings); | 306 StateMachine state(default_scheduler_settings); |
| 308 SET_UP_STATE(state) | 307 SET_UP_STATE(state) |
| 309 state.SetNeedsRedraw(true); | 308 state.SetNeedsRedraw(true); |
| 310 EXPECT_TRUE(state.RedrawPending()); | 309 EXPECT_TRUE(state.RedrawPending()); |
| 311 EXPECT_TRUE(state.BeginFrameNeeded()); | 310 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 312 | 311 |
| 313 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 312 state.OnBeginImplFrame(); |
| 314 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 313 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 315 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 314 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 316 state.OnBeginImplFrameDeadline(); | 315 state.OnBeginImplFrameDeadline(); |
| 317 EXPECT_ACTION_UPDATE_STATE( | 316 EXPECT_ACTION_UPDATE_STATE( |
| 318 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 317 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 319 state.DidSwapBuffers(); | 318 state.DidSwapBuffers(); |
| 320 state.DidSwapBuffersComplete(); | 319 state.DidSwapBuffersComplete(); |
| 321 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 320 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 322 EXPECT_FALSE(state.RedrawPending()); | 321 EXPECT_FALSE(state.RedrawPending()); |
| 323 EXPECT_FALSE(state.CommitPending()); | 322 EXPECT_FALSE(state.CommitPending()); |
| 324 | 323 |
| 325 // Missing high res content requires a commit (but not a redraw) | 324 // Missing high res content requires a commit (but not a redraw) |
| 326 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_MISSING_HIGH_RES_CONTENT); | 325 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_MISSING_HIGH_RES_CONTENT); |
| 327 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 326 state.OnBeginImplFrame(); |
| 328 EXPECT_ACTION_UPDATE_STATE( | 327 EXPECT_ACTION_UPDATE_STATE( |
| 329 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 328 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 330 EXPECT_FALSE(state.RedrawPending()); | 329 EXPECT_FALSE(state.RedrawPending()); |
| 331 EXPECT_TRUE(state.CommitPending()); | 330 EXPECT_TRUE(state.CommitPending()); |
| 332 } | 331 } |
| 333 | 332 |
| 334 TEST(SchedulerStateMachineTest, | 333 TEST(SchedulerStateMachineTest, |
| 335 TestsetNeedsRedrawDuringFailedDrawDoesNotRemoveNeedsRedraw) { | 334 TestsetNeedsRedrawDuringFailedDrawDoesNotRemoveNeedsRedraw) { |
| 336 SchedulerSettings default_scheduler_settings; | 335 SchedulerSettings default_scheduler_settings; |
| 337 StateMachine state(default_scheduler_settings); | 336 StateMachine state(default_scheduler_settings); |
| 338 SET_UP_STATE(state) | 337 SET_UP_STATE(state) |
| 339 state.SetNeedsRedraw(true); | 338 state.SetNeedsRedraw(true); |
| 340 EXPECT_TRUE(state.RedrawPending()); | 339 EXPECT_TRUE(state.RedrawPending()); |
| 341 EXPECT_TRUE(state.BeginFrameNeeded()); | 340 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 342 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 341 state.OnBeginImplFrame(); |
| 343 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 342 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 344 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 343 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 345 state.OnBeginImplFrameDeadline(); | 344 state.OnBeginImplFrameDeadline(); |
| 346 | 345 |
| 347 // We're drawing now. | 346 // We're drawing now. |
| 348 EXPECT_ACTION_UPDATE_STATE( | 347 EXPECT_ACTION_UPDATE_STATE( |
| 349 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 348 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 350 state.DidSwapBuffers(); | 349 state.DidSwapBuffers(); |
| 351 state.DidSwapBuffersComplete(); | 350 state.DidSwapBuffersComplete(); |
| 352 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 351 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 353 EXPECT_FALSE(state.RedrawPending()); | 352 EXPECT_FALSE(state.RedrawPending()); |
| 354 EXPECT_FALSE(state.CommitPending()); | 353 EXPECT_FALSE(state.CommitPending()); |
| 355 | 354 |
| 356 // While still in the same BeginMainFrame callback on the main thread, | 355 // While still in the same BeginMainFrame callback on the main thread, |
| 357 // set needs redraw again. This should not redraw. | 356 // set needs redraw again. This should not redraw. |
| 358 state.SetNeedsRedraw(true); | 357 state.SetNeedsRedraw(true); |
| 359 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 358 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 360 | 359 |
| 361 // Failing the draw for animation checkerboards makes us require a commit. | 360 // Failing the draw for animation checkerboards makes us require a commit. |
| 362 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); | 361 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); |
| 363 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 362 state.OnBeginImplFrame(); |
| 364 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 363 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 365 EXPECT_ACTION_UPDATE_STATE( | 364 EXPECT_ACTION_UPDATE_STATE( |
| 366 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 365 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 367 EXPECT_TRUE(state.RedrawPending()); | 366 EXPECT_TRUE(state.RedrawPending()); |
| 368 } | 367 } |
| 369 | 368 |
| 370 TEST(SchedulerStateMachineTest, | 369 TEST(SchedulerStateMachineTest, |
| 371 TestFailedDrawsEventuallyForceDrawAfterNextCommit) { | 370 TestFailedDrawsEventuallyForceDrawAfterNextCommit) { |
| 372 SchedulerSettings scheduler_settings; | 371 SchedulerSettings scheduler_settings; |
| 373 scheduler_settings.maximum_number_of_failed_draws_before_draw_is_forced_ = 1; | 372 scheduler_settings.maximum_number_of_failed_draws_before_draw_is_forced_ = 1; |
| 374 StateMachine state(scheduler_settings); | 373 StateMachine state(scheduler_settings); |
| 375 SET_UP_STATE(state) | 374 SET_UP_STATE(state) |
| 376 | 375 |
| 377 // Start a commit. | 376 // Start a commit. |
| 378 state.SetNeedsCommit(); | 377 state.SetNeedsCommit(); |
| 379 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 378 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 380 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 379 state.OnBeginImplFrame(); |
| 381 EXPECT_ACTION_UPDATE_STATE( | 380 EXPECT_ACTION_UPDATE_STATE( |
| 382 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 381 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 383 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 382 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 384 EXPECT_TRUE(state.CommitPending()); | 383 EXPECT_TRUE(state.CommitPending()); |
| 385 | 384 |
| 386 // Then initiate a draw. | 385 // Then initiate a draw. |
| 387 state.SetNeedsRedraw(true); | 386 state.SetNeedsRedraw(true); |
| 388 state.OnBeginImplFrameDeadline(); | 387 state.OnBeginImplFrameDeadline(); |
| 389 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 388 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 390 EXPECT_ACTION_UPDATE_STATE( | 389 EXPECT_ACTION_UPDATE_STATE( |
| 391 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 390 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 392 | 391 |
| 393 // Fail the draw. | 392 // Fail the draw. |
| 394 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); | 393 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); |
| 395 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 394 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 396 EXPECT_TRUE(state.BeginFrameNeeded()); | 395 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 397 EXPECT_TRUE(state.RedrawPending()); | 396 EXPECT_TRUE(state.RedrawPending()); |
| 398 // But the commit is ongoing. | 397 // But the commit is ongoing. |
| 399 EXPECT_TRUE(state.CommitPending()); | 398 EXPECT_TRUE(state.CommitPending()); |
| 400 | 399 |
| 401 // Finish the commit. Note, we should not yet be forcing a draw, but should | 400 // Finish the commit. Note, we should not yet be forcing a draw, but should |
| 402 // continue the commit as usual. | 401 // continue the commit as usual. |
| 403 state.NotifyBeginMainFrameStarted(); | 402 state.NotifyBeginMainFrameStarted(); |
| 404 state.NotifyReadyToCommit(); | 403 state.NotifyReadyToCommit(); |
| 405 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 404 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
| 406 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 405 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 407 EXPECT_TRUE(state.RedrawPending()); | 406 EXPECT_TRUE(state.RedrawPending()); |
| 408 | 407 |
| 409 // The redraw should be forced at the end of the next BeginImplFrame. | 408 // The redraw should be forced at the end of the next BeginImplFrame. |
| 410 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 409 state.OnBeginImplFrame(); |
| 411 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 410 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 412 EXPECT_ACTION_UPDATE_STATE( | 411 EXPECT_ACTION_UPDATE_STATE( |
| 413 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 412 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 414 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 413 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 415 state.OnBeginImplFrameDeadline(); | 414 state.OnBeginImplFrameDeadline(); |
| 416 EXPECT_ACTION_UPDATE_STATE( | 415 EXPECT_ACTION_UPDATE_STATE( |
| 417 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_FORCED); | 416 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_FORCED); |
| 418 state.DidSwapBuffers(); | 417 state.DidSwapBuffers(); |
| 419 state.DidSwapBuffersComplete(); | 418 state.DidSwapBuffersComplete(); |
| 420 } | 419 } |
| 421 | 420 |
| 422 TEST(SchedulerStateMachineTest, TestFailedDrawsDoNotRestartForcedDraw) { | 421 TEST(SchedulerStateMachineTest, TestFailedDrawsDoNotRestartForcedDraw) { |
| 423 SchedulerSettings scheduler_settings; | 422 SchedulerSettings scheduler_settings; |
| 424 int draw_limit = 1; | 423 int draw_limit = 1; |
| 425 scheduler_settings.maximum_number_of_failed_draws_before_draw_is_forced_ = | 424 scheduler_settings.maximum_number_of_failed_draws_before_draw_is_forced_ = |
| 426 draw_limit; | 425 draw_limit; |
| 427 scheduler_settings.impl_side_painting = true; | 426 scheduler_settings.impl_side_painting = true; |
| 428 StateMachine state(scheduler_settings); | 427 StateMachine state(scheduler_settings); |
| 429 SET_UP_STATE(state) | 428 SET_UP_STATE(state) |
| 430 | 429 |
| 431 // Start a commit. | 430 // Start a commit. |
| 432 state.SetNeedsCommit(); | 431 state.SetNeedsCommit(); |
| 433 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 432 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 434 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 433 state.OnBeginImplFrame(); |
| 435 EXPECT_ACTION_UPDATE_STATE( | 434 EXPECT_ACTION_UPDATE_STATE( |
| 436 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 435 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 437 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 436 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 438 EXPECT_TRUE(state.CommitPending()); | 437 EXPECT_TRUE(state.CommitPending()); |
| 439 | 438 |
| 440 // Then initiate a draw. | 439 // Then initiate a draw. |
| 441 state.SetNeedsRedraw(true); | 440 state.SetNeedsRedraw(true); |
| 442 state.OnBeginImplFrameDeadline(); | 441 state.OnBeginImplFrameDeadline(); |
| 443 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 442 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 444 EXPECT_ACTION_UPDATE_STATE( | 443 EXPECT_ACTION_UPDATE_STATE( |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 477 } | 476 } |
| 478 | 477 |
| 479 TEST(SchedulerStateMachineTest, TestFailedDrawIsRetriedInNextBeginImplFrame) { | 478 TEST(SchedulerStateMachineTest, TestFailedDrawIsRetriedInNextBeginImplFrame) { |
| 480 SchedulerSettings default_scheduler_settings; | 479 SchedulerSettings default_scheduler_settings; |
| 481 StateMachine state(default_scheduler_settings); | 480 StateMachine state(default_scheduler_settings); |
| 482 SET_UP_STATE(state) | 481 SET_UP_STATE(state) |
| 483 | 482 |
| 484 // Start a draw. | 483 // Start a draw. |
| 485 state.SetNeedsRedraw(true); | 484 state.SetNeedsRedraw(true); |
| 486 EXPECT_TRUE(state.BeginFrameNeeded()); | 485 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 487 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 486 state.OnBeginImplFrame(); |
| 488 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 487 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 489 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 488 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 490 state.OnBeginImplFrameDeadline(); | 489 state.OnBeginImplFrameDeadline(); |
| 491 EXPECT_TRUE(state.RedrawPending()); | 490 EXPECT_TRUE(state.RedrawPending()); |
| 492 EXPECT_ACTION_UPDATE_STATE( | 491 EXPECT_ACTION_UPDATE_STATE( |
| 493 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 492 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 494 | 493 |
| 495 // Failing the draw for animation checkerboards makes us require a commit. | 494 // Failing the draw for animation checkerboards makes us require a commit. |
| 496 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); | 495 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); |
| 497 EXPECT_ACTION_UPDATE_STATE( | 496 EXPECT_ACTION_UPDATE_STATE( |
| 498 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 497 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 499 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 498 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 500 EXPECT_TRUE(state.RedrawPending()); | 499 EXPECT_TRUE(state.RedrawPending()); |
| 501 | 500 |
| 502 // We should not be trying to draw again now, but we have a commit pending. | 501 // We should not be trying to draw again now, but we have a commit pending. |
| 503 EXPECT_TRUE(state.BeginFrameNeeded()); | 502 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 504 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 503 state.OnBeginImplFrame(); |
| 505 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 504 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 506 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 505 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 507 | 506 |
| 508 // We should try to draw again at the end of the next BeginImplFrame on | 507 // We should try to draw again at the end of the next BeginImplFrame on |
| 509 // the impl thread. | 508 // the impl thread. |
| 510 state.OnBeginImplFrameDeadline(); | 509 state.OnBeginImplFrameDeadline(); |
| 511 EXPECT_ACTION_UPDATE_STATE( | 510 EXPECT_ACTION_UPDATE_STATE( |
| 512 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 511 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 513 state.DidSwapBuffers(); | 512 state.DidSwapBuffers(); |
| 514 state.DidSwapBuffersComplete(); | 513 state.DidSwapBuffersComplete(); |
| 515 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 514 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 516 } | 515 } |
| 517 | 516 |
| 518 TEST(SchedulerStateMachineTest, TestDoestDrawTwiceInSameFrame) { | 517 TEST(SchedulerStateMachineTest, TestDoestDrawTwiceInSameFrame) { |
| 519 SchedulerSettings default_scheduler_settings; | 518 SchedulerSettings default_scheduler_settings; |
| 520 StateMachine state(default_scheduler_settings); | 519 StateMachine state(default_scheduler_settings); |
| 521 SET_UP_STATE(state) | 520 SET_UP_STATE(state) |
| 522 state.SetNeedsRedraw(true); | 521 state.SetNeedsRedraw(true); |
| 523 | 522 |
| 524 // Draw the first frame. | 523 // Draw the first frame. |
| 525 EXPECT_TRUE(state.BeginFrameNeeded()); | 524 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 526 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 525 state.OnBeginImplFrame(); |
| 527 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 526 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 528 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 527 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 529 | 528 |
| 530 state.OnBeginImplFrameDeadline(); | 529 state.OnBeginImplFrameDeadline(); |
| 531 EXPECT_ACTION_UPDATE_STATE( | 530 EXPECT_ACTION_UPDATE_STATE( |
| 532 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 531 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 533 state.DidSwapBuffers(); | 532 state.DidSwapBuffers(); |
| 534 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); | 533 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); |
| 535 state.DidSwapBuffersComplete(); | 534 state.DidSwapBuffersComplete(); |
| 536 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 535 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 537 | 536 |
| 538 // Before the next BeginImplFrame, set needs redraw again. | 537 // Before the next BeginImplFrame, set needs redraw again. |
| 539 // This should not redraw until the next BeginImplFrame. | 538 // This should not redraw until the next BeginImplFrame. |
| 540 state.SetNeedsRedraw(true); | 539 state.SetNeedsRedraw(true); |
| 541 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 540 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 542 | 541 |
| 543 // Move to another frame. This should now draw. | 542 // Move to another frame. This should now draw. |
| 544 EXPECT_TRUE(state.BeginFrameNeeded()); | 543 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 545 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 544 state.OnBeginImplFrame(); |
| 546 | 545 |
| 547 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 546 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 548 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 547 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 549 | 548 |
| 550 state.OnBeginImplFrameDeadline(); | 549 state.OnBeginImplFrameDeadline(); |
| 551 EXPECT_ACTION_UPDATE_STATE( | 550 EXPECT_ACTION_UPDATE_STATE( |
| 552 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 551 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 553 state.DidSwapBuffers(); | 552 state.DidSwapBuffers(); |
| 554 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); | 553 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); |
| 555 state.DidSwapBuffersComplete(); | 554 state.DidSwapBuffersComplete(); |
| (...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 670 // There shouldn't be any drawing regardless of BeginImplFrame. | 669 // There shouldn't be any drawing regardless of BeginImplFrame. |
| 671 for (size_t j = 0; j < 2; ++j) { | 670 for (size_t j = 0; j < 2; ++j) { |
| 672 StateMachine state(default_scheduler_settings); | 671 StateMachine state(default_scheduler_settings); |
| 673 state.SetCanStart(); | 672 state.SetCanStart(); |
| 674 state.UpdateState(state.NextAction()); | 673 state.UpdateState(state.NextAction()); |
| 675 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 674 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 676 state.SetCommitState(all_commit_states[i]); | 675 state.SetCommitState(all_commit_states[i]); |
| 677 state.SetVisible(false); | 676 state.SetVisible(false); |
| 678 state.SetNeedsRedraw(true); | 677 state.SetNeedsRedraw(true); |
| 679 if (j == 1) | 678 if (j == 1) |
| 680 state.OnBeginImplFrame( | 679 state.OnBeginImplFrame(); |
| 681 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | |
| 682 | 680 |
| 683 state.SetCanDraw(false); | 681 state.SetCanDraw(false); |
| 684 EXPECT_NE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE, | 682 EXPECT_NE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE, |
| 685 state.NextAction()); | 683 state.NextAction()); |
| 686 } | 684 } |
| 687 } | 685 } |
| 688 } | 686 } |
| 689 | 687 |
| 690 TEST(SchedulerStateMachineTest, | 688 TEST(SchedulerStateMachineTest, |
| 691 TestCanRedrawWithWaitingForFirstDrawMakesProgress) { | 689 TestCanRedrawWithWaitingForFirstDrawMakesProgress) { |
| 692 SchedulerSettings default_scheduler_settings; | 690 SchedulerSettings default_scheduler_settings; |
| 693 StateMachine state(default_scheduler_settings); | 691 StateMachine state(default_scheduler_settings); |
| 694 state.SetCanStart(); | 692 state.SetCanStart(); |
| 695 state.UpdateState(state.NextAction()); | 693 state.UpdateState(state.NextAction()); |
| 696 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 694 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 697 | 695 |
| 698 state.SetActiveTreeNeedsFirstDraw(true); | 696 state.SetActiveTreeNeedsFirstDraw(true); |
| 699 state.SetNeedsCommit(); | 697 state.SetNeedsCommit(); |
| 700 state.SetNeedsRedraw(true); | 698 state.SetNeedsRedraw(true); |
| 701 state.SetVisible(true); | 699 state.SetVisible(true); |
| 702 state.SetCanDraw(false); | 700 state.SetCanDraw(false); |
| 703 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 701 state.OnBeginImplFrame(); |
| 704 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 702 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 705 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT); | 703 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT); |
| 706 EXPECT_ACTION_UPDATE_STATE( | 704 EXPECT_ACTION_UPDATE_STATE( |
| 707 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 705 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 708 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 706 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 709 state.NotifyBeginMainFrameStarted(); | 707 state.NotifyBeginMainFrameStarted(); |
| 710 state.NotifyReadyToCommit(); | 708 state.NotifyReadyToCommit(); |
| 711 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 709 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
| 712 state.OnBeginImplFrameDeadline(); | 710 state.OnBeginImplFrameDeadline(); |
| 713 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 711 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 714 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT); | 712 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT); |
| 715 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 713 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 716 } | 714 } |
| 717 | 715 |
| 718 TEST(SchedulerStateMachineTest, TestSetNeedsCommitIsNotLost) { | 716 TEST(SchedulerStateMachineTest, TestSetNeedsCommitIsNotLost) { |
| 719 SchedulerSettings scheduler_settings; | 717 SchedulerSettings scheduler_settings; |
| 720 StateMachine state(scheduler_settings); | 718 StateMachine state(scheduler_settings); |
| 721 SET_UP_STATE(state) | 719 SET_UP_STATE(state) |
| 722 state.SetNeedsCommit(); | 720 state.SetNeedsCommit(); |
| 723 | 721 |
| 724 EXPECT_TRUE(state.BeginFrameNeeded()); | 722 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 725 | 723 |
| 726 // Begin the frame. | 724 // Begin the frame. |
| 727 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 725 state.OnBeginImplFrame(); |
| 728 EXPECT_ACTION_UPDATE_STATE( | 726 EXPECT_ACTION_UPDATE_STATE( |
| 729 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 727 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 730 EXPECT_COMMIT_STATE( | 728 EXPECT_COMMIT_STATE( |
| 731 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT); | 729 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT); |
| 732 | 730 |
| 733 // Now, while the frame is in progress, set another commit. | 731 // Now, while the frame is in progress, set another commit. |
| 734 state.SetNeedsCommit(); | 732 state.SetNeedsCommit(); |
| 735 EXPECT_TRUE(state.NeedsCommit()); | 733 EXPECT_TRUE(state.NeedsCommit()); |
| 736 | 734 |
| 737 // Let the frame finish. | 735 // Let the frame finish. |
| (...skipping 13 matching lines...) Expand all Loading... |
| 751 | 749 |
| 752 state.OnBeginImplFrameDeadline(); | 750 state.OnBeginImplFrameDeadline(); |
| 753 EXPECT_IMPL_FRAME_STATE( | 751 EXPECT_IMPL_FRAME_STATE( |
| 754 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE); | 752 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE); |
| 755 EXPECT_ACTION(SchedulerStateMachine::ACTION_COMMIT); | 753 EXPECT_ACTION(SchedulerStateMachine::ACTION_COMMIT); |
| 756 | 754 |
| 757 state.OnBeginImplFrameIdle(); | 755 state.OnBeginImplFrameIdle(); |
| 758 EXPECT_IMPL_FRAME_STATE(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE); | 756 EXPECT_IMPL_FRAME_STATE(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE); |
| 759 EXPECT_ACTION(SchedulerStateMachine::ACTION_COMMIT); | 757 EXPECT_ACTION(SchedulerStateMachine::ACTION_COMMIT); |
| 760 | 758 |
| 761 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 759 state.OnBeginImplFrame(); |
| 762 EXPECT_IMPL_FRAME_STATE( | 760 EXPECT_IMPL_FRAME_STATE( |
| 763 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING); | 761 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING); |
| 764 EXPECT_ACTION(SchedulerStateMachine::ACTION_COMMIT); | 762 EXPECT_ACTION(SchedulerStateMachine::ACTION_COMMIT); |
| 765 | 763 |
| 766 // Finish the commit, then make sure we start the next commit immediately | 764 // Finish the commit, then make sure we start the next commit immediately |
| 767 // and draw on the next BeginImplFrame. | 765 // and draw on the next BeginImplFrame. |
| 768 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 766 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
| 769 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 767 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 770 EXPECT_ACTION_UPDATE_STATE( | 768 EXPECT_ACTION_UPDATE_STATE( |
| 771 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 769 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 784 | 782 |
| 785 TEST(SchedulerStateMachineTest, TestFullCycle) { | 783 TEST(SchedulerStateMachineTest, TestFullCycle) { |
| 786 SchedulerSettings default_scheduler_settings; | 784 SchedulerSettings default_scheduler_settings; |
| 787 StateMachine state(default_scheduler_settings); | 785 StateMachine state(default_scheduler_settings); |
| 788 SET_UP_STATE(state) | 786 SET_UP_STATE(state) |
| 789 | 787 |
| 790 // Start clean and set commit. | 788 // Start clean and set commit. |
| 791 state.SetNeedsCommit(); | 789 state.SetNeedsCommit(); |
| 792 | 790 |
| 793 // Begin the frame. | 791 // Begin the frame. |
| 794 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 792 state.OnBeginImplFrame(); |
| 795 EXPECT_ACTION_UPDATE_STATE( | 793 EXPECT_ACTION_UPDATE_STATE( |
| 796 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 794 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 797 EXPECT_COMMIT_STATE( | 795 EXPECT_COMMIT_STATE( |
| 798 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT); | 796 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT); |
| 799 EXPECT_FALSE(state.NeedsCommit()); | 797 EXPECT_FALSE(state.NeedsCommit()); |
| 800 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 798 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 801 | 799 |
| 802 // Tell the scheduler the frame finished. | 800 // Tell the scheduler the frame finished. |
| 803 state.NotifyBeginMainFrameStarted(); | 801 state.NotifyBeginMainFrameStarted(); |
| 804 state.NotifyReadyToCommit(); | 802 state.NotifyReadyToCommit(); |
| (...skipping 25 matching lines...) Expand all Loading... |
| 830 TEST(SchedulerStateMachineTest, TestFullCycleWithMainThreadLowLatencyMode) { | 828 TEST(SchedulerStateMachineTest, TestFullCycleWithMainThreadLowLatencyMode) { |
| 831 SchedulerSettings scheduler_settings; | 829 SchedulerSettings scheduler_settings; |
| 832 scheduler_settings.main_thread_should_always_be_low_latency = true; | 830 scheduler_settings.main_thread_should_always_be_low_latency = true; |
| 833 StateMachine state(scheduler_settings); | 831 StateMachine state(scheduler_settings); |
| 834 SET_UP_STATE(state) | 832 SET_UP_STATE(state) |
| 835 | 833 |
| 836 // Start clean and set commit. | 834 // Start clean and set commit. |
| 837 state.SetNeedsCommit(); | 835 state.SetNeedsCommit(); |
| 838 | 836 |
| 839 // Begin the frame. | 837 // Begin the frame. |
| 840 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 838 state.OnBeginImplFrame(); |
| 841 EXPECT_ACTION_UPDATE_STATE( | 839 EXPECT_ACTION_UPDATE_STATE( |
| 842 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 840 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 843 EXPECT_COMMIT_STATE( | 841 EXPECT_COMMIT_STATE( |
| 844 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT); | 842 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT); |
| 845 EXPECT_FALSE(state.NeedsCommit()); | 843 EXPECT_FALSE(state.NeedsCommit()); |
| 846 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 844 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 847 | 845 |
| 848 // Tell the scheduler the frame finished. | 846 // Tell the scheduler the frame finished. |
| 849 state.NotifyBeginMainFrameStarted(); | 847 state.NotifyBeginMainFrameStarted(); |
| 850 state.NotifyReadyToCommit(); | 848 state.NotifyReadyToCommit(); |
| 851 EXPECT_COMMIT_STATE(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT); | 849 EXPECT_COMMIT_STATE(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT); |
| 852 | 850 |
| 853 // Commit. | 851 // Commit. |
| 854 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 852 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
| 855 EXPECT_TRUE(state.active_tree_needs_first_draw()); | 853 EXPECT_TRUE(state.active_tree_needs_first_draw()); |
| 856 EXPECT_TRUE(state.needs_redraw()); | 854 EXPECT_TRUE(state.needs_redraw()); |
| 857 | 855 |
| 858 // Now commit should wait for draw. | 856 // Now commit should wait for draw. |
| 859 EXPECT_COMMIT_STATE(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_DRAW); | 857 EXPECT_COMMIT_STATE(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_DRAW); |
| 860 | 858 |
| 861 // Swap throttled. Do not draw. | 859 // Swap throttled. Do not draw. |
| 862 state.DidSwapBuffers(); | 860 state.DidSwapBuffers(); |
| 863 state.OnBeginImplFrameDeadline(); | 861 state.OnBeginImplFrameDeadline(); |
| 864 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 862 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 865 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 863 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 866 state.DidSwapBuffersComplete(); | 864 state.DidSwapBuffersComplete(); |
| 867 | 865 |
| 868 // Haven't draw since last commit, do not begin new main frame. | 866 // Haven't draw since last commit, do not begin new main frame. |
| 869 state.SetNeedsCommit(); | 867 state.SetNeedsCommit(); |
| 870 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 868 state.OnBeginImplFrame(); |
| 871 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 869 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 872 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 870 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 873 | 871 |
| 874 // At BeginImplFrame deadline, draw. | 872 // At BeginImplFrame deadline, draw. |
| 875 state.OnBeginImplFrameDeadline(); | 873 state.OnBeginImplFrameDeadline(); |
| 876 EXPECT_ACTION_UPDATE_STATE( | 874 EXPECT_ACTION_UPDATE_STATE( |
| 877 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 875 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 878 state.DidSwapBuffers(); | 876 state.DidSwapBuffers(); |
| 879 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); | 877 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); |
| 880 state.DidSwapBuffersComplete(); | 878 state.DidSwapBuffersComplete(); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 891 SchedulerSettings scheduler_settings; | 889 SchedulerSettings scheduler_settings; |
| 892 scheduler_settings.main_thread_should_always_be_low_latency = true; | 890 scheduler_settings.main_thread_should_always_be_low_latency = true; |
| 893 scheduler_settings.impl_side_painting = true; | 891 scheduler_settings.impl_side_painting = true; |
| 894 StateMachine state(scheduler_settings); | 892 StateMachine state(scheduler_settings); |
| 895 SET_UP_STATE(state) | 893 SET_UP_STATE(state) |
| 896 | 894 |
| 897 // Start clean and set commit. | 895 // Start clean and set commit. |
| 898 state.SetNeedsCommit(); | 896 state.SetNeedsCommit(); |
| 899 | 897 |
| 900 // Begin the frame. | 898 // Begin the frame. |
| 901 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 899 state.OnBeginImplFrame(); |
| 902 EXPECT_ACTION_UPDATE_STATE( | 900 EXPECT_ACTION_UPDATE_STATE( |
| 903 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 901 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 904 EXPECT_COMMIT_STATE( | 902 EXPECT_COMMIT_STATE( |
| 905 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT); | 903 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT); |
| 906 EXPECT_FALSE(state.NeedsCommit()); | 904 EXPECT_FALSE(state.NeedsCommit()); |
| 907 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 905 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 908 | 906 |
| 909 // Tell the scheduler the frame finished. | 907 // Tell the scheduler the frame finished. |
| 910 state.NotifyBeginMainFrameStarted(); | 908 state.NotifyBeginMainFrameStarted(); |
| 911 state.NotifyReadyToCommit(); | 909 state.NotifyReadyToCommit(); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 922 // frame, and still block BeginMainFrame. | 920 // frame, and still block BeginMainFrame. |
| 923 state.SetNeedsRedraw(true); | 921 state.SetNeedsRedraw(true); |
| 924 state.SetNeedsCommit(); | 922 state.SetNeedsCommit(); |
| 925 state.OnBeginImplFrameDeadline(); | 923 state.OnBeginImplFrameDeadline(); |
| 926 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 924 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 927 EXPECT_ACTION_UPDATE_STATE( | 925 EXPECT_ACTION_UPDATE_STATE( |
| 928 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 926 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 929 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 927 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 930 | 928 |
| 931 // Cannot BeginMainFrame yet since last commit is not yet activated and drawn. | 929 // Cannot BeginMainFrame yet since last commit is not yet activated and drawn. |
| 932 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 930 state.OnBeginImplFrame(); |
| 933 EXPECT_COMMIT_STATE( | 931 EXPECT_COMMIT_STATE( |
| 934 SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_ACTIVATION); | 932 SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_ACTIVATION); |
| 935 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 933 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 936 | 934 |
| 937 // Now activate sync tree. | 935 // Now activate sync tree. |
| 938 state.NotifyReadyToActivate(); | 936 state.NotifyReadyToActivate(); |
| 939 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); | 937 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); |
| 940 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 938 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 941 EXPECT_TRUE(state.active_tree_needs_first_draw()); | 939 EXPECT_TRUE(state.active_tree_needs_first_draw()); |
| 942 EXPECT_TRUE(state.needs_redraw()); | 940 EXPECT_TRUE(state.needs_redraw()); |
| 943 EXPECT_COMMIT_STATE(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_DRAW); | 941 EXPECT_COMMIT_STATE(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_DRAW); |
| 944 | 942 |
| 945 // Swap throttled. Do not draw. | 943 // Swap throttled. Do not draw. |
| 946 state.DidSwapBuffers(); | 944 state.DidSwapBuffers(); |
| 947 state.OnBeginImplFrameDeadline(); | 945 state.OnBeginImplFrameDeadline(); |
| 948 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 946 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 949 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 947 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 950 state.DidSwapBuffersComplete(); | 948 state.DidSwapBuffersComplete(); |
| 951 | 949 |
| 952 // Haven't draw since last commit, do not begin new main frame. | 950 // Haven't draw since last commit, do not begin new main frame. |
| 953 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 951 state.OnBeginImplFrame(); |
| 954 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 952 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 955 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 953 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 956 | 954 |
| 957 // At BeginImplFrame deadline, draw. This draws unblocks BeginMainFrame. | 955 // At BeginImplFrame deadline, draw. This draws unblocks BeginMainFrame. |
| 958 state.OnBeginImplFrameDeadline(); | 956 state.OnBeginImplFrameDeadline(); |
| 959 EXPECT_ACTION_UPDATE_STATE( | 957 EXPECT_ACTION_UPDATE_STATE( |
| 960 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 958 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 961 state.DidSwapBuffers(); | 959 state.DidSwapBuffers(); |
| 962 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); | 960 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); |
| 963 state.DidSwapBuffersComplete(); | 961 state.DidSwapBuffersComplete(); |
| 964 | 962 |
| 965 // Now will be able to start main frame. | 963 // Now will be able to start main frame. |
| 966 EXPECT_COMMIT_STATE(SchedulerStateMachine::COMMIT_STATE_IDLE); | 964 EXPECT_COMMIT_STATE(SchedulerStateMachine::COMMIT_STATE_IDLE); |
| 967 EXPECT_FALSE(state.needs_redraw()); | 965 EXPECT_FALSE(state.needs_redraw()); |
| 968 EXPECT_ACTION_UPDATE_STATE( | 966 EXPECT_ACTION_UPDATE_STATE( |
| 969 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 967 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 970 } | 968 } |
| 971 | 969 |
| 972 TEST(SchedulerStateMachineTest, TestFullCycleWithCommitRequestInbetween) { | 970 TEST(SchedulerStateMachineTest, TestFullCycleWithCommitRequestInbetween) { |
| 973 SchedulerSettings default_scheduler_settings; | 971 SchedulerSettings default_scheduler_settings; |
| 974 StateMachine state(default_scheduler_settings); | 972 StateMachine state(default_scheduler_settings); |
| 975 SET_UP_STATE(state) | 973 SET_UP_STATE(state) |
| 976 | 974 |
| 977 // Start clean and set commit. | 975 // Start clean and set commit. |
| 978 state.SetNeedsCommit(); | 976 state.SetNeedsCommit(); |
| 979 | 977 |
| 980 // Begin the frame. | 978 // Begin the frame. |
| 981 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 979 state.OnBeginImplFrame(); |
| 982 EXPECT_ACTION_UPDATE_STATE( | 980 EXPECT_ACTION_UPDATE_STATE( |
| 983 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 981 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 984 EXPECT_COMMIT_STATE( | 982 EXPECT_COMMIT_STATE( |
| 985 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT); | 983 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT); |
| 986 EXPECT_FALSE(state.NeedsCommit()); | 984 EXPECT_FALSE(state.NeedsCommit()); |
| 987 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 985 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 988 | 986 |
| 989 // Request another commit while the commit is in flight. | 987 // Request another commit while the commit is in flight. |
| 990 state.SetNeedsCommit(); | 988 state.SetNeedsCommit(); |
| 991 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 989 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 1011 state.DidSwapBuffers(); | 1009 state.DidSwapBuffers(); |
| 1012 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); | 1010 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); |
| 1013 state.DidSwapBuffersComplete(); | 1011 state.DidSwapBuffersComplete(); |
| 1014 | 1012 |
| 1015 // Should be synchronized, no draw needed, no action needed. | 1013 // Should be synchronized, no draw needed, no action needed. |
| 1016 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1014 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1017 EXPECT_COMMIT_STATE(SchedulerStateMachine::COMMIT_STATE_IDLE); | 1015 EXPECT_COMMIT_STATE(SchedulerStateMachine::COMMIT_STATE_IDLE); |
| 1018 EXPECT_FALSE(state.needs_redraw()); | 1016 EXPECT_FALSE(state.needs_redraw()); |
| 1019 | 1017 |
| 1020 // Next BeginImplFrame should initiate second commit. | 1018 // Next BeginImplFrame should initiate second commit. |
| 1021 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 1019 state.OnBeginImplFrame(); |
| 1022 EXPECT_ACTION_UPDATE_STATE( | 1020 EXPECT_ACTION_UPDATE_STATE( |
| 1023 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1021 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 1024 } | 1022 } |
| 1025 | 1023 |
| 1026 TEST(SchedulerStateMachineTest, TestRequestCommitInvisible) { | 1024 TEST(SchedulerStateMachineTest, TestRequestCommitInvisible) { |
| 1027 SchedulerSettings default_scheduler_settings; | 1025 SchedulerSettings default_scheduler_settings; |
| 1028 StateMachine state(default_scheduler_settings); | 1026 StateMachine state(default_scheduler_settings); |
| 1029 state.SetCanStart(); | 1027 state.SetCanStart(); |
| 1030 state.UpdateState(state.NextAction()); | 1028 state.UpdateState(state.NextAction()); |
| 1031 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 1029 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 1032 state.SetNeedsCommit(); | 1030 state.SetNeedsCommit(); |
| 1033 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1031 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1034 } | 1032 } |
| 1035 | 1033 |
| 1036 // See ThreadProxy::BeginMainFrame "EarlyOut_NotVisible" / | 1034 // See ThreadProxy::BeginMainFrame "EarlyOut_NotVisible" / |
| 1037 // "EarlyOut_OutputSurfaceLost" cases. | 1035 // "EarlyOut_OutputSurfaceLost" cases. |
| 1038 TEST(SchedulerStateMachineTest, TestAbortBeginMainFrameBecauseInvisible) { | 1036 TEST(SchedulerStateMachineTest, TestAbortBeginMainFrameBecauseInvisible) { |
| 1039 SchedulerSettings default_scheduler_settings; | 1037 SchedulerSettings default_scheduler_settings; |
| 1040 StateMachine state(default_scheduler_settings); | 1038 StateMachine state(default_scheduler_settings); |
| 1041 SET_UP_STATE(state) | 1039 SET_UP_STATE(state) |
| 1042 | 1040 |
| 1043 // Start clean and set commit. | 1041 // Start clean and set commit. |
| 1044 state.SetNeedsCommit(); | 1042 state.SetNeedsCommit(); |
| 1045 | 1043 |
| 1046 // Begin the frame while visible. | 1044 // Begin the frame while visible. |
| 1047 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 1045 state.OnBeginImplFrame(); |
| 1048 EXPECT_ACTION_UPDATE_STATE( | 1046 EXPECT_ACTION_UPDATE_STATE( |
| 1049 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1047 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 1050 EXPECT_COMMIT_STATE( | 1048 EXPECT_COMMIT_STATE( |
| 1051 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT); | 1049 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT); |
| 1052 EXPECT_FALSE(state.NeedsCommit()); | 1050 EXPECT_FALSE(state.NeedsCommit()); |
| 1053 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1051 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1054 | 1052 |
| 1055 // Become invisible and abort BeginMainFrame. | 1053 // Become invisible and abort BeginMainFrame. |
| 1056 state.SetVisible(false); | 1054 state.SetVisible(false); |
| 1057 state.BeginMainFrameAborted(CommitEarlyOutReason::ABORTED_NOT_VISIBLE); | 1055 state.BeginMainFrameAborted(CommitEarlyOutReason::ABORTED_NOT_VISIBLE); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 1071 // Become visible again. | 1069 // Become visible again. |
| 1072 state.SetVisible(true); | 1070 state.SetVisible(true); |
| 1073 | 1071 |
| 1074 // Although we have aborted on this frame and haven't cancelled the commit | 1072 // Although we have aborted on this frame and haven't cancelled the commit |
| 1075 // (i.e. need another), don't send another BeginMainFrame yet. | 1073 // (i.e. need another), don't send another BeginMainFrame yet. |
| 1076 EXPECT_COMMIT_STATE(SchedulerStateMachine::COMMIT_STATE_IDLE); | 1074 EXPECT_COMMIT_STATE(SchedulerStateMachine::COMMIT_STATE_IDLE); |
| 1077 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); | 1075 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); |
| 1078 EXPECT_TRUE(state.NeedsCommit()); | 1076 EXPECT_TRUE(state.NeedsCommit()); |
| 1079 | 1077 |
| 1080 // Start a new frame. | 1078 // Start a new frame. |
| 1081 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 1079 state.OnBeginImplFrame(); |
| 1082 EXPECT_ACTION_UPDATE_STATE( | 1080 EXPECT_ACTION_UPDATE_STATE( |
| 1083 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1081 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 1084 | 1082 |
| 1085 // We should be starting the commit now. | 1083 // We should be starting the commit now. |
| 1086 EXPECT_COMMIT_STATE( | 1084 EXPECT_COMMIT_STATE( |
| 1087 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT); | 1085 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT); |
| 1088 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1086 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1089 } | 1087 } |
| 1090 | 1088 |
| 1091 // See ThreadProxy::BeginMainFrame "EarlyOut_NoUpdates" case. | 1089 // See ThreadProxy::BeginMainFrame "EarlyOut_NoUpdates" case. |
| 1092 TEST(SchedulerStateMachineTest, TestAbortBeginMainFrameBecauseCommitNotNeeded) { | 1090 TEST(SchedulerStateMachineTest, TestAbortBeginMainFrameBecauseCommitNotNeeded) { |
| 1093 SchedulerSettings default_scheduler_settings; | 1091 SchedulerSettings default_scheduler_settings; |
| 1094 StateMachine state(default_scheduler_settings); | 1092 StateMachine state(default_scheduler_settings); |
| 1095 state.SetCanStart(); | 1093 state.SetCanStart(); |
| 1096 state.UpdateState(state.NextAction()); | 1094 state.UpdateState(state.NextAction()); |
| 1097 state.DidCreateAndInitializeOutputSurface(); | 1095 state.DidCreateAndInitializeOutputSurface(); |
| 1098 state.SetVisible(true); | 1096 state.SetVisible(true); |
| 1099 state.SetCanDraw(true); | 1097 state.SetCanDraw(true); |
| 1100 | 1098 |
| 1101 // Get into a begin frame / commit state. | 1099 // Get into a begin frame / commit state. |
| 1102 state.SetNeedsCommit(); | 1100 state.SetNeedsCommit(); |
| 1103 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 1101 state.OnBeginImplFrame(); |
| 1104 EXPECT_ACTION_UPDATE_STATE( | 1102 EXPECT_ACTION_UPDATE_STATE( |
| 1105 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1103 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 1106 EXPECT_COMMIT_STATE( | 1104 EXPECT_COMMIT_STATE( |
| 1107 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT); | 1105 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT); |
| 1108 EXPECT_FALSE(state.NeedsCommit()); | 1106 EXPECT_FALSE(state.NeedsCommit()); |
| 1109 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); | 1107 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); |
| 1110 | 1108 |
| 1111 // Abort the commit, true means that the BeginMainFrame was sent but there | 1109 // Abort the commit, true means that the BeginMainFrame was sent but there |
| 1112 // was no work to do on the main thread. | 1110 // was no work to do on the main thread. |
| 1113 state.BeginMainFrameAborted(CommitEarlyOutReason::FINISHED_NO_UPDATES); | 1111 state.BeginMainFrameAborted(CommitEarlyOutReason::FINISHED_NO_UPDATES); |
| 1114 | 1112 |
| 1115 // NeedsCommit should now be false because the commit was actually handled. | 1113 // NeedsCommit should now be false because the commit was actually handled. |
| 1116 EXPECT_FALSE(state.NeedsCommit()); | 1114 EXPECT_FALSE(state.NeedsCommit()); |
| 1117 | 1115 |
| 1118 // Even though the commit was aborted, we still expect to draw the new frame. | 1116 // Even though the commit was aborted, we still expect to draw the new frame. |
| 1119 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1117 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 1120 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1118 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1121 state.OnBeginImplFrameDeadline(); | 1119 state.OnBeginImplFrameDeadline(); |
| 1122 EXPECT_ACTION_UPDATE_STATE( | 1120 EXPECT_ACTION_UPDATE_STATE( |
| 1123 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1121 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 1124 state.DidSwapBuffers(); | 1122 state.DidSwapBuffers(); |
| 1125 state.DidSwapBuffersComplete(); | 1123 state.DidSwapBuffersComplete(); |
| 1126 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1124 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1127 | 1125 |
| 1128 // Verify another commit doesn't start on another frame either. | 1126 // Verify another commit doesn't start on another frame either. |
| 1129 EXPECT_FALSE(state.NeedsCommit()); | 1127 EXPECT_FALSE(state.NeedsCommit()); |
| 1130 EXPECT_COMMIT_STATE(SchedulerStateMachine::COMMIT_STATE_IDLE); | 1128 EXPECT_COMMIT_STATE(SchedulerStateMachine::COMMIT_STATE_IDLE); |
| 1131 | 1129 |
| 1132 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 1130 state.OnBeginImplFrame(); |
| 1133 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1131 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1134 state.OnBeginImplFrameDeadline(); | 1132 state.OnBeginImplFrameDeadline(); |
| 1135 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1133 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1136 | 1134 |
| 1137 // Verify another commit can start if requested, though. | 1135 // Verify another commit can start if requested, though. |
| 1138 state.SetNeedsCommit(); | 1136 state.SetNeedsCommit(); |
| 1139 EXPECT_COMMIT_STATE(SchedulerStateMachine::COMMIT_STATE_IDLE); | 1137 EXPECT_COMMIT_STATE(SchedulerStateMachine::COMMIT_STATE_IDLE); |
| 1140 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 1138 state.OnBeginImplFrame(); |
| 1141 EXPECT_ACTION(SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1139 EXPECT_ACTION(SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 1142 } | 1140 } |
| 1143 | 1141 |
| 1144 TEST(SchedulerStateMachineTest, TestFirstContextCreation) { | 1142 TEST(SchedulerStateMachineTest, TestFirstContextCreation) { |
| 1145 SchedulerSettings default_scheduler_settings; | 1143 SchedulerSettings default_scheduler_settings; |
| 1146 StateMachine state(default_scheduler_settings); | 1144 StateMachine state(default_scheduler_settings); |
| 1147 state.SetCanStart(); | 1145 state.SetCanStart(); |
| 1148 state.SetVisible(true); | 1146 state.SetVisible(true); |
| 1149 state.SetCanDraw(true); | 1147 state.SetCanDraw(true); |
| 1150 | 1148 |
| 1151 EXPECT_ACTION_UPDATE_STATE( | 1149 EXPECT_ACTION_UPDATE_STATE( |
| 1152 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); | 1150 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); |
| 1153 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 1151 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 1154 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1152 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1155 | 1153 |
| 1156 // Check that the first init does not SetNeedsCommit. | 1154 // Check that the first init does not SetNeedsCommit. |
| 1157 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 1155 state.OnBeginImplFrame(); |
| 1158 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1156 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1159 state.OnBeginImplFrameDeadline(); | 1157 state.OnBeginImplFrameDeadline(); |
| 1160 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1158 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1161 | 1159 |
| 1162 // Check that a needs commit initiates a BeginMainFrame. | 1160 // Check that a needs commit initiates a BeginMainFrame. |
| 1163 state.SetNeedsCommit(); | 1161 state.SetNeedsCommit(); |
| 1164 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 1162 state.OnBeginImplFrame(); |
| 1165 EXPECT_ACTION_UPDATE_STATE( | 1163 EXPECT_ACTION_UPDATE_STATE( |
| 1166 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1164 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 1167 } | 1165 } |
| 1168 | 1166 |
| 1169 TEST(SchedulerStateMachineTest, TestContextLostWhenCompletelyIdle) { | 1167 TEST(SchedulerStateMachineTest, TestContextLostWhenCompletelyIdle) { |
| 1170 SchedulerSettings default_scheduler_settings; | 1168 SchedulerSettings default_scheduler_settings; |
| 1171 StateMachine state(default_scheduler_settings); | 1169 StateMachine state(default_scheduler_settings); |
| 1172 SET_UP_STATE(state) | 1170 SET_UP_STATE(state) |
| 1173 | 1171 |
| 1174 EXPECT_NE(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION, | 1172 EXPECT_NE(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION, |
| 1175 state.NextAction()); | 1173 state.NextAction()); |
| 1176 state.DidLoseOutputSurface(); | 1174 state.DidLoseOutputSurface(); |
| 1177 | 1175 |
| 1178 EXPECT_ACTION(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); | 1176 EXPECT_ACTION(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); |
| 1179 state.UpdateState(state.NextAction()); | 1177 state.UpdateState(state.NextAction()); |
| 1180 | 1178 |
| 1181 // Once context recreation begins, nothing should happen. | 1179 // Once context recreation begins, nothing should happen. |
| 1182 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1180 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1183 | 1181 |
| 1184 // Recreate the context. | 1182 // Recreate the context. |
| 1185 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 1183 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 1186 | 1184 |
| 1187 // When the context is recreated, we should begin a commit. | 1185 // When the context is recreated, we should begin a commit. |
| 1188 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 1186 state.OnBeginImplFrame(); |
| 1189 EXPECT_ACTION_UPDATE_STATE( | 1187 EXPECT_ACTION_UPDATE_STATE( |
| 1190 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1188 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 1191 } | 1189 } |
| 1192 | 1190 |
| 1193 TEST(SchedulerStateMachineTest, | 1191 TEST(SchedulerStateMachineTest, |
| 1194 TestContextLostWhenIdleAndCommitRequestedWhileRecreating) { | 1192 TestContextLostWhenIdleAndCommitRequestedWhileRecreating) { |
| 1195 SchedulerSettings default_scheduler_settings; | 1193 SchedulerSettings default_scheduler_settings; |
| 1196 // We use impl side painting because it's the more complicated version. | 1194 // We use impl side painting because it's the more complicated version. |
| 1197 default_scheduler_settings.impl_side_painting = true; | 1195 default_scheduler_settings.impl_side_painting = true; |
| 1198 StateMachine state(default_scheduler_settings); | 1196 StateMachine state(default_scheduler_settings); |
| 1199 SET_UP_STATE(state) | 1197 SET_UP_STATE(state) |
| 1200 | 1198 |
| 1201 EXPECT_NE(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION, | 1199 EXPECT_NE(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION, |
| 1202 state.NextAction()); | 1200 state.NextAction()); |
| 1203 state.DidLoseOutputSurface(); | 1201 state.DidLoseOutputSurface(); |
| 1204 EXPECT_EQ(state.output_surface_state(), | 1202 EXPECT_EQ(state.output_surface_state(), |
| 1205 SchedulerStateMachine::OUTPUT_SURFACE_LOST); | 1203 SchedulerStateMachine::OUTPUT_SURFACE_LOST); |
| 1206 | 1204 |
| 1207 EXPECT_ACTION_UPDATE_STATE( | 1205 EXPECT_ACTION_UPDATE_STATE( |
| 1208 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); | 1206 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); |
| 1209 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1207 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1210 | 1208 |
| 1211 // Once context recreation begins, nothing should happen. | 1209 // Once context recreation begins, nothing should happen. |
| 1212 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 1210 state.OnBeginImplFrame(); |
| 1213 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1211 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1214 state.OnBeginImplFrameDeadline(); | 1212 state.OnBeginImplFrameDeadline(); |
| 1215 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1213 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1216 | 1214 |
| 1217 // While context is recreating, commits shouldn't begin. | 1215 // While context is recreating, commits shouldn't begin. |
| 1218 state.SetNeedsCommit(); | 1216 state.SetNeedsCommit(); |
| 1219 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 1217 state.OnBeginImplFrame(); |
| 1220 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1218 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1221 state.OnBeginImplFrameDeadline(); | 1219 state.OnBeginImplFrameDeadline(); |
| 1222 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1220 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1223 | 1221 |
| 1224 // Recreate the context | 1222 // Recreate the context |
| 1225 state.DidCreateAndInitializeOutputSurface(); | 1223 state.DidCreateAndInitializeOutputSurface(); |
| 1226 EXPECT_EQ(state.output_surface_state(), | 1224 EXPECT_EQ(state.output_surface_state(), |
| 1227 SchedulerStateMachine::OUTPUT_SURFACE_WAITING_FOR_FIRST_COMMIT); | 1225 SchedulerStateMachine::OUTPUT_SURFACE_WAITING_FOR_FIRST_COMMIT); |
| 1228 EXPECT_FALSE(state.RedrawPending()); | 1226 EXPECT_FALSE(state.RedrawPending()); |
| 1229 | 1227 |
| 1230 // When the context is recreated, we wait until the next BeginImplFrame | 1228 // When the context is recreated, we wait until the next BeginImplFrame |
| 1231 // before starting. | 1229 // before starting. |
| 1232 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1230 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1233 | 1231 |
| 1234 // When the BeginFrame comes in we should begin a commit | 1232 // When the BeginFrame comes in we should begin a commit |
| 1235 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 1233 state.OnBeginImplFrame(); |
| 1236 EXPECT_ACTION_UPDATE_STATE( | 1234 EXPECT_ACTION_UPDATE_STATE( |
| 1237 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1235 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 1238 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1236 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1239 EXPECT_COMMIT_STATE( | 1237 EXPECT_COMMIT_STATE( |
| 1240 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT); | 1238 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT); |
| 1241 | 1239 |
| 1242 // Until that commit finishes, we shouldn't be drawing or animate. | 1240 // Until that commit finishes, we shouldn't be drawing or animate. |
| 1243 state.OnBeginImplFrameDeadline(); | 1241 state.OnBeginImplFrameDeadline(); |
| 1244 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1242 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1245 | 1243 |
| 1246 // Finish the commit, which should make the surface active. | 1244 // Finish the commit, which should make the surface active. |
| 1247 state.NotifyBeginMainFrameStarted(); | 1245 state.NotifyBeginMainFrameStarted(); |
| 1248 state.NotifyReadyToCommit(); | 1246 state.NotifyReadyToCommit(); |
| 1249 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 1247 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
| 1250 EXPECT_EQ(state.output_surface_state(), | 1248 EXPECT_EQ(state.output_surface_state(), |
| 1251 SchedulerStateMachine::OUTPUT_SURFACE_WAITING_FOR_FIRST_ACTIVATION); | 1249 SchedulerStateMachine::OUTPUT_SURFACE_WAITING_FOR_FIRST_ACTIVATION); |
| 1252 state.NotifyReadyToActivate(); | 1250 state.NotifyReadyToActivate(); |
| 1253 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); | 1251 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); |
| 1254 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1252 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1255 EXPECT_EQ(state.output_surface_state(), | 1253 EXPECT_EQ(state.output_surface_state(), |
| 1256 SchedulerStateMachine::OUTPUT_SURFACE_ACTIVE); | 1254 SchedulerStateMachine::OUTPUT_SURFACE_ACTIVE); |
| 1257 | 1255 |
| 1258 // Finishing the first commit after initializing an output surface should | 1256 // Finishing the first commit after initializing an output surface should |
| 1259 // automatically cause a redraw. | 1257 // automatically cause a redraw. |
| 1260 EXPECT_TRUE(state.RedrawPending()); | 1258 EXPECT_TRUE(state.RedrawPending()); |
| 1261 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 1259 state.OnBeginImplFrame(); |
| 1262 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1260 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 1263 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1261 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1264 state.OnBeginImplFrameDeadline(); | 1262 state.OnBeginImplFrameDeadline(); |
| 1265 EXPECT_ACTION_UPDATE_STATE( | 1263 EXPECT_ACTION_UPDATE_STATE( |
| 1266 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1264 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 1267 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1265 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1268 EXPECT_FALSE(state.RedrawPending()); | 1266 EXPECT_FALSE(state.RedrawPending()); |
| 1269 | 1267 |
| 1270 // Next frame as no work to do. | 1268 // Next frame as no work to do. |
| 1271 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 1269 state.OnBeginImplFrame(); |
| 1272 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1270 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1273 state.OnBeginImplFrameDeadline(); | 1271 state.OnBeginImplFrameDeadline(); |
| 1274 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1272 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1275 | 1273 |
| 1276 // Once the context is recreated, whether we draw should be based on | 1274 // Once the context is recreated, whether we draw should be based on |
| 1277 // SetCanDraw if waiting on first draw after activate. | 1275 // SetCanDraw if waiting on first draw after activate. |
| 1278 state.SetNeedsRedraw(true); | 1276 state.SetNeedsRedraw(true); |
| 1279 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 1277 state.OnBeginImplFrame(); |
| 1280 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1278 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 1281 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1279 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1282 state.OnBeginImplFrameDeadline(); | 1280 state.OnBeginImplFrameDeadline(); |
| 1283 EXPECT_ACTION(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1281 EXPECT_ACTION(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 1284 state.SetCanDraw(false); | 1282 state.SetCanDraw(false); |
| 1285 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); | 1283 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); |
| 1286 state.SetCanDraw(true); | 1284 state.SetCanDraw(true); |
| 1287 EXPECT_ACTION_UPDATE_STATE( | 1285 EXPECT_ACTION_UPDATE_STATE( |
| 1288 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1286 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 1289 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1287 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1290 | 1288 |
| 1291 // Once the context is recreated, whether we draw should be based on | 1289 // Once the context is recreated, whether we draw should be based on |
| 1292 // SetCanDraw if waiting on first draw after activate. | 1290 // SetCanDraw if waiting on first draw after activate. |
| 1293 state.SetNeedsRedraw(true); | 1291 state.SetNeedsRedraw(true); |
| 1294 state.SetNeedsCommit(); | 1292 state.SetNeedsCommit(); |
| 1295 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 1293 state.OnBeginImplFrame(); |
| 1296 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1294 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 1297 EXPECT_ACTION_UPDATE_STATE( | 1295 EXPECT_ACTION_UPDATE_STATE( |
| 1298 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1296 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 1299 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1297 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1300 // Activate so we need the first draw | 1298 // Activate so we need the first draw |
| 1301 state.NotifyBeginMainFrameStarted(); | 1299 state.NotifyBeginMainFrameStarted(); |
| 1302 state.NotifyReadyToCommit(); | 1300 state.NotifyReadyToCommit(); |
| 1303 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 1301 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
| 1304 state.NotifyReadyToActivate(); | 1302 state.NotifyReadyToActivate(); |
| 1305 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); | 1303 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 1319 TEST(SchedulerStateMachineTest, TestContextLostWhileCommitInProgress) { | 1317 TEST(SchedulerStateMachineTest, TestContextLostWhileCommitInProgress) { |
| 1320 SchedulerSettings scheduler_settings; | 1318 SchedulerSettings scheduler_settings; |
| 1321 StateMachine state(scheduler_settings); | 1319 StateMachine state(scheduler_settings); |
| 1322 SET_UP_STATE(state) | 1320 SET_UP_STATE(state) |
| 1323 | 1321 |
| 1324 // Get a commit in flight. | 1322 // Get a commit in flight. |
| 1325 state.SetNeedsCommit(); | 1323 state.SetNeedsCommit(); |
| 1326 | 1324 |
| 1327 // Set damage and expect a draw. | 1325 // Set damage and expect a draw. |
| 1328 state.SetNeedsRedraw(true); | 1326 state.SetNeedsRedraw(true); |
| 1329 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 1327 state.OnBeginImplFrame(); |
| 1330 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1328 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 1331 EXPECT_ACTION_UPDATE_STATE( | 1329 EXPECT_ACTION_UPDATE_STATE( |
| 1332 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1330 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 1333 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1331 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1334 state.OnBeginImplFrameDeadline(); | 1332 state.OnBeginImplFrameDeadline(); |
| 1335 EXPECT_ACTION_UPDATE_STATE( | 1333 EXPECT_ACTION_UPDATE_STATE( |
| 1336 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1334 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 1337 state.DidSwapBuffers(); | 1335 state.DidSwapBuffers(); |
| 1338 state.DidSwapBuffersComplete(); | 1336 state.DidSwapBuffersComplete(); |
| 1339 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1337 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 1352 | 1350 |
| 1353 // We will abort the draw when the output surface is lost if we are | 1351 // We will abort the draw when the output surface is lost if we are |
| 1354 // waiting for the first draw to unblock the main thread. | 1352 // waiting for the first draw to unblock the main thread. |
| 1355 EXPECT_TRUE(state.active_tree_needs_first_draw()); | 1353 EXPECT_TRUE(state.active_tree_needs_first_draw()); |
| 1356 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT); | 1354 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT); |
| 1357 | 1355 |
| 1358 // Expect to begin context recreation only in BEGIN_IMPL_FRAME_STATE_IDLE | 1356 // Expect to begin context recreation only in BEGIN_IMPL_FRAME_STATE_IDLE |
| 1359 EXPECT_IMPL_FRAME_STATE(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE); | 1357 EXPECT_IMPL_FRAME_STATE(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE); |
| 1360 EXPECT_ACTION(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); | 1358 EXPECT_ACTION(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); |
| 1361 | 1359 |
| 1362 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 1360 state.OnBeginImplFrame(); |
| 1363 EXPECT_IMPL_FRAME_STATE( | 1361 EXPECT_IMPL_FRAME_STATE( |
| 1364 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING); | 1362 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING); |
| 1365 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); | 1363 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); |
| 1366 | 1364 |
| 1367 state.OnBeginImplFrameDeadlinePending(); | 1365 state.OnBeginImplFrameDeadlinePending(); |
| 1368 EXPECT_IMPL_FRAME_STATE( | 1366 EXPECT_IMPL_FRAME_STATE( |
| 1369 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME); | 1367 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME); |
| 1370 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); | 1368 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); |
| 1371 | 1369 |
| 1372 state.OnBeginImplFrameDeadline(); | 1370 state.OnBeginImplFrameDeadline(); |
| 1373 EXPECT_IMPL_FRAME_STATE( | 1371 EXPECT_IMPL_FRAME_STATE( |
| 1374 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE); | 1372 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE); |
| 1375 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); | 1373 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); |
| 1376 } | 1374 } |
| 1377 | 1375 |
| 1378 TEST(SchedulerStateMachineTest, | 1376 TEST(SchedulerStateMachineTest, |
| 1379 TestContextLostWhileCommitInProgressAndAnotherCommitRequested) { | 1377 TestContextLostWhileCommitInProgressAndAnotherCommitRequested) { |
| 1380 SchedulerSettings scheduler_settings; | 1378 SchedulerSettings scheduler_settings; |
| 1381 StateMachine state(scheduler_settings); | 1379 StateMachine state(scheduler_settings); |
| 1382 SET_UP_STATE(state) | 1380 SET_UP_STATE(state) |
| 1383 | 1381 |
| 1384 // Get a commit in flight. | 1382 // Get a commit in flight. |
| 1385 state.SetNeedsCommit(); | 1383 state.SetNeedsCommit(); |
| 1386 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1384 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1387 | 1385 |
| 1388 // Set damage and expect a draw. | 1386 // Set damage and expect a draw. |
| 1389 state.SetNeedsRedraw(true); | 1387 state.SetNeedsRedraw(true); |
| 1390 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 1388 state.OnBeginImplFrame(); |
| 1391 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1389 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 1392 EXPECT_ACTION_UPDATE_STATE( | 1390 EXPECT_ACTION_UPDATE_STATE( |
| 1393 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1391 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 1394 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1392 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1395 state.OnBeginImplFrameDeadline(); | 1393 state.OnBeginImplFrameDeadline(); |
| 1396 EXPECT_ACTION_UPDATE_STATE( | 1394 EXPECT_ACTION_UPDATE_STATE( |
| 1397 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1395 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 1398 state.DidSwapBuffers(); | 1396 state.DidSwapBuffers(); |
| 1399 state.DidSwapBuffersComplete(); | 1397 state.DidSwapBuffersComplete(); |
| 1400 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1398 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 1413 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 1411 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
| 1414 EXPECT_TRUE(state.active_tree_needs_first_draw()); | 1412 EXPECT_TRUE(state.active_tree_needs_first_draw()); |
| 1415 | 1413 |
| 1416 // Because the output surface is missing, we expect the draw to abort. | 1414 // Because the output surface is missing, we expect the draw to abort. |
| 1417 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT); | 1415 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT); |
| 1418 | 1416 |
| 1419 // Expect to begin context recreation only in BEGIN_IMPL_FRAME_STATE_IDLE | 1417 // Expect to begin context recreation only in BEGIN_IMPL_FRAME_STATE_IDLE |
| 1420 EXPECT_IMPL_FRAME_STATE(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE); | 1418 EXPECT_IMPL_FRAME_STATE(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE); |
| 1421 EXPECT_ACTION(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); | 1419 EXPECT_ACTION(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); |
| 1422 | 1420 |
| 1423 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 1421 state.OnBeginImplFrame(); |
| 1424 EXPECT_IMPL_FRAME_STATE( | 1422 EXPECT_IMPL_FRAME_STATE( |
| 1425 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING); | 1423 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING); |
| 1426 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); | 1424 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); |
| 1427 | 1425 |
| 1428 state.OnBeginImplFrameDeadlinePending(); | 1426 state.OnBeginImplFrameDeadlinePending(); |
| 1429 EXPECT_IMPL_FRAME_STATE( | 1427 EXPECT_IMPL_FRAME_STATE( |
| 1430 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME); | 1428 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME); |
| 1431 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); | 1429 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); |
| 1432 | 1430 |
| 1433 state.OnBeginImplFrameDeadline(); | 1431 state.OnBeginImplFrameDeadline(); |
| 1434 EXPECT_IMPL_FRAME_STATE( | 1432 EXPECT_IMPL_FRAME_STATE( |
| 1435 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE); | 1433 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE); |
| 1436 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); | 1434 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); |
| 1437 | 1435 |
| 1438 state.OnBeginImplFrameIdle(); | 1436 state.OnBeginImplFrameIdle(); |
| 1439 EXPECT_ACTION_UPDATE_STATE( | 1437 EXPECT_ACTION_UPDATE_STATE( |
| 1440 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); | 1438 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); |
| 1441 | 1439 |
| 1442 // After we get a new output surface, the commit flow should start. | 1440 // After we get a new output surface, the commit flow should start. |
| 1443 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 1441 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 1444 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 1442 state.OnBeginImplFrame(); |
| 1445 EXPECT_ACTION_UPDATE_STATE( | 1443 EXPECT_ACTION_UPDATE_STATE( |
| 1446 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1444 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 1447 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1445 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1448 state.NotifyBeginMainFrameStarted(); | 1446 state.NotifyBeginMainFrameStarted(); |
| 1449 state.NotifyReadyToCommit(); | 1447 state.NotifyReadyToCommit(); |
| 1450 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 1448 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
| 1451 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1449 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1452 state.OnBeginImplFrameDeadline(); | 1450 state.OnBeginImplFrameDeadline(); |
| 1453 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1451 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 1454 EXPECT_ACTION_UPDATE_STATE( | 1452 EXPECT_ACTION_UPDATE_STATE( |
| (...skipping 10 matching lines...) Expand all Loading... |
| 1465 | 1463 |
| 1466 state.SetNeedsRedraw(true); | 1464 state.SetNeedsRedraw(true); |
| 1467 | 1465 |
| 1468 // Cause a lost output surface, and restore it. | 1466 // Cause a lost output surface, and restore it. |
| 1469 state.DidLoseOutputSurface(); | 1467 state.DidLoseOutputSurface(); |
| 1470 EXPECT_ACTION(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); | 1468 EXPECT_ACTION(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); |
| 1471 state.UpdateState(state.NextAction()); | 1469 state.UpdateState(state.NextAction()); |
| 1472 state.DidCreateAndInitializeOutputSurface(); | 1470 state.DidCreateAndInitializeOutputSurface(); |
| 1473 | 1471 |
| 1474 EXPECT_FALSE(state.RedrawPending()); | 1472 EXPECT_FALSE(state.RedrawPending()); |
| 1475 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 1473 state.OnBeginImplFrame(); |
| 1476 EXPECT_ACTION(SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1474 EXPECT_ACTION(SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 1477 } | 1475 } |
| 1478 | 1476 |
| 1479 TEST(SchedulerStateMachineTest, | 1477 TEST(SchedulerStateMachineTest, |
| 1480 TestPendingActivationsShouldBeForcedAfterLostOutputSurface) { | 1478 TestPendingActivationsShouldBeForcedAfterLostOutputSurface) { |
| 1481 SchedulerSettings settings; | 1479 SchedulerSettings settings; |
| 1482 settings.impl_side_painting = true; | 1480 settings.impl_side_painting = true; |
| 1483 StateMachine state(settings); | 1481 StateMachine state(settings); |
| 1484 SET_UP_STATE(state) | 1482 SET_UP_STATE(state) |
| 1485 | 1483 |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1579 | 1577 |
| 1580 TEST(SchedulerStateMachineTest, | 1578 TEST(SchedulerStateMachineTest, |
| 1581 TestTriggerDeadlineImmediatelyAfterAbortedCommit) { | 1579 TestTriggerDeadlineImmediatelyAfterAbortedCommit) { |
| 1582 SchedulerSettings settings; | 1580 SchedulerSettings settings; |
| 1583 settings.impl_side_painting = true; | 1581 settings.impl_side_painting = true; |
| 1584 StateMachine state(settings); | 1582 StateMachine state(settings); |
| 1585 SET_UP_STATE(state) | 1583 SET_UP_STATE(state) |
| 1586 | 1584 |
| 1587 // This test mirrors what happens during the first frame of a scroll gesture. | 1585 // This test mirrors what happens during the first frame of a scroll gesture. |
| 1588 // First we get the input event and a BeginFrame. | 1586 // First we get the input event and a BeginFrame. |
| 1589 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 1587 state.OnBeginImplFrame(); |
| 1590 | 1588 |
| 1591 // As a response the compositor requests a redraw and a commit to tell the | 1589 // As a response the compositor requests a redraw and a commit to tell the |
| 1592 // main thread about the new scroll offset. | 1590 // main thread about the new scroll offset. |
| 1593 state.SetNeedsRedraw(true); | 1591 state.SetNeedsRedraw(true); |
| 1594 state.SetNeedsCommit(); | 1592 state.SetNeedsCommit(); |
| 1595 | 1593 |
| 1596 // We should start the commit normally. | 1594 // We should start the commit normally. |
| 1597 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1595 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 1598 EXPECT_ACTION_UPDATE_STATE( | 1596 EXPECT_ACTION_UPDATE_STATE( |
| 1599 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1597 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 1614 StateMachine& state = *state_ptr; | 1612 StateMachine& state = *state_ptr; |
| 1615 | 1613 |
| 1616 state.NotifyBeginMainFrameStarted(); | 1614 state.NotifyBeginMainFrameStarted(); |
| 1617 state.NotifyReadyToCommit(); | 1615 state.NotifyReadyToCommit(); |
| 1618 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 1616 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
| 1619 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1617 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1620 state.NotifyReadyToActivate(); | 1618 state.NotifyReadyToActivate(); |
| 1621 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); | 1619 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); |
| 1622 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1620 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1623 | 1621 |
| 1624 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 1622 state.OnBeginImplFrame(); |
| 1625 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1623 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 1626 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1624 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1627 | 1625 |
| 1628 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineImmediately()); | 1626 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineImmediately()); |
| 1629 state.OnBeginImplFrameDeadline(); | 1627 state.OnBeginImplFrameDeadline(); |
| 1630 EXPECT_ACTION_UPDATE_STATE( | 1628 EXPECT_ACTION_UPDATE_STATE( |
| 1631 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1629 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 1632 state.DidSwapBuffers(); | 1630 state.DidSwapBuffers(); |
| 1633 } | 1631 } |
| 1634 | 1632 |
| 1635 TEST(SchedulerStateMachineTest, TestImplLatencyTakesPriority) { | 1633 TEST(SchedulerStateMachineTest, TestImplLatencyTakesPriority) { |
| 1636 SchedulerSettings settings; | 1634 SchedulerSettings settings; |
| 1637 settings.impl_side_painting = true; | 1635 settings.impl_side_painting = true; |
| 1638 StateMachine state(settings); | 1636 StateMachine state(settings); |
| 1639 SET_UP_STATE(state) | 1637 SET_UP_STATE(state) |
| 1640 | 1638 |
| 1641 // This test ensures that impl-draws are prioritized over main thread updates | 1639 // This test ensures that impl-draws are prioritized over main thread updates |
| 1642 // in prefer impl latency mode. | 1640 // in prefer impl latency mode. |
| 1643 state.SetNeedsRedraw(true); | 1641 state.SetNeedsRedraw(true); |
| 1644 state.SetNeedsCommit(); | 1642 state.SetNeedsCommit(); |
| 1645 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 1643 state.OnBeginImplFrame(); |
| 1646 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1644 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 1647 EXPECT_ACTION_UPDATE_STATE( | 1645 EXPECT_ACTION_UPDATE_STATE( |
| 1648 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1646 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 1649 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1647 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1650 | 1648 |
| 1651 // Verify the deadline is not triggered early until we enter | 1649 // Verify the deadline is not triggered early until we enter |
| 1652 // prefer impl latency mode. | 1650 // prefer impl latency mode. |
| 1653 EXPECT_FALSE(state.ShouldTriggerBeginImplFrameDeadlineImmediately()); | 1651 EXPECT_FALSE(state.ShouldTriggerBeginImplFrameDeadlineImmediately()); |
| 1654 state.SetImplLatencyTakesPriority(true); | 1652 state.SetImplLatencyTakesPriority(true); |
| 1655 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineImmediately()); | 1653 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineImmediately()); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 1672 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1670 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1673 | 1671 |
| 1674 // Finish the previous commit and draw it. | 1672 // Finish the previous commit and draw it. |
| 1675 FinishPreviousCommitAndDrawWithoutExitingDeadline(&state); | 1673 FinishPreviousCommitAndDrawWithoutExitingDeadline(&state); |
| 1676 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1674 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1677 | 1675 |
| 1678 // Verify we do not send another BeginMainFrame if was are swap throttled | 1676 // Verify we do not send another BeginMainFrame if was are swap throttled |
| 1679 // and did not just swap. | 1677 // and did not just swap. |
| 1680 state.SetNeedsCommit(); | 1678 state.SetNeedsCommit(); |
| 1681 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1679 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1682 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 1680 state.OnBeginImplFrame(); |
| 1683 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1681 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1684 EXPECT_FALSE(state.ShouldTriggerBeginImplFrameDeadlineImmediately()); | 1682 EXPECT_FALSE(state.ShouldTriggerBeginImplFrameDeadlineImmediately()); |
| 1685 state.OnBeginImplFrameDeadline(); | 1683 state.OnBeginImplFrameDeadline(); |
| 1686 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1684 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1687 } | 1685 } |
| 1688 | 1686 |
| 1689 TEST(SchedulerStateMachineTest, | 1687 TEST(SchedulerStateMachineTest, |
| 1690 TestTriggerDeadlineImmediatelyOnLostOutputSurface) { | 1688 TestTriggerDeadlineImmediatelyOnLostOutputSurface) { |
| 1691 SchedulerSettings default_scheduler_settings; | 1689 SchedulerSettings default_scheduler_settings; |
| 1692 StateMachine state(default_scheduler_settings); | 1690 StateMachine state(default_scheduler_settings); |
| 1693 SET_UP_STATE(state) | 1691 SET_UP_STATE(state) |
| 1694 | 1692 |
| 1695 state.SetNeedsCommit(); | 1693 state.SetNeedsCommit(); |
| 1696 | 1694 |
| 1697 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 1695 state.OnBeginImplFrame(); |
| 1698 EXPECT_ACTION_UPDATE_STATE( | 1696 EXPECT_ACTION_UPDATE_STATE( |
| 1699 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1697 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 1700 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1698 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1701 EXPECT_FALSE(state.ShouldTriggerBeginImplFrameDeadlineImmediately()); | 1699 EXPECT_FALSE(state.ShouldTriggerBeginImplFrameDeadlineImmediately()); |
| 1702 | 1700 |
| 1703 state.DidLoseOutputSurface(); | 1701 state.DidLoseOutputSurface(); |
| 1704 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1702 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1705 // The deadline should be triggered immediately when output surface is lost. | 1703 // The deadline should be triggered immediately when output surface is lost. |
| 1706 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineImmediately()); | 1704 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineImmediately()); |
| 1707 } | 1705 } |
| 1708 | 1706 |
| 1709 TEST(SchedulerStateMachineTest, TestSetNeedsAnimate) { | 1707 TEST(SchedulerStateMachineTest, TestSetNeedsAnimate) { |
| 1710 SchedulerSettings settings; | 1708 SchedulerSettings settings; |
| 1711 settings.impl_side_painting = true; | 1709 settings.impl_side_painting = true; |
| 1712 StateMachine state(settings); | 1710 StateMachine state(settings); |
| 1713 SET_UP_STATE(state) | 1711 SET_UP_STATE(state) |
| 1714 | 1712 |
| 1715 // Test requesting an animation that, when run, causes us to draw. | 1713 // Test requesting an animation that, when run, causes us to draw. |
| 1716 state.SetNeedsAnimate(); | 1714 state.SetNeedsAnimate(); |
| 1717 EXPECT_TRUE(state.BeginFrameNeeded()); | 1715 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 1718 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1716 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1719 | 1717 |
| 1720 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 1718 state.OnBeginImplFrame(); |
| 1721 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1719 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 1722 | 1720 |
| 1723 state.OnBeginImplFrameDeadlinePending(); | 1721 state.OnBeginImplFrameDeadlinePending(); |
| 1724 state.OnBeginImplFrameDeadline(); | 1722 state.OnBeginImplFrameDeadline(); |
| 1725 EXPECT_ACTION_UPDATE_STATE( | 1723 EXPECT_ACTION_UPDATE_STATE( |
| 1726 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1724 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 1727 } | 1725 } |
| 1728 | 1726 |
| 1729 TEST(SchedulerStateMachineTest, TestAnimateBeforeCommit) { | 1727 TEST(SchedulerStateMachineTest, TestAnimateBeforeCommit) { |
| 1730 SchedulerSettings settings; | 1728 SchedulerSettings settings; |
| 1731 settings.impl_side_painting = true; | 1729 settings.impl_side_painting = true; |
| 1732 StateMachine state(settings); | 1730 StateMachine state(settings); |
| 1733 SET_UP_STATE(state) | 1731 SET_UP_STATE(state) |
| 1734 | 1732 |
| 1735 // Check that animations are updated before we start a commit. | 1733 // Check that animations are updated before we start a commit. |
| 1736 state.SetNeedsAnimate(); | 1734 state.SetNeedsAnimate(); |
| 1737 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1735 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1738 state.SetNeedsCommit(); | 1736 state.SetNeedsCommit(); |
| 1739 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1737 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1740 EXPECT_TRUE(state.BeginFrameNeeded()); | 1738 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 1741 | 1739 |
| 1742 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 1740 state.OnBeginImplFrame(); |
| 1743 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1741 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 1744 EXPECT_ACTION_UPDATE_STATE( | 1742 EXPECT_ACTION_UPDATE_STATE( |
| 1745 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1743 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 1746 | 1744 |
| 1747 state.OnBeginImplFrameDeadlinePending(); | 1745 state.OnBeginImplFrameDeadlinePending(); |
| 1748 state.OnBeginImplFrameDeadline(); | 1746 state.OnBeginImplFrameDeadline(); |
| 1749 EXPECT_ACTION_UPDATE_STATE( | 1747 EXPECT_ACTION_UPDATE_STATE( |
| 1750 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1748 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 1751 } | 1749 } |
| 1752 | 1750 |
| 1753 TEST(SchedulerStateMachineTest, TestAnimateAfterCommitBeforeDraw) { | 1751 TEST(SchedulerStateMachineTest, TestAnimateAfterCommitBeforeDraw) { |
| 1754 SchedulerSettings settings; | 1752 SchedulerSettings settings; |
| 1755 settings.impl_side_painting = true; | 1753 settings.impl_side_painting = true; |
| 1756 StateMachine state(settings); | 1754 StateMachine state(settings); |
| 1757 SET_UP_STATE(state) | 1755 SET_UP_STATE(state) |
| 1758 | 1756 |
| 1759 // Check that animations are updated before we start a commit. | 1757 // Check that animations are updated before we start a commit. |
| 1760 state.SetNeedsAnimate(); | 1758 state.SetNeedsAnimate(); |
| 1761 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1759 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1762 state.SetNeedsCommit(); | 1760 state.SetNeedsCommit(); |
| 1763 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1761 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1764 EXPECT_TRUE(state.BeginFrameNeeded()); | 1762 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 1765 | 1763 |
| 1766 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 1764 state.OnBeginImplFrame(); |
| 1767 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1765 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 1768 EXPECT_ACTION_UPDATE_STATE( | 1766 EXPECT_ACTION_UPDATE_STATE( |
| 1769 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1767 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 1770 | 1768 |
| 1771 state.NotifyBeginMainFrameStarted(); | 1769 state.NotifyBeginMainFrameStarted(); |
| 1772 state.NotifyReadyToCommit(); | 1770 state.NotifyReadyToCommit(); |
| 1773 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 1771 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
| 1774 | 1772 |
| 1775 state.OnBeginImplFrameDeadlinePending(); | 1773 state.OnBeginImplFrameDeadlinePending(); |
| 1776 state.OnBeginImplFrameDeadline(); | 1774 state.OnBeginImplFrameDeadline(); |
| 1777 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1775 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 1778 EXPECT_ACTION_UPDATE_STATE( | 1776 EXPECT_ACTION_UPDATE_STATE( |
| 1779 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1777 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 1780 } | 1778 } |
| 1781 | 1779 |
| 1782 TEST(SchedulerStateMachineTest, TestSetNeedsAnimateAfterAnimate) { | 1780 TEST(SchedulerStateMachineTest, TestSetNeedsAnimateAfterAnimate) { |
| 1783 SchedulerSettings settings; | 1781 SchedulerSettings settings; |
| 1784 settings.impl_side_painting = true; | 1782 settings.impl_side_painting = true; |
| 1785 StateMachine state(settings); | 1783 StateMachine state(settings); |
| 1786 SET_UP_STATE(state) | 1784 SET_UP_STATE(state) |
| 1787 | 1785 |
| 1788 // Test requesting an animation after we have already animated during this | 1786 // Test requesting an animation after we have already animated during this |
| 1789 // frame. | 1787 // frame. |
| 1790 state.SetNeedsRedraw(true); | 1788 state.SetNeedsRedraw(true); |
| 1791 EXPECT_TRUE(state.BeginFrameNeeded()); | 1789 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 1792 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1790 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1793 | 1791 |
| 1794 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 1792 state.OnBeginImplFrame(); |
| 1795 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1793 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 1796 | 1794 |
| 1797 state.SetNeedsAnimate(); | 1795 state.SetNeedsAnimate(); |
| 1798 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1796 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1799 | 1797 |
| 1800 state.OnBeginImplFrameDeadline(); | 1798 state.OnBeginImplFrameDeadline(); |
| 1801 EXPECT_ACTION_UPDATE_STATE( | 1799 EXPECT_ACTION_UPDATE_STATE( |
| 1802 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1800 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 1803 } | 1801 } |
| 1804 | 1802 |
| (...skipping 11 matching lines...) Expand all Loading... |
| 1816 SchedulerSettings settings; | 1814 SchedulerSettings settings; |
| 1817 StateMachine state(settings); | 1815 StateMachine state(settings); |
| 1818 SET_UP_STATE(state) | 1816 SET_UP_STATE(state) |
| 1819 | 1817 |
| 1820 state.SetDeferCommits(true); | 1818 state.SetDeferCommits(true); |
| 1821 | 1819 |
| 1822 state.SetNeedsCommit(); | 1820 state.SetNeedsCommit(); |
| 1823 EXPECT_TRUE(state.BeginFrameNeeded()); | 1821 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 1824 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1822 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1825 | 1823 |
| 1826 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 1824 state.OnBeginImplFrame(); |
| 1827 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1825 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1828 | 1826 |
| 1829 state.OnBeginImplFrameDeadline(); | 1827 state.OnBeginImplFrameDeadline(); |
| 1830 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1828 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1831 | 1829 |
| 1832 state.SetDeferCommits(false); | 1830 state.SetDeferCommits(false); |
| 1833 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 1831 state.OnBeginImplFrame(); |
| 1834 EXPECT_ACTION_UPDATE_STATE( | 1832 EXPECT_ACTION_UPDATE_STATE( |
| 1835 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1833 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 1836 } | 1834 } |
| 1837 | 1835 |
| 1836 TEST(SchedulerStateMachineTest, EarlyOutCommitWantsProactiveBeginFrame) { |
| 1837 SchedulerSettings settings; |
| 1838 StateMachine state(settings); |
| 1839 SET_UP_STATE(state); |
| 1840 |
| 1841 EXPECT_FALSE(state.ProactiveBeginFrameWanted()); |
| 1842 bool commit_has_no_updates = true; |
| 1843 state.UpdateStateOnCommit(commit_has_no_updates); |
| 1844 EXPECT_TRUE(state.ProactiveBeginFrameWanted()); |
| 1845 state.OnBeginImplFrame(); |
| 1846 EXPECT_FALSE(state.ProactiveBeginFrameWanted()); |
| 1847 } |
| 1848 |
| 1838 } // namespace | 1849 } // namespace |
| 1839 } // namespace cc | 1850 } // namespace cc |
| OLD | NEW |