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