| 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/debug/trace_event.h" | 7 #include "base/debug/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 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 115 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION) | 115 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION) |
| 116 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 116 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 117 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE); | 117 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE); |
| 118 state.SetNeedsRedraw(false); | 118 state.SetNeedsRedraw(false); |
| 119 state.SetVisible(true); | 119 state.SetVisible(true); |
| 120 | 120 |
| 121 EXPECT_FALSE(state.BeginFrameNeeded()); | 121 EXPECT_FALSE(state.BeginFrameNeeded()); |
| 122 | 122 |
| 123 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 123 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 124 EXPECT_FALSE(state.BeginFrameNeeded()); | 124 EXPECT_FALSE(state.BeginFrameNeeded()); |
| 125 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 125 state.OnBeginImplFrame( |
| 126 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 126 | 127 |
| 127 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 128 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 128 state.OnBeginImplFrameDeadline(); | 129 state.OnBeginImplFrameDeadline(); |
| 129 } | 130 } |
| 130 | 131 |
| 131 // If commit requested but can_start is still false, do nothing. | 132 // If commit requested but can_start is still false, do nothing. |
| 132 { | 133 { |
| 133 StateMachine state(default_scheduler_settings); | 134 StateMachine state(default_scheduler_settings); |
| 134 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE); | 135 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE); |
| 135 state.SetNeedsRedraw(false); | 136 state.SetNeedsRedraw(false); |
| 136 state.SetVisible(true); | 137 state.SetVisible(true); |
| 137 state.SetNeedsCommit(); | 138 state.SetNeedsCommit(); |
| 138 | 139 |
| 139 EXPECT_FALSE(state.BeginFrameNeeded()); | 140 EXPECT_FALSE(state.BeginFrameNeeded()); |
| 140 | 141 |
| 141 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 142 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 142 EXPECT_FALSE(state.BeginFrameNeeded()); | 143 EXPECT_FALSE(state.BeginFrameNeeded()); |
| 143 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 144 state.OnBeginImplFrame( |
| 145 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 144 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 146 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 145 state.OnBeginImplFrameDeadline(); | 147 state.OnBeginImplFrameDeadline(); |
| 146 } | 148 } |
| 147 | 149 |
| 148 // If commit requested, begin a main frame. | 150 // If commit requested, begin a main frame. |
| 149 { | 151 { |
| 150 StateMachine state(default_scheduler_settings); | 152 StateMachine state(default_scheduler_settings); |
| 151 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE); | 153 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE); |
| 152 state.SetCanStart(); | 154 state.SetCanStart(); |
| 153 state.UpdateState(state.NextAction()); | 155 state.UpdateState(state.NextAction()); |
| 154 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 156 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 155 state.SetNeedsRedraw(false); | 157 state.SetNeedsRedraw(false); |
| 156 state.SetVisible(true); | 158 state.SetVisible(true); |
| 157 state.SetNeedsCommit(); | 159 state.SetNeedsCommit(); |
| 158 | 160 |
| 159 EXPECT_TRUE(state.BeginFrameNeeded()); | 161 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 160 | 162 |
| 161 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 163 state.OnBeginImplFrame( |
| 164 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 162 EXPECT_ACTION_UPDATE_STATE( | 165 EXPECT_ACTION_UPDATE_STATE( |
| 163 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 166 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 164 } | 167 } |
| 165 | 168 |
| 166 // Begin the frame, make sure needs_commit and commit_state update correctly. | 169 // Begin the frame, make sure needs_commit and commit_state update correctly. |
| 167 { | 170 { |
| 168 StateMachine state(default_scheduler_settings); | 171 StateMachine state(default_scheduler_settings); |
| 169 state.SetCanStart(); | 172 state.SetCanStart(); |
| 170 state.UpdateState(state.NextAction()); | 173 state.UpdateState(state.NextAction()); |
| 171 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 174 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 188 state.UpdateState(state.NextAction()); | 191 state.UpdateState(state.NextAction()); |
| 189 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 192 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 190 state.SetNeedsRedraw(false); | 193 state.SetNeedsRedraw(false); |
| 191 state.SetVisible(true); | 194 state.SetVisible(true); |
| 192 state.SetCanDraw(true); | 195 state.SetCanDraw(true); |
| 193 state.SetNeedsCommit(); | 196 state.SetNeedsCommit(); |
| 194 | 197 |
| 195 EXPECT_TRUE(state.BeginFrameNeeded()); | 198 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 196 | 199 |
| 197 // Commit to the pending tree. | 200 // Commit to the pending tree. |
| 198 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 201 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 199 EXPECT_ACTION_UPDATE_STATE( | 202 EXPECT_ACTION_UPDATE_STATE( |
| 200 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 203 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 201 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 204 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 202 | 205 |
| 203 state.NotifyBeginMainFrameStarted(); | 206 state.NotifyBeginMainFrameStarted(); |
| 204 state.NotifyReadyToCommit(); | 207 state.NotifyReadyToCommit(); |
| 205 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 208 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
| 206 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 209 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 207 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); | 210 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); |
| 208 | 211 |
| 209 state.OnBeginImplFrameDeadline(); | 212 state.OnBeginImplFrameDeadline(); |
| 210 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 213 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 211 | 214 |
| 212 // Verify that the next commit starts while there is still a pending tree. | 215 // Verify that the next commit starts while there is still a pending tree. |
| 213 state.SetNeedsCommit(); | 216 state.SetNeedsCommit(); |
| 214 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 217 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 215 EXPECT_ACTION_UPDATE_STATE( | 218 EXPECT_ACTION_UPDATE_STATE( |
| 216 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 219 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 217 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 220 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 218 | 221 |
| 219 // Verify the pending commit doesn't overwrite the pending | 222 // Verify the pending commit doesn't overwrite the pending |
| 220 // tree until the pending tree has been activated. | 223 // tree until the pending tree has been activated. |
| 221 state.NotifyBeginMainFrameStarted(); | 224 state.NotifyBeginMainFrameStarted(); |
| 222 state.NotifyReadyToCommit(); | 225 state.NotifyReadyToCommit(); |
| 223 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 226 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 224 | 227 |
| (...skipping 20 matching lines...) Expand all Loading... |
| 245 SchedulerSettings default_scheduler_settings; | 248 SchedulerSettings default_scheduler_settings; |
| 246 StateMachine state(default_scheduler_settings); | 249 StateMachine state(default_scheduler_settings); |
| 247 state.SetCanStart(); | 250 state.SetCanStart(); |
| 248 state.UpdateState(state.NextAction()); | 251 state.UpdateState(state.NextAction()); |
| 249 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 252 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 250 state.SetVisible(true); | 253 state.SetVisible(true); |
| 251 state.SetCanDraw(true); | 254 state.SetCanDraw(true); |
| 252 state.SetNeedsRedraw(true); | 255 state.SetNeedsRedraw(true); |
| 253 EXPECT_TRUE(state.RedrawPending()); | 256 EXPECT_TRUE(state.RedrawPending()); |
| 254 EXPECT_TRUE(state.BeginFrameNeeded()); | 257 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 255 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 258 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 256 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 259 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 257 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 260 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 258 state.OnBeginImplFrameDeadline(); | 261 state.OnBeginImplFrameDeadline(); |
| 259 | 262 |
| 260 // We're drawing now. | 263 // We're drawing now. |
| 261 EXPECT_ACTION_UPDATE_STATE( | 264 EXPECT_ACTION_UPDATE_STATE( |
| 262 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 265 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 263 state.DidSwapBuffers(); | 266 state.DidSwapBuffers(); |
| 264 state.DidSwapBuffersComplete(); | 267 state.DidSwapBuffersComplete(); |
| 265 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 268 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 266 | 269 |
| 267 EXPECT_FALSE(state.RedrawPending()); | 270 EXPECT_FALSE(state.RedrawPending()); |
| 268 EXPECT_FALSE(state.CommitPending()); | 271 EXPECT_FALSE(state.CommitPending()); |
| 269 | 272 |
| 270 // Failing the draw makes us require a commit. | 273 // Failing the draw makes us require a commit. |
| 271 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); | 274 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); |
| 272 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 275 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 273 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 276 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 274 EXPECT_ACTION_UPDATE_STATE( | 277 EXPECT_ACTION_UPDATE_STATE( |
| 275 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 278 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 276 EXPECT_TRUE(state.RedrawPending()); | 279 EXPECT_TRUE(state.RedrawPending()); |
| 277 EXPECT_TRUE(state.CommitPending()); | 280 EXPECT_TRUE(state.CommitPending()); |
| 278 } | 281 } |
| 279 | 282 |
| 280 TEST(SchedulerStateMachineTest, TestFailedDrawForMissingHighResNeedsCommit) { | 283 TEST(SchedulerStateMachineTest, TestFailedDrawForMissingHighResNeedsCommit) { |
| 281 SchedulerSettings default_scheduler_settings; | 284 SchedulerSettings default_scheduler_settings; |
| 282 StateMachine state(default_scheduler_settings); | 285 StateMachine state(default_scheduler_settings); |
| 283 state.SetCanStart(); | 286 state.SetCanStart(); |
| 284 state.UpdateState(state.NextAction()); | 287 state.UpdateState(state.NextAction()); |
| 285 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 288 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 286 state.SetVisible(true); | 289 state.SetVisible(true); |
| 287 state.SetCanDraw(true); | 290 state.SetCanDraw(true); |
| 288 state.SetNeedsRedraw(true); | 291 state.SetNeedsRedraw(true); |
| 289 EXPECT_TRUE(state.RedrawPending()); | 292 EXPECT_TRUE(state.RedrawPending()); |
| 290 EXPECT_TRUE(state.BeginFrameNeeded()); | 293 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 291 | 294 |
| 292 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 295 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 293 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 296 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 294 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 297 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 295 state.OnBeginImplFrameDeadline(); | 298 state.OnBeginImplFrameDeadline(); |
| 296 EXPECT_ACTION_UPDATE_STATE( | 299 EXPECT_ACTION_UPDATE_STATE( |
| 297 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 300 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 298 state.DidSwapBuffers(); | 301 state.DidSwapBuffers(); |
| 299 state.DidSwapBuffersComplete(); | 302 state.DidSwapBuffersComplete(); |
| 300 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 303 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 301 EXPECT_FALSE(state.RedrawPending()); | 304 EXPECT_FALSE(state.RedrawPending()); |
| 302 EXPECT_FALSE(state.CommitPending()); | 305 EXPECT_FALSE(state.CommitPending()); |
| 303 | 306 |
| 304 // Missing high res content requires a commit (but not a redraw) | 307 // Missing high res content requires a commit (but not a redraw) |
| 305 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_MISSING_HIGH_RES_CONTENT); | 308 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_MISSING_HIGH_RES_CONTENT); |
| 306 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 309 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 307 EXPECT_ACTION_UPDATE_STATE( | 310 EXPECT_ACTION_UPDATE_STATE( |
| 308 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 311 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 309 EXPECT_FALSE(state.RedrawPending()); | 312 EXPECT_FALSE(state.RedrawPending()); |
| 310 EXPECT_TRUE(state.CommitPending()); | 313 EXPECT_TRUE(state.CommitPending()); |
| 311 } | 314 } |
| 312 | 315 |
| 313 TEST(SchedulerStateMachineTest, | 316 TEST(SchedulerStateMachineTest, |
| 314 TestsetNeedsRedrawDuringFailedDrawDoesNotRemoveNeedsRedraw) { | 317 TestsetNeedsRedrawDuringFailedDrawDoesNotRemoveNeedsRedraw) { |
| 315 SchedulerSettings default_scheduler_settings; | 318 SchedulerSettings default_scheduler_settings; |
| 316 StateMachine state(default_scheduler_settings); | 319 StateMachine state(default_scheduler_settings); |
| 317 state.SetCanStart(); | 320 state.SetCanStart(); |
| 318 state.UpdateState(state.NextAction()); | 321 state.UpdateState(state.NextAction()); |
| 319 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 322 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 320 | 323 |
| 321 state.SetVisible(true); | 324 state.SetVisible(true); |
| 322 state.SetCanDraw(true); | 325 state.SetCanDraw(true); |
| 323 state.SetNeedsRedraw(true); | 326 state.SetNeedsRedraw(true); |
| 324 EXPECT_TRUE(state.RedrawPending()); | 327 EXPECT_TRUE(state.RedrawPending()); |
| 325 EXPECT_TRUE(state.BeginFrameNeeded()); | 328 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 326 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 329 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 327 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 330 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 328 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 331 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 329 state.OnBeginImplFrameDeadline(); | 332 state.OnBeginImplFrameDeadline(); |
| 330 | 333 |
| 331 // We're drawing now. | 334 // We're drawing now. |
| 332 EXPECT_ACTION_UPDATE_STATE( | 335 EXPECT_ACTION_UPDATE_STATE( |
| 333 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 336 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 334 state.DidSwapBuffers(); | 337 state.DidSwapBuffers(); |
| 335 state.DidSwapBuffersComplete(); | 338 state.DidSwapBuffersComplete(); |
| 336 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 339 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 337 EXPECT_FALSE(state.RedrawPending()); | 340 EXPECT_FALSE(state.RedrawPending()); |
| 338 EXPECT_FALSE(state.CommitPending()); | 341 EXPECT_FALSE(state.CommitPending()); |
| 339 | 342 |
| 340 // While still in the same BeginMainFrame callback on the main thread, | 343 // While still in the same BeginMainFrame callback on the main thread, |
| 341 // set needs redraw again. This should not redraw. | 344 // set needs redraw again. This should not redraw. |
| 342 state.SetNeedsRedraw(true); | 345 state.SetNeedsRedraw(true); |
| 343 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 346 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 344 | 347 |
| 345 // Failing the draw for animation checkerboards makes us require a commit. | 348 // Failing the draw for animation checkerboards makes us require a commit. |
| 346 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); | 349 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); |
| 347 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 350 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 348 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 351 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 349 EXPECT_ACTION_UPDATE_STATE( | 352 EXPECT_ACTION_UPDATE_STATE( |
| 350 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 353 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 351 EXPECT_TRUE(state.RedrawPending()); | 354 EXPECT_TRUE(state.RedrawPending()); |
| 352 } | 355 } |
| 353 | 356 |
| 354 TEST(SchedulerStateMachineTest, | 357 TEST(SchedulerStateMachineTest, |
| 355 TestFailedDrawsEventuallyForceDrawAfterNextCommit) { | 358 TestFailedDrawsEventuallyForceDrawAfterNextCommit) { |
| 356 SchedulerSettings scheduler_settings; | 359 SchedulerSettings scheduler_settings; |
| 357 scheduler_settings.maximum_number_of_failed_draws_before_draw_is_forced_ = 1; | 360 scheduler_settings.maximum_number_of_failed_draws_before_draw_is_forced_ = 1; |
| 358 StateMachine state(scheduler_settings); | 361 StateMachine state(scheduler_settings); |
| 359 state.SetCanStart(); | 362 state.SetCanStart(); |
| 360 state.UpdateState(state.NextAction()); | 363 state.UpdateState(state.NextAction()); |
| 361 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 364 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 362 state.SetVisible(true); | 365 state.SetVisible(true); |
| 363 state.SetCanDraw(true); | 366 state.SetCanDraw(true); |
| 364 | 367 |
| 365 // Start a commit. | 368 // Start a commit. |
| 366 state.SetNeedsCommit(); | 369 state.SetNeedsCommit(); |
| 367 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 370 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 368 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 371 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 369 EXPECT_ACTION_UPDATE_STATE( | 372 EXPECT_ACTION_UPDATE_STATE( |
| 370 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 373 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 371 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 374 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 372 EXPECT_TRUE(state.CommitPending()); | 375 EXPECT_TRUE(state.CommitPending()); |
| 373 | 376 |
| 374 // Then initiate a draw. | 377 // Then initiate a draw. |
| 375 state.SetNeedsRedraw(true); | 378 state.SetNeedsRedraw(true); |
| 376 state.OnBeginImplFrameDeadline(); | 379 state.OnBeginImplFrameDeadline(); |
| 377 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 380 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 378 EXPECT_ACTION_UPDATE_STATE( | 381 EXPECT_ACTION_UPDATE_STATE( |
| 379 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 382 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 380 | 383 |
| 381 // Fail the draw. | 384 // Fail the draw. |
| 382 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); | 385 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); |
| 383 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 386 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 384 EXPECT_TRUE(state.BeginFrameNeeded()); | 387 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 385 EXPECT_TRUE(state.RedrawPending()); | 388 EXPECT_TRUE(state.RedrawPending()); |
| 386 // But the commit is ongoing. | 389 // But the commit is ongoing. |
| 387 EXPECT_TRUE(state.CommitPending()); | 390 EXPECT_TRUE(state.CommitPending()); |
| 388 | 391 |
| 389 // Finish the commit. Note, we should not yet be forcing a draw, but should | 392 // Finish the commit. Note, we should not yet be forcing a draw, but should |
| 390 // continue the commit as usual. | 393 // continue the commit as usual. |
| 391 state.NotifyBeginMainFrameStarted(); | 394 state.NotifyBeginMainFrameStarted(); |
| 392 state.NotifyReadyToCommit(); | 395 state.NotifyReadyToCommit(); |
| 393 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 396 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
| 394 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 397 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 395 EXPECT_TRUE(state.RedrawPending()); | 398 EXPECT_TRUE(state.RedrawPending()); |
| 396 | 399 |
| 397 // The redraw should be forced at the end of the next BeginImplFrame. | 400 // The redraw should be forced at the end of the next BeginImplFrame. |
| 398 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 401 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 399 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 402 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 400 EXPECT_ACTION_UPDATE_STATE( | 403 EXPECT_ACTION_UPDATE_STATE( |
| 401 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 404 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 402 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 405 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 403 state.OnBeginImplFrameDeadline(); | 406 state.OnBeginImplFrameDeadline(); |
| 404 EXPECT_ACTION_UPDATE_STATE( | 407 EXPECT_ACTION_UPDATE_STATE( |
| 405 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_FORCED); | 408 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_FORCED); |
| 406 state.DidSwapBuffers(); | 409 state.DidSwapBuffers(); |
| 407 state.DidSwapBuffersComplete(); | 410 state.DidSwapBuffersComplete(); |
| 408 } | 411 } |
| 409 | 412 |
| 410 TEST(SchedulerStateMachineTest, TestFailedDrawsDoNotRestartForcedDraw) { | 413 TEST(SchedulerStateMachineTest, TestFailedDrawsDoNotRestartForcedDraw) { |
| 411 SchedulerSettings scheduler_settings; | 414 SchedulerSettings scheduler_settings; |
| 412 int draw_limit = 1; | 415 int draw_limit = 1; |
| 413 scheduler_settings.maximum_number_of_failed_draws_before_draw_is_forced_ = | 416 scheduler_settings.maximum_number_of_failed_draws_before_draw_is_forced_ = |
| 414 draw_limit; | 417 draw_limit; |
| 415 scheduler_settings.impl_side_painting = true; | 418 scheduler_settings.impl_side_painting = true; |
| 416 StateMachine state(scheduler_settings); | 419 StateMachine state(scheduler_settings); |
| 417 state.SetCanStart(); | 420 state.SetCanStart(); |
| 418 state.UpdateState(state.NextAction()); | 421 state.UpdateState(state.NextAction()); |
| 419 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 422 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 420 state.SetVisible(true); | 423 state.SetVisible(true); |
| 421 state.SetCanDraw(true); | 424 state.SetCanDraw(true); |
| 422 | 425 |
| 423 // Start a commit. | 426 // Start a commit. |
| 424 state.SetNeedsCommit(); | 427 state.SetNeedsCommit(); |
| 425 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 428 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 426 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 429 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 427 EXPECT_ACTION_UPDATE_STATE( | 430 EXPECT_ACTION_UPDATE_STATE( |
| 428 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 431 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 429 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 432 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 430 EXPECT_TRUE(state.CommitPending()); | 433 EXPECT_TRUE(state.CommitPending()); |
| 431 | 434 |
| 432 // Then initiate a draw. | 435 // Then initiate a draw. |
| 433 state.SetNeedsRedraw(true); | 436 state.SetNeedsRedraw(true); |
| 434 state.OnBeginImplFrameDeadline(); | 437 state.OnBeginImplFrameDeadline(); |
| 435 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 438 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 436 EXPECT_ACTION_UPDATE_STATE( | 439 EXPECT_ACTION_UPDATE_STATE( |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 473 StateMachine state(default_scheduler_settings); | 476 StateMachine state(default_scheduler_settings); |
| 474 state.SetCanStart(); | 477 state.SetCanStart(); |
| 475 state.UpdateState(state.NextAction()); | 478 state.UpdateState(state.NextAction()); |
| 476 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 479 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 477 state.SetVisible(true); | 480 state.SetVisible(true); |
| 478 state.SetCanDraw(true); | 481 state.SetCanDraw(true); |
| 479 | 482 |
| 480 // Start a draw. | 483 // Start a draw. |
| 481 state.SetNeedsRedraw(true); | 484 state.SetNeedsRedraw(true); |
| 482 EXPECT_TRUE(state.BeginFrameNeeded()); | 485 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 483 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 486 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 484 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 487 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 485 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 488 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 486 state.OnBeginImplFrameDeadline(); | 489 state.OnBeginImplFrameDeadline(); |
| 487 EXPECT_TRUE(state.RedrawPending()); | 490 EXPECT_TRUE(state.RedrawPending()); |
| 488 EXPECT_ACTION_UPDATE_STATE( | 491 EXPECT_ACTION_UPDATE_STATE( |
| 489 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 492 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 490 | 493 |
| 491 // Failing the draw for animation checkerboards makes us require a commit. | 494 // Failing the draw for animation checkerboards makes us require a commit. |
| 492 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); | 495 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); |
| 493 EXPECT_ACTION_UPDATE_STATE( | 496 EXPECT_ACTION_UPDATE_STATE( |
| 494 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 497 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 495 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 498 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 496 EXPECT_TRUE(state.RedrawPending()); | 499 EXPECT_TRUE(state.RedrawPending()); |
| 497 | 500 |
| 498 // We should not be trying to draw again now, but we have a commit pending. | 501 // We should not be trying to draw again now, but we have a commit pending. |
| 499 EXPECT_TRUE(state.BeginFrameNeeded()); | 502 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 500 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 503 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 501 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 504 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 502 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 505 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 503 | 506 |
| 504 // We should try to draw again at the end of the next BeginImplFrame on | 507 // We should try to draw again at the end of the next BeginImplFrame on |
| 505 // the impl thread. | 508 // the impl thread. |
| 506 state.OnBeginImplFrameDeadline(); | 509 state.OnBeginImplFrameDeadline(); |
| 507 EXPECT_ACTION_UPDATE_STATE( | 510 EXPECT_ACTION_UPDATE_STATE( |
| 508 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 511 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 509 state.DidSwapBuffers(); | 512 state.DidSwapBuffers(); |
| 510 state.DidSwapBuffersComplete(); | 513 state.DidSwapBuffersComplete(); |
| 511 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 514 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 512 } | 515 } |
| 513 | 516 |
| 514 TEST(SchedulerStateMachineTest, TestDoestDrawTwiceInSameFrame) { | 517 TEST(SchedulerStateMachineTest, TestDoestDrawTwiceInSameFrame) { |
| 515 SchedulerSettings default_scheduler_settings; | 518 SchedulerSettings default_scheduler_settings; |
| 516 StateMachine state(default_scheduler_settings); | 519 StateMachine state(default_scheduler_settings); |
| 517 state.SetCanStart(); | 520 state.SetCanStart(); |
| 518 state.UpdateState(state.NextAction()); | 521 state.UpdateState(state.NextAction()); |
| 519 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 522 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 520 state.SetVisible(true); | 523 state.SetVisible(true); |
| 521 state.SetCanDraw(true); | 524 state.SetCanDraw(true); |
| 522 state.SetNeedsRedraw(true); | 525 state.SetNeedsRedraw(true); |
| 523 | 526 |
| 524 // Draw the first frame. | 527 // Draw the first frame. |
| 525 EXPECT_TRUE(state.BeginFrameNeeded()); | 528 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 526 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 529 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 527 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 530 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 528 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 531 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 529 | 532 |
| 530 state.OnBeginImplFrameDeadline(); | 533 state.OnBeginImplFrameDeadline(); |
| 531 EXPECT_ACTION_UPDATE_STATE( | 534 EXPECT_ACTION_UPDATE_STATE( |
| 532 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 535 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 533 state.DidSwapBuffers(); | 536 state.DidSwapBuffers(); |
| 534 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); | 537 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); |
| 535 state.DidSwapBuffersComplete(); | 538 state.DidSwapBuffersComplete(); |
| 536 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 539 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 537 | 540 |
| 538 // Before the next BeginImplFrame, set needs redraw again. | 541 // Before the next BeginImplFrame, set needs redraw again. |
| 539 // This should not redraw until the next BeginImplFrame. | 542 // This should not redraw until the next BeginImplFrame. |
| 540 state.SetNeedsRedraw(true); | 543 state.SetNeedsRedraw(true); |
| 541 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 544 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 542 | 545 |
| 543 // Move to another frame. This should now draw. | 546 // Move to another frame. This should now draw. |
| 544 EXPECT_TRUE(state.BeginFrameNeeded()); | 547 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 545 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 548 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 546 | 549 |
| 547 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 550 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 548 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 551 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 549 | 552 |
| 550 state.OnBeginImplFrameDeadline(); | 553 state.OnBeginImplFrameDeadline(); |
| 551 EXPECT_ACTION_UPDATE_STATE( | 554 EXPECT_ACTION_UPDATE_STATE( |
| 552 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 555 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 553 state.DidSwapBuffers(); | 556 state.DidSwapBuffers(); |
| 554 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); | 557 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); |
| 555 state.DidSwapBuffersComplete(); | 558 state.DidSwapBuffersComplete(); |
| (...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 673 // There shouldn't be any drawing regardless of BeginImplFrame. | 676 // There shouldn't be any drawing regardless of BeginImplFrame. |
| 674 for (size_t j = 0; j < 2; ++j) { | 677 for (size_t j = 0; j < 2; ++j) { |
| 675 StateMachine state(default_scheduler_settings); | 678 StateMachine state(default_scheduler_settings); |
| 676 state.SetCanStart(); | 679 state.SetCanStart(); |
| 677 state.UpdateState(state.NextAction()); | 680 state.UpdateState(state.NextAction()); |
| 678 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 681 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 679 state.SetCommitState(all_commit_states[i]); | 682 state.SetCommitState(all_commit_states[i]); |
| 680 state.SetVisible(false); | 683 state.SetVisible(false); |
| 681 state.SetNeedsRedraw(true); | 684 state.SetNeedsRedraw(true); |
| 682 if (j == 1) | 685 if (j == 1) |
| 683 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 686 state.OnBeginImplFrame( |
| 687 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 684 | 688 |
| 685 state.SetCanDraw(false); | 689 state.SetCanDraw(false); |
| 686 EXPECT_NE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE, | 690 EXPECT_NE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE, |
| 687 state.NextAction()); | 691 state.NextAction()); |
| 688 } | 692 } |
| 689 } | 693 } |
| 690 } | 694 } |
| 691 | 695 |
| 692 TEST(SchedulerStateMachineTest, | 696 TEST(SchedulerStateMachineTest, |
| 693 TestCanRedrawWithWaitingForFirstDrawMakesProgress) { | 697 TestCanRedrawWithWaitingForFirstDrawMakesProgress) { |
| 694 SchedulerSettings default_scheduler_settings; | 698 SchedulerSettings default_scheduler_settings; |
| 695 StateMachine state(default_scheduler_settings); | 699 StateMachine state(default_scheduler_settings); |
| 696 state.SetCanStart(); | 700 state.SetCanStart(); |
| 697 state.UpdateState(state.NextAction()); | 701 state.UpdateState(state.NextAction()); |
| 698 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 702 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 699 | 703 |
| 700 state.SetActiveTreeNeedsFirstDraw(true); | 704 state.SetActiveTreeNeedsFirstDraw(true); |
| 701 state.SetNeedsCommit(); | 705 state.SetNeedsCommit(); |
| 702 state.SetNeedsRedraw(true); | 706 state.SetNeedsRedraw(true); |
| 703 state.SetVisible(true); | 707 state.SetVisible(true); |
| 704 state.SetCanDraw(false); | 708 state.SetCanDraw(false); |
| 705 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 709 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 706 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 710 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 707 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT); | 711 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT); |
| 708 EXPECT_ACTION_UPDATE_STATE( | 712 EXPECT_ACTION_UPDATE_STATE( |
| 709 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 713 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 710 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 714 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 711 state.NotifyBeginMainFrameStarted(); | 715 state.NotifyBeginMainFrameStarted(); |
| 712 state.NotifyReadyToCommit(); | 716 state.NotifyReadyToCommit(); |
| 713 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 717 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
| 714 state.OnBeginImplFrameDeadline(); | 718 state.OnBeginImplFrameDeadline(); |
| 715 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 719 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 716 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT); | 720 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT); |
| 717 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 721 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 718 } | 722 } |
| 719 | 723 |
| 720 TEST(SchedulerStateMachineTest, TestSetNeedsCommitIsNotLost) { | 724 TEST(SchedulerStateMachineTest, TestSetNeedsCommitIsNotLost) { |
| 721 SchedulerSettings scheduler_settings; | 725 SchedulerSettings scheduler_settings; |
| 722 StateMachine state(scheduler_settings); | 726 StateMachine state(scheduler_settings); |
| 723 state.SetCanStart(); | 727 state.SetCanStart(); |
| 724 state.UpdateState(state.NextAction()); | 728 state.UpdateState(state.NextAction()); |
| 725 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 729 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 726 state.SetNeedsCommit(); | 730 state.SetNeedsCommit(); |
| 727 state.SetVisible(true); | 731 state.SetVisible(true); |
| 728 state.SetCanDraw(true); | 732 state.SetCanDraw(true); |
| 729 | 733 |
| 730 EXPECT_TRUE(state.BeginFrameNeeded()); | 734 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 731 | 735 |
| 732 // Begin the frame. | 736 // Begin the frame. |
| 733 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 737 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 734 EXPECT_ACTION_UPDATE_STATE( | 738 EXPECT_ACTION_UPDATE_STATE( |
| 735 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 739 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 736 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT, | 740 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT, |
| 737 state.CommitState()); | 741 state.CommitState()); |
| 738 | 742 |
| 739 // Now, while the frame is in progress, set another commit. | 743 // Now, while the frame is in progress, set another commit. |
| 740 state.SetNeedsCommit(); | 744 state.SetNeedsCommit(); |
| 741 EXPECT_TRUE(state.NeedsCommit()); | 745 EXPECT_TRUE(state.NeedsCommit()); |
| 742 | 746 |
| 743 // Let the frame finish. | 747 // Let the frame finish. |
| (...skipping 15 matching lines...) Expand all Loading... |
| 759 state.OnBeginImplFrameDeadline(); | 763 state.OnBeginImplFrameDeadline(); |
| 760 EXPECT_EQ(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE, | 764 EXPECT_EQ(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE, |
| 761 state.begin_impl_frame_state()); | 765 state.begin_impl_frame_state()); |
| 762 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction()); | 766 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction()); |
| 763 | 767 |
| 764 state.OnBeginImplFrameIdle(); | 768 state.OnBeginImplFrameIdle(); |
| 765 EXPECT_EQ(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE, | 769 EXPECT_EQ(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE, |
| 766 state.begin_impl_frame_state()); | 770 state.begin_impl_frame_state()); |
| 767 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction()); | 771 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction()); |
| 768 | 772 |
| 769 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 773 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 770 EXPECT_EQ(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING, | 774 EXPECT_EQ(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING, |
| 771 state.begin_impl_frame_state()); | 775 state.begin_impl_frame_state()); |
| 772 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction()); | 776 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction()); |
| 773 | 777 |
| 774 // Finish the commit, then make sure we start the next commit immediately | 778 // Finish the commit, then make sure we start the next commit immediately |
| 775 // and draw on the next BeginImplFrame. | 779 // and draw on the next BeginImplFrame. |
| 776 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 780 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
| 777 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 781 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 778 EXPECT_ACTION_UPDATE_STATE( | 782 EXPECT_ACTION_UPDATE_STATE( |
| 779 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 783 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 796 state.SetCanStart(); | 800 state.SetCanStart(); |
| 797 state.UpdateState(state.NextAction()); | 801 state.UpdateState(state.NextAction()); |
| 798 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 802 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 799 state.SetVisible(true); | 803 state.SetVisible(true); |
| 800 state.SetCanDraw(true); | 804 state.SetCanDraw(true); |
| 801 | 805 |
| 802 // Start clean and set commit. | 806 // Start clean and set commit. |
| 803 state.SetNeedsCommit(); | 807 state.SetNeedsCommit(); |
| 804 | 808 |
| 805 // Begin the frame. | 809 // Begin the frame. |
| 806 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 810 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 807 EXPECT_ACTION_UPDATE_STATE( | 811 EXPECT_ACTION_UPDATE_STATE( |
| 808 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 812 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 809 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT, | 813 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT, |
| 810 state.CommitState()); | 814 state.CommitState()); |
| 811 EXPECT_FALSE(state.NeedsCommit()); | 815 EXPECT_FALSE(state.NeedsCommit()); |
| 812 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 816 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 813 | 817 |
| 814 // Tell the scheduler the frame finished. | 818 // Tell the scheduler the frame finished. |
| 815 state.NotifyBeginMainFrameStarted(); | 819 state.NotifyBeginMainFrameStarted(); |
| 816 state.NotifyReadyToCommit(); | 820 state.NotifyReadyToCommit(); |
| (...skipping 29 matching lines...) Expand all Loading... |
| 846 state.SetCanStart(); | 850 state.SetCanStart(); |
| 847 state.UpdateState(state.NextAction()); | 851 state.UpdateState(state.NextAction()); |
| 848 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 852 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 849 state.SetVisible(true); | 853 state.SetVisible(true); |
| 850 state.SetCanDraw(true); | 854 state.SetCanDraw(true); |
| 851 | 855 |
| 852 // Start clean and set commit. | 856 // Start clean and set commit. |
| 853 state.SetNeedsCommit(); | 857 state.SetNeedsCommit(); |
| 854 | 858 |
| 855 // Begin the frame. | 859 // Begin the frame. |
| 856 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 860 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 857 EXPECT_ACTION_UPDATE_STATE( | 861 EXPECT_ACTION_UPDATE_STATE( |
| 858 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 862 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 859 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT, | 863 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT, |
| 860 state.CommitState()); | 864 state.CommitState()); |
| 861 EXPECT_FALSE(state.NeedsCommit()); | 865 EXPECT_FALSE(state.NeedsCommit()); |
| 862 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 866 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 863 | 867 |
| 864 // Request another commit while the commit is in flight. | 868 // Request another commit while the commit is in flight. |
| 865 state.SetNeedsCommit(); | 869 state.SetNeedsCommit(); |
| 866 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 870 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 887 state.DidSwapBuffers(); | 891 state.DidSwapBuffers(); |
| 888 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); | 892 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); |
| 889 state.DidSwapBuffersComplete(); | 893 state.DidSwapBuffersComplete(); |
| 890 | 894 |
| 891 // Should be synchronized, no draw needed, no action needed. | 895 // Should be synchronized, no draw needed, no action needed. |
| 892 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 896 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 893 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); | 897 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); |
| 894 EXPECT_FALSE(state.needs_redraw()); | 898 EXPECT_FALSE(state.needs_redraw()); |
| 895 | 899 |
| 896 // Next BeginImplFrame should initiate second commit. | 900 // Next BeginImplFrame should initiate second commit. |
| 897 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 901 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 898 EXPECT_ACTION_UPDATE_STATE( | 902 EXPECT_ACTION_UPDATE_STATE( |
| 899 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 903 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 900 } | 904 } |
| 901 | 905 |
| 902 TEST(SchedulerStateMachineTest, TestRequestCommitInvisible) { | 906 TEST(SchedulerStateMachineTest, TestRequestCommitInvisible) { |
| 903 SchedulerSettings default_scheduler_settings; | 907 SchedulerSettings default_scheduler_settings; |
| 904 StateMachine state(default_scheduler_settings); | 908 StateMachine state(default_scheduler_settings); |
| 905 state.SetCanStart(); | 909 state.SetCanStart(); |
| 906 state.UpdateState(state.NextAction()); | 910 state.UpdateState(state.NextAction()); |
| 907 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 911 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 908 state.SetNeedsCommit(); | 912 state.SetNeedsCommit(); |
| 909 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 913 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 910 } | 914 } |
| 911 | 915 |
| 912 TEST(SchedulerStateMachineTest, TestGoesInvisibleBeforeFinishCommit) { | 916 TEST(SchedulerStateMachineTest, TestGoesInvisibleBeforeFinishCommit) { |
| 913 SchedulerSettings default_scheduler_settings; | 917 SchedulerSettings default_scheduler_settings; |
| 914 StateMachine state(default_scheduler_settings); | 918 StateMachine state(default_scheduler_settings); |
| 915 state.SetCanStart(); | 919 state.SetCanStart(); |
| 916 state.UpdateState(state.NextAction()); | 920 state.UpdateState(state.NextAction()); |
| 917 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 921 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 918 state.SetVisible(true); | 922 state.SetVisible(true); |
| 919 state.SetCanDraw(true); | 923 state.SetCanDraw(true); |
| 920 | 924 |
| 921 // Start clean and set commit. | 925 // Start clean and set commit. |
| 922 state.SetNeedsCommit(); | 926 state.SetNeedsCommit(); |
| 923 | 927 |
| 924 // Begin the frame while visible. | 928 // Begin the frame while visible. |
| 925 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 929 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 926 EXPECT_ACTION_UPDATE_STATE( | 930 EXPECT_ACTION_UPDATE_STATE( |
| 927 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 931 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 928 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT, | 932 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT, |
| 929 state.CommitState()); | 933 state.CommitState()); |
| 930 EXPECT_FALSE(state.NeedsCommit()); | 934 EXPECT_FALSE(state.NeedsCommit()); |
| 931 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 935 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 932 | 936 |
| 933 // Become invisible and abort BeginMainFrame. | 937 // Become invisible and abort BeginMainFrame. |
| 934 state.SetVisible(false); | 938 state.SetVisible(false); |
| 935 state.BeginMainFrameAborted(false); | 939 state.BeginMainFrameAborted(false); |
| 936 | 940 |
| 937 // We should now be back in the idle state as if we never started the frame. | 941 // We should now be back in the idle state as if we never started the frame. |
| 938 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); | 942 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); |
| 939 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 943 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 940 | 944 |
| 941 // We shouldn't do anything on the BeginImplFrame deadline. | 945 // We shouldn't do anything on the BeginImplFrame deadline. |
| 942 state.OnBeginImplFrameDeadline(); | 946 state.OnBeginImplFrameDeadline(); |
| 943 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 947 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 944 | 948 |
| 945 // Become visible again. | 949 // Become visible again. |
| 946 state.SetVisible(true); | 950 state.SetVisible(true); |
| 947 | 951 |
| 948 // Although we have aborted on this frame and haven't cancelled the commit | 952 // Although we have aborted on this frame and haven't cancelled the commit |
| 949 // (i.e. need another), don't send another BeginMainFrame yet. | 953 // (i.e. need another), don't send another BeginMainFrame yet. |
| 950 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); | 954 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); |
| 951 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); | 955 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); |
| 952 EXPECT_TRUE(state.NeedsCommit()); | 956 EXPECT_TRUE(state.NeedsCommit()); |
| 953 | 957 |
| 954 // Start a new frame. | 958 // Start a new frame. |
| 955 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 959 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 956 EXPECT_ACTION_UPDATE_STATE( | 960 EXPECT_ACTION_UPDATE_STATE( |
| 957 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 961 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 958 | 962 |
| 959 // We should be starting the commit now. | 963 // We should be starting the commit now. |
| 960 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT, | 964 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT, |
| 961 state.CommitState()); | 965 state.CommitState()); |
| 962 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 966 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 963 } | 967 } |
| 964 | 968 |
| 965 TEST(SchedulerStateMachineTest, AbortBeginMainFrameAndCancelCommit) { | 969 TEST(SchedulerStateMachineTest, AbortBeginMainFrameAndCancelCommit) { |
| (...skipping 18 matching lines...) Expand all Loading... |
| 984 // Abort the commit, cancelling future commits. | 988 // Abort the commit, cancelling future commits. |
| 985 state.BeginMainFrameAborted(true); | 989 state.BeginMainFrameAborted(true); |
| 986 | 990 |
| 987 // Verify that another commit doesn't start on the same frame. | 991 // Verify that another commit doesn't start on the same frame. |
| 988 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); | 992 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); |
| 989 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); | 993 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); |
| 990 EXPECT_FALSE(state.NeedsCommit()); | 994 EXPECT_FALSE(state.NeedsCommit()); |
| 991 | 995 |
| 992 // Start a new frame; draw because this is the first frame since output | 996 // Start a new frame; draw because this is the first frame since output |
| 993 // surface init'd. | 997 // surface init'd. |
| 994 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 998 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 995 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 999 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 996 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1000 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 997 state.OnBeginImplFrameDeadline(); | 1001 state.OnBeginImplFrameDeadline(); |
| 998 EXPECT_ACTION_UPDATE_STATE( | 1002 EXPECT_ACTION_UPDATE_STATE( |
| 999 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1003 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 1000 state.DidSwapBuffers(); | 1004 state.DidSwapBuffers(); |
| 1001 state.DidSwapBuffersComplete(); | 1005 state.DidSwapBuffersComplete(); |
| 1002 | 1006 |
| 1003 // Verify another commit doesn't start on another frame either. | 1007 // Verify another commit doesn't start on another frame either. |
| 1004 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); | 1008 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1036 state.SetVisible(false); | 1040 state.SetVisible(false); |
| 1037 state.BeginMainFrameAborted(true); | 1041 state.BeginMainFrameAborted(true); |
| 1038 | 1042 |
| 1039 // Verify that another commit doesn't start on the same frame. | 1043 // Verify that another commit doesn't start on the same frame. |
| 1040 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); | 1044 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); |
| 1041 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); | 1045 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); |
| 1042 EXPECT_FALSE(state.NeedsCommit()); | 1046 EXPECT_FALSE(state.NeedsCommit()); |
| 1043 | 1047 |
| 1044 // Become visible and start a new frame. | 1048 // Become visible and start a new frame. |
| 1045 state.SetVisible(true); | 1049 state.SetVisible(true); |
| 1046 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 1050 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 1047 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1051 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 1048 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1052 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1049 | 1053 |
| 1050 // Draw because this is the first frame since output surface init'd. | 1054 // Draw because this is the first frame since output surface init'd. |
| 1051 state.OnBeginImplFrameDeadline(); | 1055 state.OnBeginImplFrameDeadline(); |
| 1052 EXPECT_ACTION_UPDATE_STATE( | 1056 EXPECT_ACTION_UPDATE_STATE( |
| 1053 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1057 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 1054 state.DidSwapBuffers(); | 1058 state.DidSwapBuffers(); |
| 1055 state.DidSwapBuffersComplete(); | 1059 state.DidSwapBuffersComplete(); |
| 1056 | 1060 |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1101 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); | 1105 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); |
| 1102 EXPECT_TRUE(state.NeedsCommit()); | 1106 EXPECT_TRUE(state.NeedsCommit()); |
| 1103 | 1107 |
| 1104 // Become visible but nothing happens until the next frame. | 1108 // Become visible but nothing happens until the next frame. |
| 1105 state.SetVisible(true); | 1109 state.SetVisible(true); |
| 1106 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); | 1110 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); |
| 1107 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); | 1111 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); |
| 1108 EXPECT_TRUE(state.NeedsCommit()); | 1112 EXPECT_TRUE(state.NeedsCommit()); |
| 1109 | 1113 |
| 1110 // We should get that commit when we begin the next frame. | 1114 // We should get that commit when we begin the next frame. |
| 1111 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 1115 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 1112 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1116 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 1113 EXPECT_ACTION_UPDATE_STATE( | 1117 EXPECT_ACTION_UPDATE_STATE( |
| 1114 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1118 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 1115 } | 1119 } |
| 1116 | 1120 |
| 1117 TEST(SchedulerStateMachineTest, | 1121 TEST(SchedulerStateMachineTest, |
| 1118 AbortBeginMainFrameAndRequestCommitAndBeginImplFrameWhenInvisible) { | 1122 AbortBeginMainFrameAndRequestCommitAndBeginImplFrameWhenInvisible) { |
| 1119 SchedulerSettings default_scheduler_settings; | 1123 SchedulerSettings default_scheduler_settings; |
| 1120 StateMachine state(default_scheduler_settings); | 1124 StateMachine state(default_scheduler_settings); |
| 1121 state.SetCanStart(); | 1125 state.SetCanStart(); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 1138 state.SetVisible(false); | 1142 state.SetVisible(false); |
| 1139 state.BeginMainFrameAborted(true); | 1143 state.BeginMainFrameAborted(true); |
| 1140 | 1144 |
| 1141 // Asking for a commit while not visible won't make it happen. | 1145 // Asking for a commit while not visible won't make it happen. |
| 1142 state.SetNeedsCommit(); | 1146 state.SetNeedsCommit(); |
| 1143 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); | 1147 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); |
| 1144 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); | 1148 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); |
| 1145 EXPECT_TRUE(state.NeedsCommit()); | 1149 EXPECT_TRUE(state.NeedsCommit()); |
| 1146 | 1150 |
| 1147 // Begin a frame when not visible, the scheduler animates but does not commit. | 1151 // Begin a frame when not visible, the scheduler animates but does not commit. |
| 1148 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 1152 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 1149 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); | 1153 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); |
| 1150 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1154 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 1151 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); | 1155 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); |
| 1152 EXPECT_TRUE(state.NeedsCommit()); | 1156 EXPECT_TRUE(state.NeedsCommit()); |
| 1153 | 1157 |
| 1154 // Become visible and the requested commit happens immediately. | 1158 // Become visible and the requested commit happens immediately. |
| 1155 state.SetVisible(true); | 1159 state.SetVisible(true); |
| 1156 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); | 1160 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); |
| 1157 EXPECT_ACTION_UPDATE_STATE( | 1161 EXPECT_ACTION_UPDATE_STATE( |
| 1158 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1162 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 1159 } | 1163 } |
| 1160 | 1164 |
| 1161 TEST(SchedulerStateMachineTest, TestFirstContextCreation) { | 1165 TEST(SchedulerStateMachineTest, TestFirstContextCreation) { |
| 1162 SchedulerSettings default_scheduler_settings; | 1166 SchedulerSettings default_scheduler_settings; |
| 1163 StateMachine state(default_scheduler_settings); | 1167 StateMachine state(default_scheduler_settings); |
| 1164 state.SetCanStart(); | 1168 state.SetCanStart(); |
| 1165 state.SetVisible(true); | 1169 state.SetVisible(true); |
| 1166 state.SetCanDraw(true); | 1170 state.SetCanDraw(true); |
| 1167 | 1171 |
| 1168 EXPECT_ACTION_UPDATE_STATE( | 1172 EXPECT_ACTION_UPDATE_STATE( |
| 1169 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); | 1173 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); |
| 1170 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 1174 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 1171 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1175 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1172 | 1176 |
| 1173 // Check that the first init does not SetNeedsCommit. | 1177 // Check that the first init does not SetNeedsCommit. |
| 1174 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 1178 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 1175 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1179 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1176 state.OnBeginImplFrameDeadline(); | 1180 state.OnBeginImplFrameDeadline(); |
| 1177 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1181 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1178 | 1182 |
| 1179 // Check that a needs commit initiates a BeginMainFrame. | 1183 // Check that a needs commit initiates a BeginMainFrame. |
| 1180 state.SetNeedsCommit(); | 1184 state.SetNeedsCommit(); |
| 1181 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 1185 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 1182 EXPECT_ACTION_UPDATE_STATE( | 1186 EXPECT_ACTION_UPDATE_STATE( |
| 1183 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1187 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 1184 } | 1188 } |
| 1185 | 1189 |
| 1186 TEST(SchedulerStateMachineTest, TestContextLostWhenCompletelyIdle) { | 1190 TEST(SchedulerStateMachineTest, TestContextLostWhenCompletelyIdle) { |
| 1187 SchedulerSettings default_scheduler_settings; | 1191 SchedulerSettings default_scheduler_settings; |
| 1188 StateMachine state(default_scheduler_settings); | 1192 StateMachine state(default_scheduler_settings); |
| 1189 state.SetCanStart(); | 1193 state.SetCanStart(); |
| 1190 state.UpdateState(state.NextAction()); | 1194 state.UpdateState(state.NextAction()); |
| 1191 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 1195 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 1192 | 1196 |
| 1193 state.SetVisible(true); | 1197 state.SetVisible(true); |
| 1194 state.SetCanDraw(true); | 1198 state.SetCanDraw(true); |
| 1195 | 1199 |
| 1196 EXPECT_NE(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION, | 1200 EXPECT_NE(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION, |
| 1197 state.NextAction()); | 1201 state.NextAction()); |
| 1198 state.DidLoseOutputSurface(); | 1202 state.DidLoseOutputSurface(); |
| 1199 | 1203 |
| 1200 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION, | 1204 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION, |
| 1201 state.NextAction()); | 1205 state.NextAction()); |
| 1202 state.UpdateState(state.NextAction()); | 1206 state.UpdateState(state.NextAction()); |
| 1203 | 1207 |
| 1204 // Once context recreation begins, nothing should happen. | 1208 // Once context recreation begins, nothing should happen. |
| 1205 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1209 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1206 | 1210 |
| 1207 // Recreate the context. | 1211 // Recreate the context. |
| 1208 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 1212 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 1209 | 1213 |
| 1210 // When the context is recreated, we should begin a commit. | 1214 // When the context is recreated, we should begin a commit. |
| 1211 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 1215 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 1212 EXPECT_ACTION_UPDATE_STATE( | 1216 EXPECT_ACTION_UPDATE_STATE( |
| 1213 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1217 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 1214 } | 1218 } |
| 1215 | 1219 |
| 1216 TEST(SchedulerStateMachineTest, | 1220 TEST(SchedulerStateMachineTest, |
| 1217 TestContextLostWhenIdleAndCommitRequestedWhileRecreating) { | 1221 TestContextLostWhenIdleAndCommitRequestedWhileRecreating) { |
| 1218 SchedulerSettings default_scheduler_settings; | 1222 SchedulerSettings default_scheduler_settings; |
| 1219 StateMachine state(default_scheduler_settings); | 1223 StateMachine state(default_scheduler_settings); |
| 1220 state.SetCanStart(); | 1224 state.SetCanStart(); |
| 1221 state.UpdateState(state.NextAction()); | 1225 state.UpdateState(state.NextAction()); |
| 1222 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 1226 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 1223 state.SetVisible(true); | 1227 state.SetVisible(true); |
| 1224 state.SetCanDraw(true); | 1228 state.SetCanDraw(true); |
| 1225 | 1229 |
| 1226 EXPECT_NE(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION, | 1230 EXPECT_NE(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION, |
| 1227 state.NextAction()); | 1231 state.NextAction()); |
| 1228 state.DidLoseOutputSurface(); | 1232 state.DidLoseOutputSurface(); |
| 1229 | 1233 |
| 1230 EXPECT_ACTION_UPDATE_STATE( | 1234 EXPECT_ACTION_UPDATE_STATE( |
| 1231 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); | 1235 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); |
| 1232 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1236 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1233 | 1237 |
| 1234 // Once context recreation begins, nothing should happen. | 1238 // Once context recreation begins, nothing should happen. |
| 1235 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 1239 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 1236 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1240 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1237 state.OnBeginImplFrameDeadline(); | 1241 state.OnBeginImplFrameDeadline(); |
| 1238 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1242 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1239 | 1243 |
| 1240 // While context is recreating, commits shouldn't begin. | 1244 // While context is recreating, commits shouldn't begin. |
| 1241 state.SetNeedsCommit(); | 1245 state.SetNeedsCommit(); |
| 1242 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 1246 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 1243 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1247 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1244 state.OnBeginImplFrameDeadline(); | 1248 state.OnBeginImplFrameDeadline(); |
| 1245 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1249 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1246 | 1250 |
| 1247 // Recreate the context | 1251 // Recreate the context |
| 1248 state.DidCreateAndInitializeOutputSurface(); | 1252 state.DidCreateAndInitializeOutputSurface(); |
| 1249 EXPECT_FALSE(state.RedrawPending()); | 1253 EXPECT_FALSE(state.RedrawPending()); |
| 1250 | 1254 |
| 1251 // When the context is recreated, we should begin a commit | 1255 // When the context is recreated, we should begin a commit |
| 1252 EXPECT_ACTION_UPDATE_STATE( | 1256 EXPECT_ACTION_UPDATE_STATE( |
| 1253 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1257 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 1254 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1258 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1255 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT, | 1259 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT, |
| 1256 state.CommitState()); | 1260 state.CommitState()); |
| 1257 | 1261 |
| 1258 state.NotifyBeginMainFrameStarted(); | 1262 state.NotifyBeginMainFrameStarted(); |
| 1259 state.NotifyReadyToCommit(); | 1263 state.NotifyReadyToCommit(); |
| 1260 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 1264 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
| 1261 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1265 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1262 // Finishing the first commit after initializing an output surface should | 1266 // Finishing the first commit after initializing an output surface should |
| 1263 // automatically cause a redraw. | 1267 // automatically cause a redraw. |
| 1264 EXPECT_TRUE(state.RedrawPending()); | 1268 EXPECT_TRUE(state.RedrawPending()); |
| 1265 | 1269 |
| 1266 // Once the context is recreated, whether we draw should be based on | 1270 // Once the context is recreated, whether we draw should be based on |
| 1267 // SetCanDraw. | 1271 // SetCanDraw. |
| 1268 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 1272 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 1269 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1273 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 1270 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1274 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1271 state.OnBeginImplFrameDeadline(); | 1275 state.OnBeginImplFrameDeadline(); |
| 1272 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE, | 1276 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE, |
| 1273 state.NextAction()); | 1277 state.NextAction()); |
| 1274 state.SetCanDraw(false); | 1278 state.SetCanDraw(false); |
| 1275 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT, | 1279 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT, |
| 1276 state.NextAction()); | 1280 state.NextAction()); |
| 1277 state.SetCanDraw(true); | 1281 state.SetCanDraw(true); |
| 1278 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE, | 1282 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE, |
| 1279 state.NextAction()); | 1283 state.NextAction()); |
| 1280 } | 1284 } |
| 1281 | 1285 |
| 1282 TEST(SchedulerStateMachineTest, TestContextLostWhileCommitInProgress) { | 1286 TEST(SchedulerStateMachineTest, TestContextLostWhileCommitInProgress) { |
| 1283 SchedulerSettings scheduler_settings; | 1287 SchedulerSettings scheduler_settings; |
| 1284 StateMachine state(scheduler_settings); | 1288 StateMachine state(scheduler_settings); |
| 1285 state.SetCanStart(); | 1289 state.SetCanStart(); |
| 1286 state.UpdateState(state.NextAction()); | 1290 state.UpdateState(state.NextAction()); |
| 1287 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 1291 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 1288 state.SetVisible(true); | 1292 state.SetVisible(true); |
| 1289 state.SetCanDraw(true); | 1293 state.SetCanDraw(true); |
| 1290 | 1294 |
| 1291 // Get a commit in flight. | 1295 // Get a commit in flight. |
| 1292 state.SetNeedsCommit(); | 1296 state.SetNeedsCommit(); |
| 1293 | 1297 |
| 1294 // Set damage and expect a draw. | 1298 // Set damage and expect a draw. |
| 1295 state.SetNeedsRedraw(true); | 1299 state.SetNeedsRedraw(true); |
| 1296 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 1300 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 1297 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1301 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 1298 EXPECT_ACTION_UPDATE_STATE( | 1302 EXPECT_ACTION_UPDATE_STATE( |
| 1299 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1303 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 1300 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1304 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1301 state.OnBeginImplFrameDeadline(); | 1305 state.OnBeginImplFrameDeadline(); |
| 1302 EXPECT_ACTION_UPDATE_STATE( | 1306 EXPECT_ACTION_UPDATE_STATE( |
| 1303 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1307 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 1304 state.DidSwapBuffers(); | 1308 state.DidSwapBuffers(); |
| 1305 state.DidSwapBuffersComplete(); | 1309 state.DidSwapBuffersComplete(); |
| 1306 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1310 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 1321 // waiting for the first draw to unblock the main thread. | 1325 // waiting for the first draw to unblock the main thread. |
| 1322 EXPECT_TRUE(state.active_tree_needs_first_draw()); | 1326 EXPECT_TRUE(state.active_tree_needs_first_draw()); |
| 1323 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT); | 1327 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT); |
| 1324 | 1328 |
| 1325 // Expect to begin context recreation only in BEGIN_IMPL_FRAME_STATE_IDLE | 1329 // Expect to begin context recreation only in BEGIN_IMPL_FRAME_STATE_IDLE |
| 1326 EXPECT_EQ(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE, | 1330 EXPECT_EQ(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE, |
| 1327 state.begin_impl_frame_state()); | 1331 state.begin_impl_frame_state()); |
| 1328 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION, | 1332 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION, |
| 1329 state.NextAction()); | 1333 state.NextAction()); |
| 1330 | 1334 |
| 1331 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 1335 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 1332 EXPECT_EQ(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING, | 1336 EXPECT_EQ(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING, |
| 1333 state.begin_impl_frame_state()); | 1337 state.begin_impl_frame_state()); |
| 1334 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); | 1338 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); |
| 1335 | 1339 |
| 1336 state.OnBeginImplFrameDeadlinePending(); | 1340 state.OnBeginImplFrameDeadlinePending(); |
| 1337 EXPECT_EQ(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME, | 1341 EXPECT_EQ(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME, |
| 1338 state.begin_impl_frame_state()); | 1342 state.begin_impl_frame_state()); |
| 1339 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); | 1343 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); |
| 1340 | 1344 |
| 1341 state.OnBeginImplFrameDeadline(); | 1345 state.OnBeginImplFrameDeadline(); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 1353 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 1357 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 1354 state.SetVisible(true); | 1358 state.SetVisible(true); |
| 1355 state.SetCanDraw(true); | 1359 state.SetCanDraw(true); |
| 1356 | 1360 |
| 1357 // Get a commit in flight. | 1361 // Get a commit in flight. |
| 1358 state.SetNeedsCommit(); | 1362 state.SetNeedsCommit(); |
| 1359 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1363 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1360 | 1364 |
| 1361 // Set damage and expect a draw. | 1365 // Set damage and expect a draw. |
| 1362 state.SetNeedsRedraw(true); | 1366 state.SetNeedsRedraw(true); |
| 1363 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 1367 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 1364 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1368 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 1365 EXPECT_ACTION_UPDATE_STATE( | 1369 EXPECT_ACTION_UPDATE_STATE( |
| 1366 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1370 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 1367 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1371 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1368 state.OnBeginImplFrameDeadline(); | 1372 state.OnBeginImplFrameDeadline(); |
| 1369 EXPECT_ACTION_UPDATE_STATE( | 1373 EXPECT_ACTION_UPDATE_STATE( |
| 1370 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1374 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 1371 state.DidSwapBuffers(); | 1375 state.DidSwapBuffers(); |
| 1372 state.DidSwapBuffersComplete(); | 1376 state.DidSwapBuffersComplete(); |
| 1373 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1377 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 1388 | 1392 |
| 1389 // Because the output surface is missing, we expect the draw to abort. | 1393 // Because the output surface is missing, we expect the draw to abort. |
| 1390 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT); | 1394 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT); |
| 1391 | 1395 |
| 1392 // Expect to begin context recreation only in BEGIN_IMPL_FRAME_STATE_IDLE | 1396 // Expect to begin context recreation only in BEGIN_IMPL_FRAME_STATE_IDLE |
| 1393 EXPECT_EQ(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE, | 1397 EXPECT_EQ(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE, |
| 1394 state.begin_impl_frame_state()); | 1398 state.begin_impl_frame_state()); |
| 1395 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION, | 1399 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION, |
| 1396 state.NextAction()); | 1400 state.NextAction()); |
| 1397 | 1401 |
| 1398 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 1402 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 1399 EXPECT_EQ(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING, | 1403 EXPECT_EQ(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING, |
| 1400 state.begin_impl_frame_state()); | 1404 state.begin_impl_frame_state()); |
| 1401 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); | 1405 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); |
| 1402 | 1406 |
| 1403 state.OnBeginImplFrameDeadlinePending(); | 1407 state.OnBeginImplFrameDeadlinePending(); |
| 1404 EXPECT_EQ(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME, | 1408 EXPECT_EQ(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME, |
| 1405 state.begin_impl_frame_state()); | 1409 state.begin_impl_frame_state()); |
| 1406 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); | 1410 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); |
| 1407 | 1411 |
| 1408 state.OnBeginImplFrameDeadline(); | 1412 state.OnBeginImplFrameDeadline(); |
| 1409 EXPECT_EQ(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE, | 1413 EXPECT_EQ(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE, |
| 1410 state.begin_impl_frame_state()); | 1414 state.begin_impl_frame_state()); |
| 1411 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); | 1415 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); |
| 1412 | 1416 |
| 1413 state.OnBeginImplFrameIdle(); | 1417 state.OnBeginImplFrameIdle(); |
| 1414 EXPECT_ACTION_UPDATE_STATE( | 1418 EXPECT_ACTION_UPDATE_STATE( |
| 1415 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); | 1419 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); |
| 1416 | 1420 |
| 1417 // After we get a new output surface, the commit flow should start. | 1421 // After we get a new output surface, the commit flow should start. |
| 1418 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 1422 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 1419 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 1423 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 1420 EXPECT_ACTION_UPDATE_STATE( | 1424 EXPECT_ACTION_UPDATE_STATE( |
| 1421 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1425 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 1422 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1426 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1423 state.NotifyBeginMainFrameStarted(); | 1427 state.NotifyBeginMainFrameStarted(); |
| 1424 state.NotifyReadyToCommit(); | 1428 state.NotifyReadyToCommit(); |
| 1425 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 1429 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
| 1426 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1430 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1427 state.OnBeginImplFrameDeadline(); | 1431 state.OnBeginImplFrameDeadline(); |
| 1428 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1432 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 1429 EXPECT_ACTION_UPDATE_STATE( | 1433 EXPECT_ACTION_UPDATE_STATE( |
| (...skipping 15 matching lines...) Expand all Loading... |
| 1445 state.SetNeedsRedraw(true); | 1449 state.SetNeedsRedraw(true); |
| 1446 | 1450 |
| 1447 // Cause a lost output surface, and restore it. | 1451 // Cause a lost output surface, and restore it. |
| 1448 state.DidLoseOutputSurface(); | 1452 state.DidLoseOutputSurface(); |
| 1449 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION, | 1453 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION, |
| 1450 state.NextAction()); | 1454 state.NextAction()); |
| 1451 state.UpdateState(state.NextAction()); | 1455 state.UpdateState(state.NextAction()); |
| 1452 state.DidCreateAndInitializeOutputSurface(); | 1456 state.DidCreateAndInitializeOutputSurface(); |
| 1453 | 1457 |
| 1454 EXPECT_FALSE(state.RedrawPending()); | 1458 EXPECT_FALSE(state.RedrawPending()); |
| 1455 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 1459 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 1456 EXPECT_EQ(SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME, | 1460 EXPECT_EQ(SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME, |
| 1457 state.NextAction()); | 1461 state.NextAction()); |
| 1458 } | 1462 } |
| 1459 | 1463 |
| 1460 TEST(SchedulerStateMachineTest, | 1464 TEST(SchedulerStateMachineTest, |
| 1461 TestPendingActivationsShouldBeForcedAfterLostOutputSurface) { | 1465 TestPendingActivationsShouldBeForcedAfterLostOutputSurface) { |
| 1462 SchedulerSettings settings; | 1466 SchedulerSettings settings; |
| 1463 settings.impl_side_painting = true; | 1467 settings.impl_side_painting = true; |
| 1464 StateMachine state(settings); | 1468 StateMachine state(settings); |
| 1465 state.SetCanStart(); | 1469 state.SetCanStart(); |
| (...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1577 settings.impl_side_painting = true; | 1581 settings.impl_side_painting = true; |
| 1578 StateMachine state(settings); | 1582 StateMachine state(settings); |
| 1579 state.SetCanStart(); | 1583 state.SetCanStart(); |
| 1580 state.UpdateState(state.NextAction()); | 1584 state.UpdateState(state.NextAction()); |
| 1581 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 1585 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 1582 state.SetVisible(true); | 1586 state.SetVisible(true); |
| 1583 state.SetCanDraw(true); | 1587 state.SetCanDraw(true); |
| 1584 | 1588 |
| 1585 // This test mirrors what happens during the first frame of a scroll gesture. | 1589 // This test mirrors what happens during the first frame of a scroll gesture. |
| 1586 // First we get the input event and a BeginFrame. | 1590 // First we get the input event and a BeginFrame. |
| 1587 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 1591 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 1588 | 1592 |
| 1589 // As a response the compositor requests a redraw and a commit to tell the | 1593 // As a response the compositor requests a redraw and a commit to tell the |
| 1590 // main thread about the new scroll offset. | 1594 // main thread about the new scroll offset. |
| 1591 state.SetNeedsRedraw(true); | 1595 state.SetNeedsRedraw(true); |
| 1592 state.SetNeedsCommit(); | 1596 state.SetNeedsCommit(); |
| 1593 | 1597 |
| 1594 // We should start the commit normally. | 1598 // We should start the commit normally. |
| 1595 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1599 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 1596 EXPECT_ACTION_UPDATE_STATE( | 1600 EXPECT_ACTION_UPDATE_STATE( |
| 1597 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1601 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 1612 StateMachine& state = *state_ptr; | 1616 StateMachine& state = *state_ptr; |
| 1613 | 1617 |
| 1614 state.NotifyBeginMainFrameStarted(); | 1618 state.NotifyBeginMainFrameStarted(); |
| 1615 state.NotifyReadyToCommit(); | 1619 state.NotifyReadyToCommit(); |
| 1616 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 1620 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
| 1617 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1621 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1618 state.NotifyReadyToActivate(); | 1622 state.NotifyReadyToActivate(); |
| 1619 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); | 1623 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); |
| 1620 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1624 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1621 | 1625 |
| 1622 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 1626 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 1623 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1627 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 1624 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1628 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1625 | 1629 |
| 1626 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineEarly()); | 1630 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineEarly()); |
| 1627 state.OnBeginImplFrameDeadline(); | 1631 state.OnBeginImplFrameDeadline(); |
| 1628 EXPECT_ACTION_UPDATE_STATE( | 1632 EXPECT_ACTION_UPDATE_STATE( |
| 1629 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1633 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 1630 state.DidSwapBuffers(); | 1634 state.DidSwapBuffers(); |
| 1631 } | 1635 } |
| 1632 | 1636 |
| 1633 TEST(SchedulerStateMachineTest, TestImplLatencyTakesPriority) { | 1637 TEST(SchedulerStateMachineTest, TestImplLatencyTakesPriority) { |
| 1634 SchedulerSettings settings; | 1638 SchedulerSettings settings; |
| 1635 settings.impl_side_painting = true; | 1639 settings.impl_side_painting = true; |
| 1636 StateMachine state(settings); | 1640 StateMachine state(settings); |
| 1637 state.SetCanStart(); | 1641 state.SetCanStart(); |
| 1638 state.UpdateState(state.NextAction()); | 1642 state.UpdateState(state.NextAction()); |
| 1639 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 1643 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 1640 state.SetVisible(true); | 1644 state.SetVisible(true); |
| 1641 state.SetCanDraw(true); | 1645 state.SetCanDraw(true); |
| 1642 | 1646 |
| 1643 // This test ensures that impl-draws are prioritized over main thread updates | 1647 // This test ensures that impl-draws are prioritized over main thread updates |
| 1644 // in prefer impl latency mode. | 1648 // in prefer impl latency mode. |
| 1645 state.SetNeedsRedraw(true); | 1649 state.SetNeedsRedraw(true); |
| 1646 state.SetNeedsCommit(); | 1650 state.SetNeedsCommit(); |
| 1647 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 1651 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 1648 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1652 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 1649 EXPECT_ACTION_UPDATE_STATE( | 1653 EXPECT_ACTION_UPDATE_STATE( |
| 1650 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1654 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 1651 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1655 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1652 | 1656 |
| 1653 // Verify the deadline is not triggered early until we enter | 1657 // Verify the deadline is not triggered early until we enter |
| 1654 // prefer impl latency mode. | 1658 // prefer impl latency mode. |
| 1655 EXPECT_FALSE(state.ShouldTriggerBeginImplFrameDeadlineEarly()); | 1659 EXPECT_FALSE(state.ShouldTriggerBeginImplFrameDeadlineEarly()); |
| 1656 state.SetImplLatencyTakesPriority(true); | 1660 state.SetImplLatencyTakesPriority(true); |
| 1657 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineEarly()); | 1661 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineEarly()); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 1674 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1678 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1675 | 1679 |
| 1676 // Finish the previous commit and draw it. | 1680 // Finish the previous commit and draw it. |
| 1677 FinishPreviousCommitAndDrawWithoutExitingDeadline(&state); | 1681 FinishPreviousCommitAndDrawWithoutExitingDeadline(&state); |
| 1678 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1682 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1679 | 1683 |
| 1680 // Verify we do not send another BeginMainFrame if was are swap throttled | 1684 // Verify we do not send another BeginMainFrame if was are swap throttled |
| 1681 // and did not just swap. | 1685 // and did not just swap. |
| 1682 state.SetNeedsCommit(); | 1686 state.SetNeedsCommit(); |
| 1683 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1687 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1684 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 1688 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 1685 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1689 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1686 EXPECT_FALSE(state.ShouldTriggerBeginImplFrameDeadlineEarly()); | 1690 EXPECT_FALSE(state.ShouldTriggerBeginImplFrameDeadlineEarly()); |
| 1687 state.OnBeginImplFrameDeadline(); | 1691 state.OnBeginImplFrameDeadline(); |
| 1688 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1692 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1689 } | 1693 } |
| 1690 | 1694 |
| 1691 TEST(SchedulerStateMachineTest, TestTriggerDeadlineEarlyOnLostOutputSurface) { | 1695 TEST(SchedulerStateMachineTest, TestTriggerDeadlineEarlyOnLostOutputSurface) { |
| 1692 SchedulerSettings default_scheduler_settings; | 1696 SchedulerSettings default_scheduler_settings; |
| 1693 StateMachine state(default_scheduler_settings); | 1697 StateMachine state(default_scheduler_settings); |
| 1694 state.SetCanStart(); | 1698 state.SetCanStart(); |
| 1695 state.UpdateState(state.NextAction()); | 1699 state.UpdateState(state.NextAction()); |
| 1696 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 1700 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 1697 state.SetVisible(true); | 1701 state.SetVisible(true); |
| 1698 state.SetCanDraw(true); | 1702 state.SetCanDraw(true); |
| 1699 | 1703 |
| 1700 state.SetNeedsCommit(); | 1704 state.SetNeedsCommit(); |
| 1701 | 1705 |
| 1702 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 1706 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 1703 EXPECT_ACTION_UPDATE_STATE( | 1707 EXPECT_ACTION_UPDATE_STATE( |
| 1704 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1708 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 1705 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1709 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1706 EXPECT_FALSE(state.ShouldTriggerBeginImplFrameDeadlineEarly()); | 1710 EXPECT_FALSE(state.ShouldTriggerBeginImplFrameDeadlineEarly()); |
| 1707 | 1711 |
| 1708 state.DidLoseOutputSurface(); | 1712 state.DidLoseOutputSurface(); |
| 1709 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1713 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1710 // The deadline should be triggered immediately when output surface is lost. | 1714 // The deadline should be triggered immediately when output surface is lost. |
| 1711 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineEarly()); | 1715 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineEarly()); |
| 1712 } | 1716 } |
| 1713 | 1717 |
| 1714 TEST(SchedulerStateMachineTest, TestSetNeedsAnimate) { | 1718 TEST(SchedulerStateMachineTest, TestSetNeedsAnimate) { |
| 1715 SchedulerSettings settings; | 1719 SchedulerSettings settings; |
| 1716 settings.impl_side_painting = true; | 1720 settings.impl_side_painting = true; |
| 1717 StateMachine state(settings); | 1721 StateMachine state(settings); |
| 1718 state.SetCanStart(); | 1722 state.SetCanStart(); |
| 1719 state.UpdateState(state.NextAction()); | 1723 state.UpdateState(state.NextAction()); |
| 1720 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 1724 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 1721 state.SetVisible(true); | 1725 state.SetVisible(true); |
| 1722 state.SetCanDraw(true); | 1726 state.SetCanDraw(true); |
| 1723 | 1727 |
| 1724 // Test requesting an animation that, when run, causes us to draw. | 1728 // Test requesting an animation that, when run, causes us to draw. |
| 1725 state.SetNeedsAnimate(); | 1729 state.SetNeedsAnimate(); |
| 1726 EXPECT_TRUE(state.BeginFrameNeeded()); | 1730 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 1727 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1731 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1728 | 1732 |
| 1729 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 1733 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 1730 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1734 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 1731 | 1735 |
| 1732 state.OnBeginImplFrameDeadlinePending(); | 1736 state.OnBeginImplFrameDeadlinePending(); |
| 1733 state.OnBeginImplFrameDeadline(); | 1737 state.OnBeginImplFrameDeadline(); |
| 1734 EXPECT_ACTION_UPDATE_STATE( | 1738 EXPECT_ACTION_UPDATE_STATE( |
| 1735 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1739 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 1736 } | 1740 } |
| 1737 | 1741 |
| 1738 TEST(SchedulerStateMachineTest, TestAnimateBeforeCommit) { | 1742 TEST(SchedulerStateMachineTest, TestAnimateBeforeCommit) { |
| 1739 SchedulerSettings settings; | 1743 SchedulerSettings settings; |
| 1740 settings.impl_side_painting = true; | 1744 settings.impl_side_painting = true; |
| 1741 StateMachine state(settings); | 1745 StateMachine state(settings); |
| 1742 state.SetCanStart(); | 1746 state.SetCanStart(); |
| 1743 state.UpdateState(state.NextAction()); | 1747 state.UpdateState(state.NextAction()); |
| 1744 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 1748 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 1745 state.SetVisible(true); | 1749 state.SetVisible(true); |
| 1746 state.SetCanDraw(true); | 1750 state.SetCanDraw(true); |
| 1747 | 1751 |
| 1748 // Check that animations are updated before we start a commit. | 1752 // Check that animations are updated before we start a commit. |
| 1749 state.SetNeedsAnimate(); | 1753 state.SetNeedsAnimate(); |
| 1750 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1754 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1751 state.SetNeedsCommit(); | 1755 state.SetNeedsCommit(); |
| 1752 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1756 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1753 EXPECT_TRUE(state.BeginFrameNeeded()); | 1757 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 1754 | 1758 |
| 1755 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 1759 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 1756 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1760 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 1757 EXPECT_ACTION_UPDATE_STATE( | 1761 EXPECT_ACTION_UPDATE_STATE( |
| 1758 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1762 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 1759 | 1763 |
| 1760 state.OnBeginImplFrameDeadlinePending(); | 1764 state.OnBeginImplFrameDeadlinePending(); |
| 1761 state.OnBeginImplFrameDeadline(); | 1765 state.OnBeginImplFrameDeadline(); |
| 1762 EXPECT_ACTION_UPDATE_STATE( | 1766 EXPECT_ACTION_UPDATE_STATE( |
| 1763 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1767 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 1764 } | 1768 } |
| 1765 | 1769 |
| 1766 TEST(SchedulerStateMachineTest, TestAnimateAfterCommitBeforeDraw) { | 1770 TEST(SchedulerStateMachineTest, TestAnimateAfterCommitBeforeDraw) { |
| 1767 SchedulerSettings settings; | 1771 SchedulerSettings settings; |
| 1768 settings.impl_side_painting = true; | 1772 settings.impl_side_painting = true; |
| 1769 StateMachine state(settings); | 1773 StateMachine state(settings); |
| 1770 state.SetCanStart(); | 1774 state.SetCanStart(); |
| 1771 state.UpdateState(state.NextAction()); | 1775 state.UpdateState(state.NextAction()); |
| 1772 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 1776 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 1773 state.SetVisible(true); | 1777 state.SetVisible(true); |
| 1774 state.SetCanDraw(true); | 1778 state.SetCanDraw(true); |
| 1775 | 1779 |
| 1776 // Check that animations are updated before we start a commit. | 1780 // Check that animations are updated before we start a commit. |
| 1777 state.SetNeedsAnimate(); | 1781 state.SetNeedsAnimate(); |
| 1778 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1782 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1779 state.SetNeedsCommit(); | 1783 state.SetNeedsCommit(); |
| 1780 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1784 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1781 EXPECT_TRUE(state.BeginFrameNeeded()); | 1785 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 1782 | 1786 |
| 1783 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 1787 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 1784 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1788 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 1785 EXPECT_ACTION_UPDATE_STATE( | 1789 EXPECT_ACTION_UPDATE_STATE( |
| 1786 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1790 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 1787 | 1791 |
| 1788 state.NotifyBeginMainFrameStarted(); | 1792 state.NotifyBeginMainFrameStarted(); |
| 1789 state.NotifyReadyToCommit(); | 1793 state.NotifyReadyToCommit(); |
| 1790 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 1794 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
| 1791 | 1795 |
| 1792 state.OnBeginImplFrameDeadlinePending(); | 1796 state.OnBeginImplFrameDeadlinePending(); |
| 1793 state.OnBeginImplFrameDeadline(); | 1797 state.OnBeginImplFrameDeadline(); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 1805 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 1809 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 1806 state.SetVisible(true); | 1810 state.SetVisible(true); |
| 1807 state.SetCanDraw(true); | 1811 state.SetCanDraw(true); |
| 1808 | 1812 |
| 1809 // Test requesting an animation after we have already animated during this | 1813 // Test requesting an animation after we have already animated during this |
| 1810 // frame. | 1814 // frame. |
| 1811 state.SetNeedsRedraw(true); | 1815 state.SetNeedsRedraw(true); |
| 1812 EXPECT_TRUE(state.BeginFrameNeeded()); | 1816 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 1813 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1817 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1814 | 1818 |
| 1815 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 1819 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 1816 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1820 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 1817 | 1821 |
| 1818 state.SetNeedsAnimate(); | 1822 state.SetNeedsAnimate(); |
| 1819 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1823 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1820 | 1824 |
| 1821 state.OnBeginImplFrameDeadline(); | 1825 state.OnBeginImplFrameDeadline(); |
| 1822 EXPECT_ACTION_UPDATE_STATE( | 1826 EXPECT_ACTION_UPDATE_STATE( |
| 1823 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1827 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 1824 } | 1828 } |
| 1825 | 1829 |
| 1826 } // namespace | 1830 } // namespace |
| 1827 } // namespace cc | 1831 } // namespace cc |
| OLD | NEW |