| 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 26 matching lines...) Expand all Loading... |
| 37 {SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE, | 37 {SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE, |
| 38 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING, | 38 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING, |
| 39 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME, | 39 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME, |
| 40 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE, }; | 40 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE, }; |
| 41 | 41 |
| 42 const SchedulerStateMachine::CommitState all_commit_states[] = { | 42 const SchedulerStateMachine::CommitState all_commit_states[] = { |
| 43 SchedulerStateMachine::COMMIT_STATE_IDLE, | 43 SchedulerStateMachine::COMMIT_STATE_IDLE, |
| 44 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT, | 44 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT, |
| 45 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_STARTED, | 45 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_STARTED, |
| 46 SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT, | 46 SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT, |
| 47 SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_ACTIVATION}; | 47 SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_ACTIVATION, |
| 48 SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_DRAW}; |
| 48 | 49 |
| 49 // Exposes the protected state fields of the SchedulerStateMachine for testing | 50 // Exposes the protected state fields of the SchedulerStateMachine for testing |
| 50 class StateMachine : public SchedulerStateMachine { | 51 class StateMachine : public SchedulerStateMachine { |
| 51 public: | 52 public: |
| 52 explicit StateMachine(const SchedulerSettings& scheduler_settings) | 53 explicit StateMachine(const SchedulerSettings& scheduler_settings) |
| 53 : SchedulerStateMachine(scheduler_settings) {} | 54 : SchedulerStateMachine(scheduler_settings) {} |
| 54 | 55 |
| 55 void CreateAndInitializeOutputSurfaceWithActivatedCommit() { | 56 void CreateAndInitializeOutputSurfaceWithActivatedCommit() { |
| 56 DidCreateAndInitializeOutputSurface(); | 57 DidCreateAndInitializeOutputSurface(); |
| 57 output_surface_state_ = OUTPUT_SURFACE_ACTIVE; | 58 output_surface_state_ = OUTPUT_SURFACE_ACTIVE; |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 115 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION) | 116 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION) |
| 116 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 117 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 117 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE); | 118 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE); |
| 118 state.SetNeedsRedraw(false); | 119 state.SetNeedsRedraw(false); |
| 119 state.SetVisible(true); | 120 state.SetVisible(true); |
| 120 | 121 |
| 121 EXPECT_FALSE(state.BeginFrameNeeded()); | 122 EXPECT_FALSE(state.BeginFrameNeeded()); |
| 122 | 123 |
| 123 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 124 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 124 EXPECT_FALSE(state.BeginFrameNeeded()); | 125 EXPECT_FALSE(state.BeginFrameNeeded()); |
| 125 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 126 state.OnBeginImplFrame( |
| 127 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 126 | 128 |
| 127 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 129 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 128 state.OnBeginImplFrameDeadline(); | 130 state.OnBeginImplFrameDeadline(); |
| 129 } | 131 } |
| 130 | 132 |
| 131 // If commit requested but can_start is still false, do nothing. | 133 // If commit requested but can_start is still false, do nothing. |
| 132 { | 134 { |
| 133 StateMachine state(default_scheduler_settings); | 135 StateMachine state(default_scheduler_settings); |
| 134 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE); | 136 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE); |
| 135 state.SetNeedsRedraw(false); | 137 state.SetNeedsRedraw(false); |
| 136 state.SetVisible(true); | 138 state.SetVisible(true); |
| 137 state.SetNeedsCommit(); | 139 state.SetNeedsCommit(); |
| 138 | 140 |
| 139 EXPECT_FALSE(state.BeginFrameNeeded()); | 141 EXPECT_FALSE(state.BeginFrameNeeded()); |
| 140 | 142 |
| 141 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 143 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 142 EXPECT_FALSE(state.BeginFrameNeeded()); | 144 EXPECT_FALSE(state.BeginFrameNeeded()); |
| 143 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 145 state.OnBeginImplFrame( |
| 146 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 144 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 147 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 145 state.OnBeginImplFrameDeadline(); | 148 state.OnBeginImplFrameDeadline(); |
| 146 } | 149 } |
| 147 | 150 |
| 148 // If commit requested, begin a main frame. | 151 // If commit requested, begin a main frame. |
| 149 { | 152 { |
| 150 StateMachine state(default_scheduler_settings); | 153 StateMachine state(default_scheduler_settings); |
| 151 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE); | 154 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE); |
| 152 state.SetCanStart(); | 155 state.SetCanStart(); |
| 153 state.UpdateState(state.NextAction()); | 156 state.UpdateState(state.NextAction()); |
| 154 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 157 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 155 state.SetNeedsRedraw(false); | 158 state.SetNeedsRedraw(false); |
| 156 state.SetVisible(true); | 159 state.SetVisible(true); |
| 157 state.SetNeedsCommit(); | 160 state.SetNeedsCommit(); |
| 158 | 161 |
| 159 EXPECT_TRUE(state.BeginFrameNeeded()); | 162 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 160 | 163 |
| 161 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 164 state.OnBeginImplFrame( |
| 165 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 162 EXPECT_ACTION_UPDATE_STATE( | 166 EXPECT_ACTION_UPDATE_STATE( |
| 163 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 167 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 164 } | 168 } |
| 165 | 169 |
| 166 // Begin the frame, make sure needs_commit and commit_state update correctly. | 170 // Begin the frame, make sure needs_commit and commit_state update correctly. |
| 167 { | 171 { |
| 168 StateMachine state(default_scheduler_settings); | 172 StateMachine state(default_scheduler_settings); |
| 169 state.SetCanStart(); | 173 state.SetCanStart(); |
| 170 state.UpdateState(state.NextAction()); | 174 state.UpdateState(state.NextAction()); |
| 171 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 175 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 188 state.UpdateState(state.NextAction()); | 192 state.UpdateState(state.NextAction()); |
| 189 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 193 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 190 state.SetNeedsRedraw(false); | 194 state.SetNeedsRedraw(false); |
| 191 state.SetVisible(true); | 195 state.SetVisible(true); |
| 192 state.SetCanDraw(true); | 196 state.SetCanDraw(true); |
| 193 state.SetNeedsCommit(); | 197 state.SetNeedsCommit(); |
| 194 | 198 |
| 195 EXPECT_TRUE(state.BeginFrameNeeded()); | 199 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 196 | 200 |
| 197 // Commit to the pending tree. | 201 // Commit to the pending tree. |
| 198 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 202 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 199 EXPECT_ACTION_UPDATE_STATE( | 203 EXPECT_ACTION_UPDATE_STATE( |
| 200 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 204 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 201 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 205 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 202 | 206 |
| 203 state.NotifyBeginMainFrameStarted(); | 207 state.NotifyBeginMainFrameStarted(); |
| 204 state.NotifyReadyToCommit(); | 208 state.NotifyReadyToCommit(); |
| 205 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 209 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
| 206 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 210 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 207 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); | 211 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); |
| 208 | 212 |
| 209 state.OnBeginImplFrameDeadline(); | 213 state.OnBeginImplFrameDeadline(); |
| 210 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 214 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 211 | 215 |
| 212 // Verify that the next commit starts while there is still a pending tree. | 216 // Verify that the next commit starts while there is still a pending tree. |
| 213 state.SetNeedsCommit(); | 217 state.SetNeedsCommit(); |
| 214 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 218 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 215 EXPECT_ACTION_UPDATE_STATE( | 219 EXPECT_ACTION_UPDATE_STATE( |
| 216 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 220 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 217 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 221 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 218 | 222 |
| 219 // Verify the pending commit doesn't overwrite the pending | 223 // Verify the pending commit doesn't overwrite the pending |
| 220 // tree until the pending tree has been activated. | 224 // tree until the pending tree has been activated. |
| 221 state.NotifyBeginMainFrameStarted(); | 225 state.NotifyBeginMainFrameStarted(); |
| 222 state.NotifyReadyToCommit(); | 226 state.NotifyReadyToCommit(); |
| 223 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 227 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 224 | 228 |
| (...skipping 20 matching lines...) Expand all Loading... |
| 245 SchedulerSettings default_scheduler_settings; | 249 SchedulerSettings default_scheduler_settings; |
| 246 StateMachine state(default_scheduler_settings); | 250 StateMachine state(default_scheduler_settings); |
| 247 state.SetCanStart(); | 251 state.SetCanStart(); |
| 248 state.UpdateState(state.NextAction()); | 252 state.UpdateState(state.NextAction()); |
| 249 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 253 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 250 state.SetVisible(true); | 254 state.SetVisible(true); |
| 251 state.SetCanDraw(true); | 255 state.SetCanDraw(true); |
| 252 state.SetNeedsRedraw(true); | 256 state.SetNeedsRedraw(true); |
| 253 EXPECT_TRUE(state.RedrawPending()); | 257 EXPECT_TRUE(state.RedrawPending()); |
| 254 EXPECT_TRUE(state.BeginFrameNeeded()); | 258 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 255 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 259 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 256 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 260 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 257 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 261 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 258 state.OnBeginImplFrameDeadline(); | 262 state.OnBeginImplFrameDeadline(); |
| 259 | 263 |
| 260 // We're drawing now. | 264 // We're drawing now. |
| 261 EXPECT_ACTION_UPDATE_STATE( | 265 EXPECT_ACTION_UPDATE_STATE( |
| 262 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 266 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 263 state.DidSwapBuffers(); | 267 state.DidSwapBuffers(); |
| 264 state.DidSwapBuffersComplete(); | 268 state.DidSwapBuffersComplete(); |
| 265 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 269 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 266 | 270 |
| 267 EXPECT_FALSE(state.RedrawPending()); | 271 EXPECT_FALSE(state.RedrawPending()); |
| 268 EXPECT_FALSE(state.CommitPending()); | 272 EXPECT_FALSE(state.CommitPending()); |
| 269 | 273 |
| 270 // Failing the draw makes us require a commit. | 274 // Failing the draw makes us require a commit. |
| 271 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); | 275 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); |
| 272 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 276 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 273 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 277 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 274 EXPECT_ACTION_UPDATE_STATE( | 278 EXPECT_ACTION_UPDATE_STATE( |
| 275 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 279 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 276 EXPECT_TRUE(state.RedrawPending()); | 280 EXPECT_TRUE(state.RedrawPending()); |
| 277 EXPECT_TRUE(state.CommitPending()); | 281 EXPECT_TRUE(state.CommitPending()); |
| 278 } | 282 } |
| 279 | 283 |
| 280 TEST(SchedulerStateMachineTest, TestFailedDrawForMissingHighResNeedsCommit) { | 284 TEST(SchedulerStateMachineTest, TestFailedDrawForMissingHighResNeedsCommit) { |
| 281 SchedulerSettings default_scheduler_settings; | 285 SchedulerSettings default_scheduler_settings; |
| 282 StateMachine state(default_scheduler_settings); | 286 StateMachine state(default_scheduler_settings); |
| 283 state.SetCanStart(); | 287 state.SetCanStart(); |
| 284 state.UpdateState(state.NextAction()); | 288 state.UpdateState(state.NextAction()); |
| 285 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 289 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 286 state.SetVisible(true); | 290 state.SetVisible(true); |
| 287 state.SetCanDraw(true); | 291 state.SetCanDraw(true); |
| 288 state.SetNeedsRedraw(true); | 292 state.SetNeedsRedraw(true); |
| 289 EXPECT_TRUE(state.RedrawPending()); | 293 EXPECT_TRUE(state.RedrawPending()); |
| 290 EXPECT_TRUE(state.BeginFrameNeeded()); | 294 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 291 | 295 |
| 292 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 296 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 293 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 297 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 294 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 298 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 295 state.OnBeginImplFrameDeadline(); | 299 state.OnBeginImplFrameDeadline(); |
| 296 EXPECT_ACTION_UPDATE_STATE( | 300 EXPECT_ACTION_UPDATE_STATE( |
| 297 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 301 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 298 state.DidSwapBuffers(); | 302 state.DidSwapBuffers(); |
| 299 state.DidSwapBuffersComplete(); | 303 state.DidSwapBuffersComplete(); |
| 300 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 304 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 301 EXPECT_FALSE(state.RedrawPending()); | 305 EXPECT_FALSE(state.RedrawPending()); |
| 302 EXPECT_FALSE(state.CommitPending()); | 306 EXPECT_FALSE(state.CommitPending()); |
| 303 | 307 |
| 304 // Missing high res content requires a commit (but not a redraw) | 308 // Missing high res content requires a commit (but not a redraw) |
| 305 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_MISSING_HIGH_RES_CONTENT); | 309 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_MISSING_HIGH_RES_CONTENT); |
| 306 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 310 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 307 EXPECT_ACTION_UPDATE_STATE( | 311 EXPECT_ACTION_UPDATE_STATE( |
| 308 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 312 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 309 EXPECT_FALSE(state.RedrawPending()); | 313 EXPECT_FALSE(state.RedrawPending()); |
| 310 EXPECT_TRUE(state.CommitPending()); | 314 EXPECT_TRUE(state.CommitPending()); |
| 311 } | 315 } |
| 312 | 316 |
| 313 TEST(SchedulerStateMachineTest, | 317 TEST(SchedulerStateMachineTest, |
| 314 TestsetNeedsRedrawDuringFailedDrawDoesNotRemoveNeedsRedraw) { | 318 TestsetNeedsRedrawDuringFailedDrawDoesNotRemoveNeedsRedraw) { |
| 315 SchedulerSettings default_scheduler_settings; | 319 SchedulerSettings default_scheduler_settings; |
| 316 StateMachine state(default_scheduler_settings); | 320 StateMachine state(default_scheduler_settings); |
| 317 state.SetCanStart(); | 321 state.SetCanStart(); |
| 318 state.UpdateState(state.NextAction()); | 322 state.UpdateState(state.NextAction()); |
| 319 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 323 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 320 | 324 |
| 321 state.SetVisible(true); | 325 state.SetVisible(true); |
| 322 state.SetCanDraw(true); | 326 state.SetCanDraw(true); |
| 323 state.SetNeedsRedraw(true); | 327 state.SetNeedsRedraw(true); |
| 324 EXPECT_TRUE(state.RedrawPending()); | 328 EXPECT_TRUE(state.RedrawPending()); |
| 325 EXPECT_TRUE(state.BeginFrameNeeded()); | 329 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 326 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 330 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 327 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 331 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 328 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 332 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 329 state.OnBeginImplFrameDeadline(); | 333 state.OnBeginImplFrameDeadline(); |
| 330 | 334 |
| 331 // We're drawing now. | 335 // We're drawing now. |
| 332 EXPECT_ACTION_UPDATE_STATE( | 336 EXPECT_ACTION_UPDATE_STATE( |
| 333 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 337 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 334 state.DidSwapBuffers(); | 338 state.DidSwapBuffers(); |
| 335 state.DidSwapBuffersComplete(); | 339 state.DidSwapBuffersComplete(); |
| 336 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 340 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 337 EXPECT_FALSE(state.RedrawPending()); | 341 EXPECT_FALSE(state.RedrawPending()); |
| 338 EXPECT_FALSE(state.CommitPending()); | 342 EXPECT_FALSE(state.CommitPending()); |
| 339 | 343 |
| 340 // While still in the same BeginMainFrame callback on the main thread, | 344 // While still in the same BeginMainFrame callback on the main thread, |
| 341 // set needs redraw again. This should not redraw. | 345 // set needs redraw again. This should not redraw. |
| 342 state.SetNeedsRedraw(true); | 346 state.SetNeedsRedraw(true); |
| 343 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 347 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 344 | 348 |
| 345 // Failing the draw for animation checkerboards makes us require a commit. | 349 // Failing the draw for animation checkerboards makes us require a commit. |
| 346 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); | 350 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); |
| 347 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 351 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 348 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 352 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 349 EXPECT_ACTION_UPDATE_STATE( | 353 EXPECT_ACTION_UPDATE_STATE( |
| 350 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 354 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 351 EXPECT_TRUE(state.RedrawPending()); | 355 EXPECT_TRUE(state.RedrawPending()); |
| 352 } | 356 } |
| 353 | 357 |
| 354 TEST(SchedulerStateMachineTest, | 358 TEST(SchedulerStateMachineTest, |
| 355 TestFailedDrawsEventuallyForceDrawAfterNextCommit) { | 359 TestFailedDrawsEventuallyForceDrawAfterNextCommit) { |
| 356 SchedulerSettings scheduler_settings; | 360 SchedulerSettings scheduler_settings; |
| 357 scheduler_settings.maximum_number_of_failed_draws_before_draw_is_forced_ = 1; | 361 scheduler_settings.maximum_number_of_failed_draws_before_draw_is_forced_ = 1; |
| 358 StateMachine state(scheduler_settings); | 362 StateMachine state(scheduler_settings); |
| 359 state.SetCanStart(); | 363 state.SetCanStart(); |
| 360 state.UpdateState(state.NextAction()); | 364 state.UpdateState(state.NextAction()); |
| 361 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 365 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 362 state.SetVisible(true); | 366 state.SetVisible(true); |
| 363 state.SetCanDraw(true); | 367 state.SetCanDraw(true); |
| 364 | 368 |
| 365 // Start a commit. | 369 // Start a commit. |
| 366 state.SetNeedsCommit(); | 370 state.SetNeedsCommit(); |
| 367 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 371 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 368 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 372 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 369 EXPECT_ACTION_UPDATE_STATE( | 373 EXPECT_ACTION_UPDATE_STATE( |
| 370 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 374 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 371 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 375 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 372 EXPECT_TRUE(state.CommitPending()); | 376 EXPECT_TRUE(state.CommitPending()); |
| 373 | 377 |
| 374 // Then initiate a draw. | 378 // Then initiate a draw. |
| 375 state.SetNeedsRedraw(true); | 379 state.SetNeedsRedraw(true); |
| 376 state.OnBeginImplFrameDeadline(); | 380 state.OnBeginImplFrameDeadline(); |
| 377 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 381 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 378 EXPECT_ACTION_UPDATE_STATE( | 382 EXPECT_ACTION_UPDATE_STATE( |
| 379 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 383 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 380 | 384 |
| 381 // Fail the draw. | 385 // Fail the draw. |
| 382 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); | 386 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); |
| 383 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 387 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 384 EXPECT_TRUE(state.BeginFrameNeeded()); | 388 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 385 EXPECT_TRUE(state.RedrawPending()); | 389 EXPECT_TRUE(state.RedrawPending()); |
| 386 // But the commit is ongoing. | 390 // But the commit is ongoing. |
| 387 EXPECT_TRUE(state.CommitPending()); | 391 EXPECT_TRUE(state.CommitPending()); |
| 388 | 392 |
| 389 // Finish the commit. Note, we should not yet be forcing a draw, but should | 393 // Finish the commit. Note, we should not yet be forcing a draw, but should |
| 390 // continue the commit as usual. | 394 // continue the commit as usual. |
| 391 state.NotifyBeginMainFrameStarted(); | 395 state.NotifyBeginMainFrameStarted(); |
| 392 state.NotifyReadyToCommit(); | 396 state.NotifyReadyToCommit(); |
| 393 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 397 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
| 394 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 398 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 395 EXPECT_TRUE(state.RedrawPending()); | 399 EXPECT_TRUE(state.RedrawPending()); |
| 396 | 400 |
| 397 // The redraw should be forced at the end of the next BeginImplFrame. | 401 // The redraw should be forced at the end of the next BeginImplFrame. |
| 398 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 402 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 399 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 403 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 400 EXPECT_ACTION_UPDATE_STATE( | 404 EXPECT_ACTION_UPDATE_STATE( |
| 401 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 405 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 402 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 406 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 403 state.OnBeginImplFrameDeadline(); | 407 state.OnBeginImplFrameDeadline(); |
| 404 EXPECT_ACTION_UPDATE_STATE( | 408 EXPECT_ACTION_UPDATE_STATE( |
| 405 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_FORCED); | 409 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_FORCED); |
| 406 state.DidSwapBuffers(); | 410 state.DidSwapBuffers(); |
| 407 state.DidSwapBuffersComplete(); | 411 state.DidSwapBuffersComplete(); |
| 408 } | 412 } |
| 409 | 413 |
| 410 TEST(SchedulerStateMachineTest, TestFailedDrawsDoNotRestartForcedDraw) { | 414 TEST(SchedulerStateMachineTest, TestFailedDrawsDoNotRestartForcedDraw) { |
| 411 SchedulerSettings scheduler_settings; | 415 SchedulerSettings scheduler_settings; |
| 412 int draw_limit = 1; | 416 int draw_limit = 1; |
| 413 scheduler_settings.maximum_number_of_failed_draws_before_draw_is_forced_ = | 417 scheduler_settings.maximum_number_of_failed_draws_before_draw_is_forced_ = |
| 414 draw_limit; | 418 draw_limit; |
| 415 scheduler_settings.impl_side_painting = true; | 419 scheduler_settings.impl_side_painting = true; |
| 416 StateMachine state(scheduler_settings); | 420 StateMachine state(scheduler_settings); |
| 417 state.SetCanStart(); | 421 state.SetCanStart(); |
| 418 state.UpdateState(state.NextAction()); | 422 state.UpdateState(state.NextAction()); |
| 419 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 423 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 420 state.SetVisible(true); | 424 state.SetVisible(true); |
| 421 state.SetCanDraw(true); | 425 state.SetCanDraw(true); |
| 422 | 426 |
| 423 // Start a commit. | 427 // Start a commit. |
| 424 state.SetNeedsCommit(); | 428 state.SetNeedsCommit(); |
| 425 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 429 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 426 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 430 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 427 EXPECT_ACTION_UPDATE_STATE( | 431 EXPECT_ACTION_UPDATE_STATE( |
| 428 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 432 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 429 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 433 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 430 EXPECT_TRUE(state.CommitPending()); | 434 EXPECT_TRUE(state.CommitPending()); |
| 431 | 435 |
| 432 // Then initiate a draw. | 436 // Then initiate a draw. |
| 433 state.SetNeedsRedraw(true); | 437 state.SetNeedsRedraw(true); |
| 434 state.OnBeginImplFrameDeadline(); | 438 state.OnBeginImplFrameDeadline(); |
| 435 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 439 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 436 EXPECT_ACTION_UPDATE_STATE( | 440 EXPECT_ACTION_UPDATE_STATE( |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 473 StateMachine state(default_scheduler_settings); | 477 StateMachine state(default_scheduler_settings); |
| 474 state.SetCanStart(); | 478 state.SetCanStart(); |
| 475 state.UpdateState(state.NextAction()); | 479 state.UpdateState(state.NextAction()); |
| 476 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 480 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 477 state.SetVisible(true); | 481 state.SetVisible(true); |
| 478 state.SetCanDraw(true); | 482 state.SetCanDraw(true); |
| 479 | 483 |
| 480 // Start a draw. | 484 // Start a draw. |
| 481 state.SetNeedsRedraw(true); | 485 state.SetNeedsRedraw(true); |
| 482 EXPECT_TRUE(state.BeginFrameNeeded()); | 486 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 483 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 487 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 484 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 488 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 485 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 489 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 486 state.OnBeginImplFrameDeadline(); | 490 state.OnBeginImplFrameDeadline(); |
| 487 EXPECT_TRUE(state.RedrawPending()); | 491 EXPECT_TRUE(state.RedrawPending()); |
| 488 EXPECT_ACTION_UPDATE_STATE( | 492 EXPECT_ACTION_UPDATE_STATE( |
| 489 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 493 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 490 | 494 |
| 491 // Failing the draw for animation checkerboards makes us require a commit. | 495 // Failing the draw for animation checkerboards makes us require a commit. |
| 492 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); | 496 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); |
| 493 EXPECT_ACTION_UPDATE_STATE( | 497 EXPECT_ACTION_UPDATE_STATE( |
| 494 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 498 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 495 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 499 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 496 EXPECT_TRUE(state.RedrawPending()); | 500 EXPECT_TRUE(state.RedrawPending()); |
| 497 | 501 |
| 498 // We should not be trying to draw again now, but we have a commit pending. | 502 // We should not be trying to draw again now, but we have a commit pending. |
| 499 EXPECT_TRUE(state.BeginFrameNeeded()); | 503 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 500 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 504 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 501 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 505 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 502 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 506 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 503 | 507 |
| 504 // We should try to draw again at the end of the next BeginImplFrame on | 508 // We should try to draw again at the end of the next BeginImplFrame on |
| 505 // the impl thread. | 509 // the impl thread. |
| 506 state.OnBeginImplFrameDeadline(); | 510 state.OnBeginImplFrameDeadline(); |
| 507 EXPECT_ACTION_UPDATE_STATE( | 511 EXPECT_ACTION_UPDATE_STATE( |
| 508 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 512 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 509 state.DidSwapBuffers(); | 513 state.DidSwapBuffers(); |
| 510 state.DidSwapBuffersComplete(); | 514 state.DidSwapBuffersComplete(); |
| 511 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 515 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 512 } | 516 } |
| 513 | 517 |
| 514 TEST(SchedulerStateMachineTest, TestDoestDrawTwiceInSameFrame) { | 518 TEST(SchedulerStateMachineTest, TestDoestDrawTwiceInSameFrame) { |
| 515 SchedulerSettings default_scheduler_settings; | 519 SchedulerSettings default_scheduler_settings; |
| 516 StateMachine state(default_scheduler_settings); | 520 StateMachine state(default_scheduler_settings); |
| 517 state.SetCanStart(); | 521 state.SetCanStart(); |
| 518 state.UpdateState(state.NextAction()); | 522 state.UpdateState(state.NextAction()); |
| 519 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 523 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 520 state.SetVisible(true); | 524 state.SetVisible(true); |
| 521 state.SetCanDraw(true); | 525 state.SetCanDraw(true); |
| 522 state.SetNeedsRedraw(true); | 526 state.SetNeedsRedraw(true); |
| 523 | 527 |
| 524 // Draw the first frame. | 528 // Draw the first frame. |
| 525 EXPECT_TRUE(state.BeginFrameNeeded()); | 529 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 526 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 530 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 527 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 531 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 528 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 532 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 529 | 533 |
| 530 state.OnBeginImplFrameDeadline(); | 534 state.OnBeginImplFrameDeadline(); |
| 531 EXPECT_ACTION_UPDATE_STATE( | 535 EXPECT_ACTION_UPDATE_STATE( |
| 532 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 536 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 533 state.DidSwapBuffers(); | 537 state.DidSwapBuffers(); |
| 534 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); | 538 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); |
| 535 state.DidSwapBuffersComplete(); | 539 state.DidSwapBuffersComplete(); |
| 536 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 540 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 537 | 541 |
| 538 // Before the next BeginImplFrame, set needs redraw again. | 542 // Before the next BeginImplFrame, set needs redraw again. |
| 539 // This should not redraw until the next BeginImplFrame. | 543 // This should not redraw until the next BeginImplFrame. |
| 540 state.SetNeedsRedraw(true); | 544 state.SetNeedsRedraw(true); |
| 541 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 545 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 542 | 546 |
| 543 // Move to another frame. This should now draw. | 547 // Move to another frame. This should now draw. |
| 544 EXPECT_TRUE(state.BeginFrameNeeded()); | 548 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 545 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 549 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 546 | 550 |
| 547 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 551 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 548 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 552 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 549 | 553 |
| 550 state.OnBeginImplFrameDeadline(); | 554 state.OnBeginImplFrameDeadline(); |
| 551 EXPECT_ACTION_UPDATE_STATE( | 555 EXPECT_ACTION_UPDATE_STATE( |
| 552 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 556 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 553 state.DidSwapBuffers(); | 557 state.DidSwapBuffers(); |
| 554 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); | 558 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); |
| 555 state.DidSwapBuffersComplete(); | 559 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. | 677 // There shouldn't be any drawing regardless of BeginImplFrame. |
| 674 for (size_t j = 0; j < 2; ++j) { | 678 for (size_t j = 0; j < 2; ++j) { |
| 675 StateMachine state(default_scheduler_settings); | 679 StateMachine state(default_scheduler_settings); |
| 676 state.SetCanStart(); | 680 state.SetCanStart(); |
| 677 state.UpdateState(state.NextAction()); | 681 state.UpdateState(state.NextAction()); |
| 678 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 682 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 679 state.SetCommitState(all_commit_states[i]); | 683 state.SetCommitState(all_commit_states[i]); |
| 680 state.SetVisible(false); | 684 state.SetVisible(false); |
| 681 state.SetNeedsRedraw(true); | 685 state.SetNeedsRedraw(true); |
| 682 if (j == 1) | 686 if (j == 1) |
| 683 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 687 state.OnBeginImplFrame( |
| 688 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 684 | 689 |
| 685 state.SetCanDraw(false); | 690 state.SetCanDraw(false); |
| 686 EXPECT_NE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE, | 691 EXPECT_NE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE, |
| 687 state.NextAction()); | 692 state.NextAction()); |
| 688 } | 693 } |
| 689 } | 694 } |
| 690 } | 695 } |
| 691 | 696 |
| 692 TEST(SchedulerStateMachineTest, | 697 TEST(SchedulerStateMachineTest, |
| 693 TestCanRedrawWithWaitingForFirstDrawMakesProgress) { | 698 TestCanRedrawWithWaitingForFirstDrawMakesProgress) { |
| 694 SchedulerSettings default_scheduler_settings; | 699 SchedulerSettings default_scheduler_settings; |
| 695 StateMachine state(default_scheduler_settings); | 700 StateMachine state(default_scheduler_settings); |
| 696 state.SetCanStart(); | 701 state.SetCanStart(); |
| 697 state.UpdateState(state.NextAction()); | 702 state.UpdateState(state.NextAction()); |
| 698 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 703 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 699 | 704 |
| 700 state.SetActiveTreeNeedsFirstDraw(true); | 705 state.SetActiveTreeNeedsFirstDraw(true); |
| 701 state.SetNeedsCommit(); | 706 state.SetNeedsCommit(); |
| 702 state.SetNeedsRedraw(true); | 707 state.SetNeedsRedraw(true); |
| 703 state.SetVisible(true); | 708 state.SetVisible(true); |
| 704 state.SetCanDraw(false); | 709 state.SetCanDraw(false); |
| 705 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 710 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 706 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 711 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 707 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT); | 712 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT); |
| 708 EXPECT_ACTION_UPDATE_STATE( | 713 EXPECT_ACTION_UPDATE_STATE( |
| 709 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 714 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 710 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 715 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 711 state.NotifyBeginMainFrameStarted(); | 716 state.NotifyBeginMainFrameStarted(); |
| 712 state.NotifyReadyToCommit(); | 717 state.NotifyReadyToCommit(); |
| 713 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 718 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
| 714 state.OnBeginImplFrameDeadline(); | 719 state.OnBeginImplFrameDeadline(); |
| 715 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 720 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 716 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT); | 721 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT); |
| 717 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 722 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 718 } | 723 } |
| 719 | 724 |
| 720 TEST(SchedulerStateMachineTest, TestSetNeedsCommitIsNotLost) { | 725 TEST(SchedulerStateMachineTest, TestSetNeedsCommitIsNotLost) { |
| 721 SchedulerSettings scheduler_settings; | 726 SchedulerSettings scheduler_settings; |
| 722 StateMachine state(scheduler_settings); | 727 StateMachine state(scheduler_settings); |
| 723 state.SetCanStart(); | 728 state.SetCanStart(); |
| 724 state.UpdateState(state.NextAction()); | 729 state.UpdateState(state.NextAction()); |
| 725 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 730 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 726 state.SetNeedsCommit(); | 731 state.SetNeedsCommit(); |
| 727 state.SetVisible(true); | 732 state.SetVisible(true); |
| 728 state.SetCanDraw(true); | 733 state.SetCanDraw(true); |
| 729 | 734 |
| 730 EXPECT_TRUE(state.BeginFrameNeeded()); | 735 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 731 | 736 |
| 732 // Begin the frame. | 737 // Begin the frame. |
| 733 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 738 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 734 EXPECT_ACTION_UPDATE_STATE( | 739 EXPECT_ACTION_UPDATE_STATE( |
| 735 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 740 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 736 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT, | 741 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT, |
| 737 state.CommitState()); | 742 state.CommitState()); |
| 738 | 743 |
| 739 // Now, while the frame is in progress, set another commit. | 744 // Now, while the frame is in progress, set another commit. |
| 740 state.SetNeedsCommit(); | 745 state.SetNeedsCommit(); |
| 741 EXPECT_TRUE(state.NeedsCommit()); | 746 EXPECT_TRUE(state.NeedsCommit()); |
| 742 | 747 |
| 743 // Let the frame finish. | 748 // Let the frame finish. |
| (...skipping 15 matching lines...) Expand all Loading... |
| 759 state.OnBeginImplFrameDeadline(); | 764 state.OnBeginImplFrameDeadline(); |
| 760 EXPECT_EQ(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE, | 765 EXPECT_EQ(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE, |
| 761 state.begin_impl_frame_state()); | 766 state.begin_impl_frame_state()); |
| 762 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction()); | 767 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction()); |
| 763 | 768 |
| 764 state.OnBeginImplFrameIdle(); | 769 state.OnBeginImplFrameIdle(); |
| 765 EXPECT_EQ(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE, | 770 EXPECT_EQ(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE, |
| 766 state.begin_impl_frame_state()); | 771 state.begin_impl_frame_state()); |
| 767 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction()); | 772 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction()); |
| 768 | 773 |
| 769 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 774 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 770 EXPECT_EQ(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING, | 775 EXPECT_EQ(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING, |
| 771 state.begin_impl_frame_state()); | 776 state.begin_impl_frame_state()); |
| 772 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction()); | 777 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction()); |
| 773 | 778 |
| 774 // Finish the commit, then make sure we start the next commit immediately | 779 // Finish the commit, then make sure we start the next commit immediately |
| 775 // and draw on the next BeginImplFrame. | 780 // and draw on the next BeginImplFrame. |
| 776 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 781 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
| 777 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 782 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 778 EXPECT_ACTION_UPDATE_STATE( | 783 EXPECT_ACTION_UPDATE_STATE( |
| 779 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 784 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 796 state.SetCanStart(); | 801 state.SetCanStart(); |
| 797 state.UpdateState(state.NextAction()); | 802 state.UpdateState(state.NextAction()); |
| 798 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 803 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 799 state.SetVisible(true); | 804 state.SetVisible(true); |
| 800 state.SetCanDraw(true); | 805 state.SetCanDraw(true); |
| 801 | 806 |
| 802 // Start clean and set commit. | 807 // Start clean and set commit. |
| 803 state.SetNeedsCommit(); | 808 state.SetNeedsCommit(); |
| 804 | 809 |
| 805 // Begin the frame. | 810 // Begin the frame. |
| 806 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 811 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 807 EXPECT_ACTION_UPDATE_STATE( | 812 EXPECT_ACTION_UPDATE_STATE( |
| 808 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 813 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 809 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT, | 814 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT, |
| 810 state.CommitState()); | 815 state.CommitState()); |
| 811 EXPECT_FALSE(state.NeedsCommit()); | 816 EXPECT_FALSE(state.NeedsCommit()); |
| 812 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 817 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 813 | 818 |
| 814 // Tell the scheduler the frame finished. | 819 // Tell the scheduler the frame finished. |
| 815 state.NotifyBeginMainFrameStarted(); | 820 state.NotifyBeginMainFrameStarted(); |
| 816 state.NotifyReadyToCommit(); | 821 state.NotifyReadyToCommit(); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 833 state.DidSwapBuffers(); | 838 state.DidSwapBuffers(); |
| 834 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); | 839 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); |
| 835 state.DidSwapBuffersComplete(); | 840 state.DidSwapBuffersComplete(); |
| 836 | 841 |
| 837 // Should be synchronized, no draw needed, no action needed. | 842 // Should be synchronized, no draw needed, no action needed. |
| 838 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 843 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 839 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); | 844 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); |
| 840 EXPECT_FALSE(state.needs_redraw()); | 845 EXPECT_FALSE(state.needs_redraw()); |
| 841 } | 846 } |
| 842 | 847 |
| 848 TEST(SchedulerStateMachineTest, TestFullCycleWithMainThreadLowLatencyMode) { |
| 849 SchedulerSettings scheduler_settings; |
| 850 scheduler_settings.main_thread_should_always_be_low_latency = true; |
| 851 StateMachine state(scheduler_settings); |
| 852 state.SetCanStart(); |
| 853 state.UpdateState(state.NextAction()); |
| 854 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 855 state.SetVisible(true); |
| 856 state.SetCanDraw(true); |
| 857 |
| 858 // Start clean and set commit. |
| 859 state.SetNeedsCommit(); |
| 860 |
| 861 // Begin the frame. |
| 862 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 863 EXPECT_ACTION_UPDATE_STATE( |
| 864 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 865 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT, |
| 866 state.CommitState()); |
| 867 EXPECT_FALSE(state.NeedsCommit()); |
| 868 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 869 |
| 870 // Tell the scheduler the frame finished. |
| 871 state.NotifyBeginMainFrameStarted(); |
| 872 state.NotifyReadyToCommit(); |
| 873 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT, |
| 874 state.CommitState()); |
| 875 |
| 876 // Commit. |
| 877 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
| 878 EXPECT_TRUE(state.active_tree_needs_first_draw()); |
| 879 EXPECT_TRUE(state.needs_redraw()); |
| 880 |
| 881 // Now commit should wait for draw. |
| 882 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_DRAW, |
| 883 state.CommitState()); |
| 884 |
| 885 // Swap throttled. Do not draw. |
| 886 state.DidSwapBuffers(); |
| 887 state.OnBeginImplFrameDeadline(); |
| 888 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 889 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 890 state.DidSwapBuffersComplete(); |
| 891 |
| 892 // Haven't draw since last commit, do not begin new main frame. |
| 893 state.SetNeedsCommit(); |
| 894 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 895 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 896 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 897 |
| 898 // At BeginImplFrame deadline, draw. |
| 899 state.OnBeginImplFrameDeadline(); |
| 900 EXPECT_ACTION_UPDATE_STATE( |
| 901 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 902 state.DidSwapBuffers(); |
| 903 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); |
| 904 state.DidSwapBuffersComplete(); |
| 905 |
| 906 // Now will be able to start main frame. |
| 907 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); |
| 908 EXPECT_FALSE(state.needs_redraw()); |
| 909 EXPECT_ACTION_UPDATE_STATE( |
| 910 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 911 } |
| 912 |
| 913 TEST(SchedulerStateMachineTest, |
| 914 TestFullCycleWithMainThreadLowLatencyMode_ImplSidePaint) { |
| 915 SchedulerSettings scheduler_settings; |
| 916 scheduler_settings.main_thread_should_always_be_low_latency = true; |
| 917 scheduler_settings.impl_side_painting = true; |
| 918 StateMachine state(scheduler_settings); |
| 919 state.SetCanStart(); |
| 920 state.UpdateState(state.NextAction()); |
| 921 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 922 state.SetVisible(true); |
| 923 state.SetCanDraw(true); |
| 924 |
| 925 // Start clean and set commit. |
| 926 state.SetNeedsCommit(); |
| 927 |
| 928 // Begin the frame. |
| 929 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 930 EXPECT_ACTION_UPDATE_STATE( |
| 931 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 932 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT, |
| 933 state.CommitState()); |
| 934 EXPECT_FALSE(state.NeedsCommit()); |
| 935 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 936 |
| 937 // Tell the scheduler the frame finished. |
| 938 state.NotifyBeginMainFrameStarted(); |
| 939 state.NotifyReadyToCommit(); |
| 940 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT, |
| 941 state.CommitState()); |
| 942 |
| 943 // Commit. |
| 944 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
| 945 |
| 946 // Now commit should wait for activation. |
| 947 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_ACTIVATION, |
| 948 state.CommitState()); |
| 949 |
| 950 // No activation yet, so this commit is not drawn yet. Force to draw this |
| 951 // frame, and still block BeginMainFrame. |
| 952 state.SetNeedsRedraw(true); |
| 953 state.SetNeedsCommit(); |
| 954 state.OnBeginImplFrameDeadline(); |
| 955 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 956 EXPECT_ACTION_UPDATE_STATE( |
| 957 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 958 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 959 |
| 960 // Cannot BeginMainFrame yet since last commit is not yet activated and drawn. |
| 961 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 962 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_ACTIVATION, |
| 963 state.CommitState()); |
| 964 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 965 |
| 966 // Now activate sync tree. |
| 967 state.NotifyReadyToActivate(); |
| 968 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); |
| 969 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 970 EXPECT_TRUE(state.active_tree_needs_first_draw()); |
| 971 EXPECT_TRUE(state.needs_redraw()); |
| 972 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_DRAW, |
| 973 state.CommitState()); |
| 974 |
| 975 // Swap throttled. Do not draw. |
| 976 state.DidSwapBuffers(); |
| 977 state.OnBeginImplFrameDeadline(); |
| 978 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 979 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 980 state.DidSwapBuffersComplete(); |
| 981 |
| 982 // Haven't draw since last commit, do not begin new main frame. |
| 983 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 984 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 985 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 986 |
| 987 // At BeginImplFrame deadline, draw. This draws unblocks BeginMainFrame. |
| 988 state.OnBeginImplFrameDeadline(); |
| 989 EXPECT_ACTION_UPDATE_STATE( |
| 990 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 991 state.DidSwapBuffers(); |
| 992 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); |
| 993 state.DidSwapBuffersComplete(); |
| 994 |
| 995 // Now will be able to start main frame. |
| 996 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); |
| 997 EXPECT_FALSE(state.needs_redraw()); |
| 998 EXPECT_ACTION_UPDATE_STATE( |
| 999 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 1000 } |
| 1001 |
| 843 TEST(SchedulerStateMachineTest, TestFullCycleWithCommitRequestInbetween) { | 1002 TEST(SchedulerStateMachineTest, TestFullCycleWithCommitRequestInbetween) { |
| 844 SchedulerSettings default_scheduler_settings; | 1003 SchedulerSettings default_scheduler_settings; |
| 845 StateMachine state(default_scheduler_settings); | 1004 StateMachine state(default_scheduler_settings); |
| 846 state.SetCanStart(); | 1005 state.SetCanStart(); |
| 847 state.UpdateState(state.NextAction()); | 1006 state.UpdateState(state.NextAction()); |
| 848 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 1007 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 849 state.SetVisible(true); | 1008 state.SetVisible(true); |
| 850 state.SetCanDraw(true); | 1009 state.SetCanDraw(true); |
| 851 | 1010 |
| 852 // Start clean and set commit. | 1011 // Start clean and set commit. |
| 853 state.SetNeedsCommit(); | 1012 state.SetNeedsCommit(); |
| 854 | 1013 |
| 855 // Begin the frame. | 1014 // Begin the frame. |
| 856 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 1015 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 857 EXPECT_ACTION_UPDATE_STATE( | 1016 EXPECT_ACTION_UPDATE_STATE( |
| 858 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1017 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 859 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT, | 1018 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT, |
| 860 state.CommitState()); | 1019 state.CommitState()); |
| 861 EXPECT_FALSE(state.NeedsCommit()); | 1020 EXPECT_FALSE(state.NeedsCommit()); |
| 862 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1021 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 863 | 1022 |
| 864 // Request another commit while the commit is in flight. | 1023 // Request another commit while the commit is in flight. |
| 865 state.SetNeedsCommit(); | 1024 state.SetNeedsCommit(); |
| 866 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1025 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 887 state.DidSwapBuffers(); | 1046 state.DidSwapBuffers(); |
| 888 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); | 1047 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); |
| 889 state.DidSwapBuffersComplete(); | 1048 state.DidSwapBuffersComplete(); |
| 890 | 1049 |
| 891 // Should be synchronized, no draw needed, no action needed. | 1050 // Should be synchronized, no draw needed, no action needed. |
| 892 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1051 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 893 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); | 1052 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); |
| 894 EXPECT_FALSE(state.needs_redraw()); | 1053 EXPECT_FALSE(state.needs_redraw()); |
| 895 | 1054 |
| 896 // Next BeginImplFrame should initiate second commit. | 1055 // Next BeginImplFrame should initiate second commit. |
| 897 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 1056 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 898 EXPECT_ACTION_UPDATE_STATE( | 1057 EXPECT_ACTION_UPDATE_STATE( |
| 899 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1058 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 900 } | 1059 } |
| 901 | 1060 |
| 902 TEST(SchedulerStateMachineTest, TestRequestCommitInvisible) { | 1061 TEST(SchedulerStateMachineTest, TestRequestCommitInvisible) { |
| 903 SchedulerSettings default_scheduler_settings; | 1062 SchedulerSettings default_scheduler_settings; |
| 904 StateMachine state(default_scheduler_settings); | 1063 StateMachine state(default_scheduler_settings); |
| 905 state.SetCanStart(); | 1064 state.SetCanStart(); |
| 906 state.UpdateState(state.NextAction()); | 1065 state.UpdateState(state.NextAction()); |
| 907 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 1066 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 908 state.SetNeedsCommit(); | 1067 state.SetNeedsCommit(); |
| 909 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1068 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 910 } | 1069 } |
| 911 | 1070 |
| 912 TEST(SchedulerStateMachineTest, TestGoesInvisibleBeforeFinishCommit) { | 1071 TEST(SchedulerStateMachineTest, TestGoesInvisibleBeforeFinishCommit) { |
| 913 SchedulerSettings default_scheduler_settings; | 1072 SchedulerSettings default_scheduler_settings; |
| 914 StateMachine state(default_scheduler_settings); | 1073 StateMachine state(default_scheduler_settings); |
| 915 state.SetCanStart(); | 1074 state.SetCanStart(); |
| 916 state.UpdateState(state.NextAction()); | 1075 state.UpdateState(state.NextAction()); |
| 917 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 1076 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 918 state.SetVisible(true); | 1077 state.SetVisible(true); |
| 919 state.SetCanDraw(true); | 1078 state.SetCanDraw(true); |
| 920 | 1079 |
| 921 // Start clean and set commit. | 1080 // Start clean and set commit. |
| 922 state.SetNeedsCommit(); | 1081 state.SetNeedsCommit(); |
| 923 | 1082 |
| 924 // Begin the frame while visible. | 1083 // Begin the frame while visible. |
| 925 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 1084 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 926 EXPECT_ACTION_UPDATE_STATE( | 1085 EXPECT_ACTION_UPDATE_STATE( |
| 927 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1086 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 928 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT, | 1087 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT, |
| 929 state.CommitState()); | 1088 state.CommitState()); |
| 930 EXPECT_FALSE(state.NeedsCommit()); | 1089 EXPECT_FALSE(state.NeedsCommit()); |
| 931 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1090 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 932 | 1091 |
| 933 // Become invisible and abort BeginMainFrame. | 1092 // Become invisible and abort BeginMainFrame. |
| 934 state.SetVisible(false); | 1093 state.SetVisible(false); |
| 935 state.BeginMainFrameAborted(false); | 1094 state.BeginMainFrameAborted(false); |
| 936 | 1095 |
| 937 // We should now be back in the idle state as if we never started the frame. | 1096 // 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()); | 1097 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); |
| 939 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1098 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 940 | 1099 |
| 941 // We shouldn't do anything on the BeginImplFrame deadline. | 1100 // We shouldn't do anything on the BeginImplFrame deadline. |
| 942 state.OnBeginImplFrameDeadline(); | 1101 state.OnBeginImplFrameDeadline(); |
| 943 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1102 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 944 | 1103 |
| 945 // Become visible again. | 1104 // Become visible again. |
| 946 state.SetVisible(true); | 1105 state.SetVisible(true); |
| 947 | 1106 |
| 948 // Although we have aborted on this frame and haven't cancelled the commit | 1107 // Although we have aborted on this frame and haven't cancelled the commit |
| 949 // (i.e. need another), don't send another BeginMainFrame yet. | 1108 // (i.e. need another), don't send another BeginMainFrame yet. |
| 950 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); | 1109 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); |
| 951 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); | 1110 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); |
| 952 EXPECT_TRUE(state.NeedsCommit()); | 1111 EXPECT_TRUE(state.NeedsCommit()); |
| 953 | 1112 |
| 954 // Start a new frame. | 1113 // Start a new frame. |
| 955 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 1114 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 956 EXPECT_ACTION_UPDATE_STATE( | 1115 EXPECT_ACTION_UPDATE_STATE( |
| 957 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1116 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 958 | 1117 |
| 959 // We should be starting the commit now. | 1118 // We should be starting the commit now. |
| 960 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT, | 1119 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT, |
| 961 state.CommitState()); | 1120 state.CommitState()); |
| 962 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1121 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 963 } | 1122 } |
| 964 | 1123 |
| 965 TEST(SchedulerStateMachineTest, AbortBeginMainFrameAndCancelCommit) { | 1124 TEST(SchedulerStateMachineTest, AbortBeginMainFrameAndCancelCommit) { |
| (...skipping 18 matching lines...) Expand all Loading... |
| 984 // Abort the commit, cancelling future commits. | 1143 // Abort the commit, cancelling future commits. |
| 985 state.BeginMainFrameAborted(true); | 1144 state.BeginMainFrameAborted(true); |
| 986 | 1145 |
| 987 // Verify that another commit doesn't start on the same frame. | 1146 // Verify that another commit doesn't start on the same frame. |
| 988 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); | 1147 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); |
| 989 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); | 1148 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); |
| 990 EXPECT_FALSE(state.NeedsCommit()); | 1149 EXPECT_FALSE(state.NeedsCommit()); |
| 991 | 1150 |
| 992 // Start a new frame; draw because this is the first frame since output | 1151 // Start a new frame; draw because this is the first frame since output |
| 993 // surface init'd. | 1152 // surface init'd. |
| 994 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 1153 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 995 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1154 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 996 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1155 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 997 state.OnBeginImplFrameDeadline(); | 1156 state.OnBeginImplFrameDeadline(); |
| 998 EXPECT_ACTION_UPDATE_STATE( | 1157 EXPECT_ACTION_UPDATE_STATE( |
| 999 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1158 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 1000 state.DidSwapBuffers(); | 1159 state.DidSwapBuffers(); |
| 1001 state.DidSwapBuffersComplete(); | 1160 state.DidSwapBuffersComplete(); |
| 1002 | 1161 |
| 1003 // Verify another commit doesn't start on another frame either. | 1162 // Verify another commit doesn't start on another frame either. |
| 1004 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); | 1163 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); | 1195 state.SetVisible(false); |
| 1037 state.BeginMainFrameAborted(true); | 1196 state.BeginMainFrameAborted(true); |
| 1038 | 1197 |
| 1039 // Verify that another commit doesn't start on the same frame. | 1198 // Verify that another commit doesn't start on the same frame. |
| 1040 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); | 1199 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); |
| 1041 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); | 1200 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); |
| 1042 EXPECT_FALSE(state.NeedsCommit()); | 1201 EXPECT_FALSE(state.NeedsCommit()); |
| 1043 | 1202 |
| 1044 // Become visible and start a new frame. | 1203 // Become visible and start a new frame. |
| 1045 state.SetVisible(true); | 1204 state.SetVisible(true); |
| 1046 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 1205 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 1047 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1206 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 1048 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1207 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1049 | 1208 |
| 1050 // Draw because this is the first frame since output surface init'd. | 1209 // Draw because this is the first frame since output surface init'd. |
| 1051 state.OnBeginImplFrameDeadline(); | 1210 state.OnBeginImplFrameDeadline(); |
| 1052 EXPECT_ACTION_UPDATE_STATE( | 1211 EXPECT_ACTION_UPDATE_STATE( |
| 1053 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1212 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 1054 state.DidSwapBuffers(); | 1213 state.DidSwapBuffers(); |
| 1055 state.DidSwapBuffersComplete(); | 1214 state.DidSwapBuffersComplete(); |
| 1056 | 1215 |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1101 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); | 1260 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); |
| 1102 EXPECT_TRUE(state.NeedsCommit()); | 1261 EXPECT_TRUE(state.NeedsCommit()); |
| 1103 | 1262 |
| 1104 // Become visible but nothing happens until the next frame. | 1263 // Become visible but nothing happens until the next frame. |
| 1105 state.SetVisible(true); | 1264 state.SetVisible(true); |
| 1106 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); | 1265 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); |
| 1107 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); | 1266 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); |
| 1108 EXPECT_TRUE(state.NeedsCommit()); | 1267 EXPECT_TRUE(state.NeedsCommit()); |
| 1109 | 1268 |
| 1110 // We should get that commit when we begin the next frame. | 1269 // We should get that commit when we begin the next frame. |
| 1111 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 1270 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 1112 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1271 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 1113 EXPECT_ACTION_UPDATE_STATE( | 1272 EXPECT_ACTION_UPDATE_STATE( |
| 1114 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1273 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 1115 } | 1274 } |
| 1116 | 1275 |
| 1117 TEST(SchedulerStateMachineTest, | 1276 TEST(SchedulerStateMachineTest, |
| 1118 AbortBeginMainFrameAndRequestCommitAndBeginImplFrameWhenInvisible) { | 1277 AbortBeginMainFrameAndRequestCommitAndBeginImplFrameWhenInvisible) { |
| 1119 SchedulerSettings default_scheduler_settings; | 1278 SchedulerSettings default_scheduler_settings; |
| 1120 StateMachine state(default_scheduler_settings); | 1279 StateMachine state(default_scheduler_settings); |
| 1121 state.SetCanStart(); | 1280 state.SetCanStart(); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 1138 state.SetVisible(false); | 1297 state.SetVisible(false); |
| 1139 state.BeginMainFrameAborted(true); | 1298 state.BeginMainFrameAborted(true); |
| 1140 | 1299 |
| 1141 // Asking for a commit while not visible won't make it happen. | 1300 // Asking for a commit while not visible won't make it happen. |
| 1142 state.SetNeedsCommit(); | 1301 state.SetNeedsCommit(); |
| 1143 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); | 1302 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); |
| 1144 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); | 1303 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); |
| 1145 EXPECT_TRUE(state.NeedsCommit()); | 1304 EXPECT_TRUE(state.NeedsCommit()); |
| 1146 | 1305 |
| 1147 // Begin a frame when not visible, the scheduler animates but does not commit. | 1306 // Begin a frame when not visible, the scheduler animates but does not commit. |
| 1148 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 1307 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 1149 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); | 1308 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); |
| 1150 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1309 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 1151 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); | 1310 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); |
| 1152 EXPECT_TRUE(state.NeedsCommit()); | 1311 EXPECT_TRUE(state.NeedsCommit()); |
| 1153 | 1312 |
| 1154 // Become visible and the requested commit happens immediately. | 1313 // Become visible and the requested commit happens immediately. |
| 1155 state.SetVisible(true); | 1314 state.SetVisible(true); |
| 1156 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); | 1315 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); |
| 1157 EXPECT_ACTION_UPDATE_STATE( | 1316 EXPECT_ACTION_UPDATE_STATE( |
| 1158 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1317 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 1159 } | 1318 } |
| 1160 | 1319 |
| 1161 TEST(SchedulerStateMachineTest, TestFirstContextCreation) { | 1320 TEST(SchedulerStateMachineTest, TestFirstContextCreation) { |
| 1162 SchedulerSettings default_scheduler_settings; | 1321 SchedulerSettings default_scheduler_settings; |
| 1163 StateMachine state(default_scheduler_settings); | 1322 StateMachine state(default_scheduler_settings); |
| 1164 state.SetCanStart(); | 1323 state.SetCanStart(); |
| 1165 state.SetVisible(true); | 1324 state.SetVisible(true); |
| 1166 state.SetCanDraw(true); | 1325 state.SetCanDraw(true); |
| 1167 | 1326 |
| 1168 EXPECT_ACTION_UPDATE_STATE( | 1327 EXPECT_ACTION_UPDATE_STATE( |
| 1169 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); | 1328 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); |
| 1170 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 1329 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 1171 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1330 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1172 | 1331 |
| 1173 // Check that the first init does not SetNeedsCommit. | 1332 // Check that the first init does not SetNeedsCommit. |
| 1174 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 1333 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 1175 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1334 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1176 state.OnBeginImplFrameDeadline(); | 1335 state.OnBeginImplFrameDeadline(); |
| 1177 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1336 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1178 | 1337 |
| 1179 // Check that a needs commit initiates a BeginMainFrame. | 1338 // Check that a needs commit initiates a BeginMainFrame. |
| 1180 state.SetNeedsCommit(); | 1339 state.SetNeedsCommit(); |
| 1181 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 1340 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 1182 EXPECT_ACTION_UPDATE_STATE( | 1341 EXPECT_ACTION_UPDATE_STATE( |
| 1183 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1342 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 1184 } | 1343 } |
| 1185 | 1344 |
| 1186 TEST(SchedulerStateMachineTest, TestContextLostWhenCompletelyIdle) { | 1345 TEST(SchedulerStateMachineTest, TestContextLostWhenCompletelyIdle) { |
| 1187 SchedulerSettings default_scheduler_settings; | 1346 SchedulerSettings default_scheduler_settings; |
| 1188 StateMachine state(default_scheduler_settings); | 1347 StateMachine state(default_scheduler_settings); |
| 1189 state.SetCanStart(); | 1348 state.SetCanStart(); |
| 1190 state.UpdateState(state.NextAction()); | 1349 state.UpdateState(state.NextAction()); |
| 1191 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 1350 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 1192 | 1351 |
| 1193 state.SetVisible(true); | 1352 state.SetVisible(true); |
| 1194 state.SetCanDraw(true); | 1353 state.SetCanDraw(true); |
| 1195 | 1354 |
| 1196 EXPECT_NE(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION, | 1355 EXPECT_NE(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION, |
| 1197 state.NextAction()); | 1356 state.NextAction()); |
| 1198 state.DidLoseOutputSurface(); | 1357 state.DidLoseOutputSurface(); |
| 1199 | 1358 |
| 1200 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION, | 1359 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION, |
| 1201 state.NextAction()); | 1360 state.NextAction()); |
| 1202 state.UpdateState(state.NextAction()); | 1361 state.UpdateState(state.NextAction()); |
| 1203 | 1362 |
| 1204 // Once context recreation begins, nothing should happen. | 1363 // Once context recreation begins, nothing should happen. |
| 1205 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1364 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1206 | 1365 |
| 1207 // Recreate the context. | 1366 // Recreate the context. |
| 1208 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 1367 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 1209 | 1368 |
| 1210 // When the context is recreated, we should begin a commit. | 1369 // When the context is recreated, we should begin a commit. |
| 1211 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 1370 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 1212 EXPECT_ACTION_UPDATE_STATE( | 1371 EXPECT_ACTION_UPDATE_STATE( |
| 1213 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1372 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 1214 } | 1373 } |
| 1215 | 1374 |
| 1216 TEST(SchedulerStateMachineTest, | 1375 TEST(SchedulerStateMachineTest, |
| 1217 TestContextLostWhenIdleAndCommitRequestedWhileRecreating) { | 1376 TestContextLostWhenIdleAndCommitRequestedWhileRecreating) { |
| 1218 SchedulerSettings default_scheduler_settings; | 1377 SchedulerSettings default_scheduler_settings; |
| 1219 StateMachine state(default_scheduler_settings); | 1378 StateMachine state(default_scheduler_settings); |
| 1220 state.SetCanStart(); | 1379 state.SetCanStart(); |
| 1221 state.UpdateState(state.NextAction()); | 1380 state.UpdateState(state.NextAction()); |
| 1222 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 1381 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 1223 state.SetVisible(true); | 1382 state.SetVisible(true); |
| 1224 state.SetCanDraw(true); | 1383 state.SetCanDraw(true); |
| 1225 | 1384 |
| 1226 EXPECT_NE(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION, | 1385 EXPECT_NE(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION, |
| 1227 state.NextAction()); | 1386 state.NextAction()); |
| 1228 state.DidLoseOutputSurface(); | 1387 state.DidLoseOutputSurface(); |
| 1229 | 1388 |
| 1230 EXPECT_ACTION_UPDATE_STATE( | 1389 EXPECT_ACTION_UPDATE_STATE( |
| 1231 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); | 1390 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); |
| 1232 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1391 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1233 | 1392 |
| 1234 // Once context recreation begins, nothing should happen. | 1393 // Once context recreation begins, nothing should happen. |
| 1235 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 1394 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 1236 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1395 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1237 state.OnBeginImplFrameDeadline(); | 1396 state.OnBeginImplFrameDeadline(); |
| 1238 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1397 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1239 | 1398 |
| 1240 // While context is recreating, commits shouldn't begin. | 1399 // While context is recreating, commits shouldn't begin. |
| 1241 state.SetNeedsCommit(); | 1400 state.SetNeedsCommit(); |
| 1242 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 1401 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 1243 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1402 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1244 state.OnBeginImplFrameDeadline(); | 1403 state.OnBeginImplFrameDeadline(); |
| 1245 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1404 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1246 | 1405 |
| 1247 // Recreate the context | 1406 // Recreate the context |
| 1248 state.DidCreateAndInitializeOutputSurface(); | 1407 state.DidCreateAndInitializeOutputSurface(); |
| 1249 EXPECT_FALSE(state.RedrawPending()); | 1408 EXPECT_FALSE(state.RedrawPending()); |
| 1250 | 1409 |
| 1251 // When the context is recreated, we should begin a commit | 1410 // When the context is recreated, we should begin a commit |
| 1252 EXPECT_ACTION_UPDATE_STATE( | 1411 EXPECT_ACTION_UPDATE_STATE( |
| 1253 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1412 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 1254 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1413 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1255 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT, | 1414 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT, |
| 1256 state.CommitState()); | 1415 state.CommitState()); |
| 1257 | 1416 |
| 1258 state.NotifyBeginMainFrameStarted(); | 1417 state.NotifyBeginMainFrameStarted(); |
| 1259 state.NotifyReadyToCommit(); | 1418 state.NotifyReadyToCommit(); |
| 1260 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 1419 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
| 1261 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1420 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1262 // Finishing the first commit after initializing an output surface should | 1421 // Finishing the first commit after initializing an output surface should |
| 1263 // automatically cause a redraw. | 1422 // automatically cause a redraw. |
| 1264 EXPECT_TRUE(state.RedrawPending()); | 1423 EXPECT_TRUE(state.RedrawPending()); |
| 1265 | 1424 |
| 1266 // Once the context is recreated, whether we draw should be based on | 1425 // Once the context is recreated, whether we draw should be based on |
| 1267 // SetCanDraw. | 1426 // SetCanDraw. |
| 1268 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 1427 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 1269 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1428 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 1270 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1429 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1271 state.OnBeginImplFrameDeadline(); | 1430 state.OnBeginImplFrameDeadline(); |
| 1272 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE, | 1431 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE, |
| 1273 state.NextAction()); | 1432 state.NextAction()); |
| 1274 state.SetCanDraw(false); | 1433 state.SetCanDraw(false); |
| 1275 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT, | 1434 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT, |
| 1276 state.NextAction()); | 1435 state.NextAction()); |
| 1277 state.SetCanDraw(true); | 1436 state.SetCanDraw(true); |
| 1278 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE, | 1437 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE, |
| 1279 state.NextAction()); | 1438 state.NextAction()); |
| 1280 } | 1439 } |
| 1281 | 1440 |
| 1282 TEST(SchedulerStateMachineTest, TestContextLostWhileCommitInProgress) { | 1441 TEST(SchedulerStateMachineTest, TestContextLostWhileCommitInProgress) { |
| 1283 SchedulerSettings scheduler_settings; | 1442 SchedulerSettings scheduler_settings; |
| 1284 StateMachine state(scheduler_settings); | 1443 StateMachine state(scheduler_settings); |
| 1285 state.SetCanStart(); | 1444 state.SetCanStart(); |
| 1286 state.UpdateState(state.NextAction()); | 1445 state.UpdateState(state.NextAction()); |
| 1287 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 1446 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 1288 state.SetVisible(true); | 1447 state.SetVisible(true); |
| 1289 state.SetCanDraw(true); | 1448 state.SetCanDraw(true); |
| 1290 | 1449 |
| 1291 // Get a commit in flight. | 1450 // Get a commit in flight. |
| 1292 state.SetNeedsCommit(); | 1451 state.SetNeedsCommit(); |
| 1293 | 1452 |
| 1294 // Set damage and expect a draw. | 1453 // Set damage and expect a draw. |
| 1295 state.SetNeedsRedraw(true); | 1454 state.SetNeedsRedraw(true); |
| 1296 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 1455 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 1297 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1456 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 1298 EXPECT_ACTION_UPDATE_STATE( | 1457 EXPECT_ACTION_UPDATE_STATE( |
| 1299 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1458 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 1300 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1459 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1301 state.OnBeginImplFrameDeadline(); | 1460 state.OnBeginImplFrameDeadline(); |
| 1302 EXPECT_ACTION_UPDATE_STATE( | 1461 EXPECT_ACTION_UPDATE_STATE( |
| 1303 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1462 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 1304 state.DidSwapBuffers(); | 1463 state.DidSwapBuffers(); |
| 1305 state.DidSwapBuffersComplete(); | 1464 state.DidSwapBuffersComplete(); |
| 1306 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1465 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. | 1480 // waiting for the first draw to unblock the main thread. |
| 1322 EXPECT_TRUE(state.active_tree_needs_first_draw()); | 1481 EXPECT_TRUE(state.active_tree_needs_first_draw()); |
| 1323 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT); | 1482 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT); |
| 1324 | 1483 |
| 1325 // Expect to begin context recreation only in BEGIN_IMPL_FRAME_STATE_IDLE | 1484 // Expect to begin context recreation only in BEGIN_IMPL_FRAME_STATE_IDLE |
| 1326 EXPECT_EQ(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE, | 1485 EXPECT_EQ(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE, |
| 1327 state.begin_impl_frame_state()); | 1486 state.begin_impl_frame_state()); |
| 1328 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION, | 1487 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION, |
| 1329 state.NextAction()); | 1488 state.NextAction()); |
| 1330 | 1489 |
| 1331 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 1490 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 1332 EXPECT_EQ(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING, | 1491 EXPECT_EQ(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING, |
| 1333 state.begin_impl_frame_state()); | 1492 state.begin_impl_frame_state()); |
| 1334 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); | 1493 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); |
| 1335 | 1494 |
| 1336 state.OnBeginImplFrameDeadlinePending(); | 1495 state.OnBeginImplFrameDeadlinePending(); |
| 1337 EXPECT_EQ(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME, | 1496 EXPECT_EQ(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME, |
| 1338 state.begin_impl_frame_state()); | 1497 state.begin_impl_frame_state()); |
| 1339 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); | 1498 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); |
| 1340 | 1499 |
| 1341 state.OnBeginImplFrameDeadline(); | 1500 state.OnBeginImplFrameDeadline(); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 1353 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 1512 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 1354 state.SetVisible(true); | 1513 state.SetVisible(true); |
| 1355 state.SetCanDraw(true); | 1514 state.SetCanDraw(true); |
| 1356 | 1515 |
| 1357 // Get a commit in flight. | 1516 // Get a commit in flight. |
| 1358 state.SetNeedsCommit(); | 1517 state.SetNeedsCommit(); |
| 1359 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1518 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1360 | 1519 |
| 1361 // Set damage and expect a draw. | 1520 // Set damage and expect a draw. |
| 1362 state.SetNeedsRedraw(true); | 1521 state.SetNeedsRedraw(true); |
| 1363 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 1522 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 1364 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1523 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 1365 EXPECT_ACTION_UPDATE_STATE( | 1524 EXPECT_ACTION_UPDATE_STATE( |
| 1366 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1525 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 1367 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1526 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1368 state.OnBeginImplFrameDeadline(); | 1527 state.OnBeginImplFrameDeadline(); |
| 1369 EXPECT_ACTION_UPDATE_STATE( | 1528 EXPECT_ACTION_UPDATE_STATE( |
| 1370 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1529 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 1371 state.DidSwapBuffers(); | 1530 state.DidSwapBuffers(); |
| 1372 state.DidSwapBuffersComplete(); | 1531 state.DidSwapBuffersComplete(); |
| 1373 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1532 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 1388 | 1547 |
| 1389 // Because the output surface is missing, we expect the draw to abort. | 1548 // Because the output surface is missing, we expect the draw to abort. |
| 1390 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT); | 1549 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT); |
| 1391 | 1550 |
| 1392 // Expect to begin context recreation only in BEGIN_IMPL_FRAME_STATE_IDLE | 1551 // Expect to begin context recreation only in BEGIN_IMPL_FRAME_STATE_IDLE |
| 1393 EXPECT_EQ(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE, | 1552 EXPECT_EQ(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE, |
| 1394 state.begin_impl_frame_state()); | 1553 state.begin_impl_frame_state()); |
| 1395 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION, | 1554 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION, |
| 1396 state.NextAction()); | 1555 state.NextAction()); |
| 1397 | 1556 |
| 1398 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 1557 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 1399 EXPECT_EQ(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING, | 1558 EXPECT_EQ(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING, |
| 1400 state.begin_impl_frame_state()); | 1559 state.begin_impl_frame_state()); |
| 1401 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); | 1560 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); |
| 1402 | 1561 |
| 1403 state.OnBeginImplFrameDeadlinePending(); | 1562 state.OnBeginImplFrameDeadlinePending(); |
| 1404 EXPECT_EQ(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME, | 1563 EXPECT_EQ(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME, |
| 1405 state.begin_impl_frame_state()); | 1564 state.begin_impl_frame_state()); |
| 1406 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); | 1565 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); |
| 1407 | 1566 |
| 1408 state.OnBeginImplFrameDeadline(); | 1567 state.OnBeginImplFrameDeadline(); |
| 1409 EXPECT_EQ(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE, | 1568 EXPECT_EQ(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE, |
| 1410 state.begin_impl_frame_state()); | 1569 state.begin_impl_frame_state()); |
| 1411 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); | 1570 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); |
| 1412 | 1571 |
| 1413 state.OnBeginImplFrameIdle(); | 1572 state.OnBeginImplFrameIdle(); |
| 1414 EXPECT_ACTION_UPDATE_STATE( | 1573 EXPECT_ACTION_UPDATE_STATE( |
| 1415 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); | 1574 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); |
| 1416 | 1575 |
| 1417 // After we get a new output surface, the commit flow should start. | 1576 // After we get a new output surface, the commit flow should start. |
| 1418 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 1577 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 1419 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 1578 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 1420 EXPECT_ACTION_UPDATE_STATE( | 1579 EXPECT_ACTION_UPDATE_STATE( |
| 1421 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1580 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 1422 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1581 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1423 state.NotifyBeginMainFrameStarted(); | 1582 state.NotifyBeginMainFrameStarted(); |
| 1424 state.NotifyReadyToCommit(); | 1583 state.NotifyReadyToCommit(); |
| 1425 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 1584 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
| 1426 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1585 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1427 state.OnBeginImplFrameDeadline(); | 1586 state.OnBeginImplFrameDeadline(); |
| 1428 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1587 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 1429 EXPECT_ACTION_UPDATE_STATE( | 1588 EXPECT_ACTION_UPDATE_STATE( |
| (...skipping 15 matching lines...) Expand all Loading... |
| 1445 state.SetNeedsRedraw(true); | 1604 state.SetNeedsRedraw(true); |
| 1446 | 1605 |
| 1447 // Cause a lost output surface, and restore it. | 1606 // Cause a lost output surface, and restore it. |
| 1448 state.DidLoseOutputSurface(); | 1607 state.DidLoseOutputSurface(); |
| 1449 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION, | 1608 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION, |
| 1450 state.NextAction()); | 1609 state.NextAction()); |
| 1451 state.UpdateState(state.NextAction()); | 1610 state.UpdateState(state.NextAction()); |
| 1452 state.DidCreateAndInitializeOutputSurface(); | 1611 state.DidCreateAndInitializeOutputSurface(); |
| 1453 | 1612 |
| 1454 EXPECT_FALSE(state.RedrawPending()); | 1613 EXPECT_FALSE(state.RedrawPending()); |
| 1455 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 1614 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 1456 EXPECT_EQ(SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME, | 1615 EXPECT_EQ(SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME, |
| 1457 state.NextAction()); | 1616 state.NextAction()); |
| 1458 } | 1617 } |
| 1459 | 1618 |
| 1460 TEST(SchedulerStateMachineTest, | 1619 TEST(SchedulerStateMachineTest, |
| 1461 TestPendingActivationsShouldBeForcedAfterLostOutputSurface) { | 1620 TestPendingActivationsShouldBeForcedAfterLostOutputSurface) { |
| 1462 SchedulerSettings settings; | 1621 SchedulerSettings settings; |
| 1463 settings.impl_side_painting = true; | 1622 settings.impl_side_painting = true; |
| 1464 StateMachine state(settings); | 1623 StateMachine state(settings); |
| 1465 state.SetCanStart(); | 1624 state.SetCanStart(); |
| (...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1577 settings.impl_side_painting = true; | 1736 settings.impl_side_painting = true; |
| 1578 StateMachine state(settings); | 1737 StateMachine state(settings); |
| 1579 state.SetCanStart(); | 1738 state.SetCanStart(); |
| 1580 state.UpdateState(state.NextAction()); | 1739 state.UpdateState(state.NextAction()); |
| 1581 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 1740 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 1582 state.SetVisible(true); | 1741 state.SetVisible(true); |
| 1583 state.SetCanDraw(true); | 1742 state.SetCanDraw(true); |
| 1584 | 1743 |
| 1585 // This test mirrors what happens during the first frame of a scroll gesture. | 1744 // This test mirrors what happens during the first frame of a scroll gesture. |
| 1586 // First we get the input event and a BeginFrame. | 1745 // First we get the input event and a BeginFrame. |
| 1587 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 1746 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 1588 | 1747 |
| 1589 // As a response the compositor requests a redraw and a commit to tell the | 1748 // As a response the compositor requests a redraw and a commit to tell the |
| 1590 // main thread about the new scroll offset. | 1749 // main thread about the new scroll offset. |
| 1591 state.SetNeedsRedraw(true); | 1750 state.SetNeedsRedraw(true); |
| 1592 state.SetNeedsCommit(); | 1751 state.SetNeedsCommit(); |
| 1593 | 1752 |
| 1594 // We should start the commit normally. | 1753 // We should start the commit normally. |
| 1595 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1754 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 1596 EXPECT_ACTION_UPDATE_STATE( | 1755 EXPECT_ACTION_UPDATE_STATE( |
| 1597 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1756 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 1612 StateMachine& state = *state_ptr; | 1771 StateMachine& state = *state_ptr; |
| 1613 | 1772 |
| 1614 state.NotifyBeginMainFrameStarted(); | 1773 state.NotifyBeginMainFrameStarted(); |
| 1615 state.NotifyReadyToCommit(); | 1774 state.NotifyReadyToCommit(); |
| 1616 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 1775 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
| 1617 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1776 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1618 state.NotifyReadyToActivate(); | 1777 state.NotifyReadyToActivate(); |
| 1619 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); | 1778 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); |
| 1620 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1779 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1621 | 1780 |
| 1622 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 1781 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 1623 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1782 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 1624 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1783 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1625 | 1784 |
| 1626 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineEarly()); | 1785 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineEarly()); |
| 1627 state.OnBeginImplFrameDeadline(); | 1786 state.OnBeginImplFrameDeadline(); |
| 1628 EXPECT_ACTION_UPDATE_STATE( | 1787 EXPECT_ACTION_UPDATE_STATE( |
| 1629 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1788 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 1630 state.DidSwapBuffers(); | 1789 state.DidSwapBuffers(); |
| 1631 } | 1790 } |
| 1632 | 1791 |
| 1633 TEST(SchedulerStateMachineTest, TestImplLatencyTakesPriority) { | 1792 TEST(SchedulerStateMachineTest, TestImplLatencyTakesPriority) { |
| 1634 SchedulerSettings settings; | 1793 SchedulerSettings settings; |
| 1635 settings.impl_side_painting = true; | 1794 settings.impl_side_painting = true; |
| 1636 StateMachine state(settings); | 1795 StateMachine state(settings); |
| 1637 state.SetCanStart(); | 1796 state.SetCanStart(); |
| 1638 state.UpdateState(state.NextAction()); | 1797 state.UpdateState(state.NextAction()); |
| 1639 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 1798 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 1640 state.SetVisible(true); | 1799 state.SetVisible(true); |
| 1641 state.SetCanDraw(true); | 1800 state.SetCanDraw(true); |
| 1642 | 1801 |
| 1643 // This test ensures that impl-draws are prioritized over main thread updates | 1802 // This test ensures that impl-draws are prioritized over main thread updates |
| 1644 // in prefer impl latency mode. | 1803 // in prefer impl latency mode. |
| 1645 state.SetNeedsRedraw(true); | 1804 state.SetNeedsRedraw(true); |
| 1646 state.SetNeedsCommit(); | 1805 state.SetNeedsCommit(); |
| 1647 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 1806 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 1648 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1807 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 1649 EXPECT_ACTION_UPDATE_STATE( | 1808 EXPECT_ACTION_UPDATE_STATE( |
| 1650 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1809 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 1651 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1810 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1652 | 1811 |
| 1653 // Verify the deadline is not triggered early until we enter | 1812 // Verify the deadline is not triggered early until we enter |
| 1654 // prefer impl latency mode. | 1813 // prefer impl latency mode. |
| 1655 EXPECT_FALSE(state.ShouldTriggerBeginImplFrameDeadlineEarly()); | 1814 EXPECT_FALSE(state.ShouldTriggerBeginImplFrameDeadlineEarly()); |
| 1656 state.SetImplLatencyTakesPriority(true); | 1815 state.SetImplLatencyTakesPriority(true); |
| 1657 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineEarly()); | 1816 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineEarly()); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 1674 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1833 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1675 | 1834 |
| 1676 // Finish the previous commit and draw it. | 1835 // Finish the previous commit and draw it. |
| 1677 FinishPreviousCommitAndDrawWithoutExitingDeadline(&state); | 1836 FinishPreviousCommitAndDrawWithoutExitingDeadline(&state); |
| 1678 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1837 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1679 | 1838 |
| 1680 // Verify we do not send another BeginMainFrame if was are swap throttled | 1839 // Verify we do not send another BeginMainFrame if was are swap throttled |
| 1681 // and did not just swap. | 1840 // and did not just swap. |
| 1682 state.SetNeedsCommit(); | 1841 state.SetNeedsCommit(); |
| 1683 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1842 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1684 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 1843 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 1685 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1844 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1686 EXPECT_FALSE(state.ShouldTriggerBeginImplFrameDeadlineEarly()); | 1845 EXPECT_FALSE(state.ShouldTriggerBeginImplFrameDeadlineEarly()); |
| 1687 state.OnBeginImplFrameDeadline(); | 1846 state.OnBeginImplFrameDeadline(); |
| 1688 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1847 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1689 } | 1848 } |
| 1690 | 1849 |
| 1691 TEST(SchedulerStateMachineTest, TestTriggerDeadlineEarlyOnLostOutputSurface) { | 1850 TEST(SchedulerStateMachineTest, TestTriggerDeadlineEarlyOnLostOutputSurface) { |
| 1692 SchedulerSettings default_scheduler_settings; | 1851 SchedulerSettings default_scheduler_settings; |
| 1693 StateMachine state(default_scheduler_settings); | 1852 StateMachine state(default_scheduler_settings); |
| 1694 state.SetCanStart(); | 1853 state.SetCanStart(); |
| 1695 state.UpdateState(state.NextAction()); | 1854 state.UpdateState(state.NextAction()); |
| 1696 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 1855 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 1697 state.SetVisible(true); | 1856 state.SetVisible(true); |
| 1698 state.SetCanDraw(true); | 1857 state.SetCanDraw(true); |
| 1699 | 1858 |
| 1700 state.SetNeedsCommit(); | 1859 state.SetNeedsCommit(); |
| 1701 | 1860 |
| 1702 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 1861 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 1703 EXPECT_ACTION_UPDATE_STATE( | 1862 EXPECT_ACTION_UPDATE_STATE( |
| 1704 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1863 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 1705 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1864 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1706 EXPECT_FALSE(state.ShouldTriggerBeginImplFrameDeadlineEarly()); | 1865 EXPECT_FALSE(state.ShouldTriggerBeginImplFrameDeadlineEarly()); |
| 1707 | 1866 |
| 1708 state.DidLoseOutputSurface(); | 1867 state.DidLoseOutputSurface(); |
| 1709 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1868 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1710 // The deadline should be triggered immediately when output surface is lost. | 1869 // The deadline should be triggered immediately when output surface is lost. |
| 1711 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineEarly()); | 1870 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineEarly()); |
| 1712 } | 1871 } |
| 1713 | 1872 |
| 1714 TEST(SchedulerStateMachineTest, TestSetNeedsAnimate) { | 1873 TEST(SchedulerStateMachineTest, TestSetNeedsAnimate) { |
| 1715 SchedulerSettings settings; | 1874 SchedulerSettings settings; |
| 1716 settings.impl_side_painting = true; | 1875 settings.impl_side_painting = true; |
| 1717 StateMachine state(settings); | 1876 StateMachine state(settings); |
| 1718 state.SetCanStart(); | 1877 state.SetCanStart(); |
| 1719 state.UpdateState(state.NextAction()); | 1878 state.UpdateState(state.NextAction()); |
| 1720 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 1879 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 1721 state.SetVisible(true); | 1880 state.SetVisible(true); |
| 1722 state.SetCanDraw(true); | 1881 state.SetCanDraw(true); |
| 1723 | 1882 |
| 1724 // Test requesting an animation that, when run, causes us to draw. | 1883 // Test requesting an animation that, when run, causes us to draw. |
| 1725 state.SetNeedsAnimate(); | 1884 state.SetNeedsAnimate(); |
| 1726 EXPECT_TRUE(state.BeginFrameNeeded()); | 1885 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 1727 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1886 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1728 | 1887 |
| 1729 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 1888 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 1730 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1889 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 1731 | 1890 |
| 1732 state.OnBeginImplFrameDeadlinePending(); | 1891 state.OnBeginImplFrameDeadlinePending(); |
| 1733 state.OnBeginImplFrameDeadline(); | 1892 state.OnBeginImplFrameDeadline(); |
| 1734 EXPECT_ACTION_UPDATE_STATE( | 1893 EXPECT_ACTION_UPDATE_STATE( |
| 1735 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1894 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 1736 } | 1895 } |
| 1737 | 1896 |
| 1738 TEST(SchedulerStateMachineTest, TestAnimateBeforeCommit) { | 1897 TEST(SchedulerStateMachineTest, TestAnimateBeforeCommit) { |
| 1739 SchedulerSettings settings; | 1898 SchedulerSettings settings; |
| 1740 settings.impl_side_painting = true; | 1899 settings.impl_side_painting = true; |
| 1741 StateMachine state(settings); | 1900 StateMachine state(settings); |
| 1742 state.SetCanStart(); | 1901 state.SetCanStart(); |
| 1743 state.UpdateState(state.NextAction()); | 1902 state.UpdateState(state.NextAction()); |
| 1744 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 1903 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 1745 state.SetVisible(true); | 1904 state.SetVisible(true); |
| 1746 state.SetCanDraw(true); | 1905 state.SetCanDraw(true); |
| 1747 | 1906 |
| 1748 // Check that animations are updated before we start a commit. | 1907 // Check that animations are updated before we start a commit. |
| 1749 state.SetNeedsAnimate(); | 1908 state.SetNeedsAnimate(); |
| 1750 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1909 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1751 state.SetNeedsCommit(); | 1910 state.SetNeedsCommit(); |
| 1752 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1911 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1753 EXPECT_TRUE(state.BeginFrameNeeded()); | 1912 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 1754 | 1913 |
| 1755 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 1914 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 1756 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1915 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 1757 EXPECT_ACTION_UPDATE_STATE( | 1916 EXPECT_ACTION_UPDATE_STATE( |
| 1758 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1917 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 1759 | 1918 |
| 1760 state.OnBeginImplFrameDeadlinePending(); | 1919 state.OnBeginImplFrameDeadlinePending(); |
| 1761 state.OnBeginImplFrameDeadline(); | 1920 state.OnBeginImplFrameDeadline(); |
| 1762 EXPECT_ACTION_UPDATE_STATE( | 1921 EXPECT_ACTION_UPDATE_STATE( |
| 1763 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1922 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 1764 } | 1923 } |
| 1765 | 1924 |
| 1766 TEST(SchedulerStateMachineTest, TestAnimateAfterCommitBeforeDraw) { | 1925 TEST(SchedulerStateMachineTest, TestAnimateAfterCommitBeforeDraw) { |
| 1767 SchedulerSettings settings; | 1926 SchedulerSettings settings; |
| 1768 settings.impl_side_painting = true; | 1927 settings.impl_side_painting = true; |
| 1769 StateMachine state(settings); | 1928 StateMachine state(settings); |
| 1770 state.SetCanStart(); | 1929 state.SetCanStart(); |
| 1771 state.UpdateState(state.NextAction()); | 1930 state.UpdateState(state.NextAction()); |
| 1772 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 1931 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 1773 state.SetVisible(true); | 1932 state.SetVisible(true); |
| 1774 state.SetCanDraw(true); | 1933 state.SetCanDraw(true); |
| 1775 | 1934 |
| 1776 // Check that animations are updated before we start a commit. | 1935 // Check that animations are updated before we start a commit. |
| 1777 state.SetNeedsAnimate(); | 1936 state.SetNeedsAnimate(); |
| 1778 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1937 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1779 state.SetNeedsCommit(); | 1938 state.SetNeedsCommit(); |
| 1780 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1939 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1781 EXPECT_TRUE(state.BeginFrameNeeded()); | 1940 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 1782 | 1941 |
| 1783 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 1942 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 1784 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1943 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 1785 EXPECT_ACTION_UPDATE_STATE( | 1944 EXPECT_ACTION_UPDATE_STATE( |
| 1786 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1945 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 1787 | 1946 |
| 1788 state.NotifyBeginMainFrameStarted(); | 1947 state.NotifyBeginMainFrameStarted(); |
| 1789 state.NotifyReadyToCommit(); | 1948 state.NotifyReadyToCommit(); |
| 1790 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 1949 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
| 1791 | 1950 |
| 1792 state.OnBeginImplFrameDeadlinePending(); | 1951 state.OnBeginImplFrameDeadlinePending(); |
| 1793 state.OnBeginImplFrameDeadline(); | 1952 state.OnBeginImplFrameDeadline(); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 1805 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 1964 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 1806 state.SetVisible(true); | 1965 state.SetVisible(true); |
| 1807 state.SetCanDraw(true); | 1966 state.SetCanDraw(true); |
| 1808 | 1967 |
| 1809 // Test requesting an animation after we have already animated during this | 1968 // Test requesting an animation after we have already animated during this |
| 1810 // frame. | 1969 // frame. |
| 1811 state.SetNeedsRedraw(true); | 1970 state.SetNeedsRedraw(true); |
| 1812 EXPECT_TRUE(state.BeginFrameNeeded()); | 1971 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 1813 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1972 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1814 | 1973 |
| 1815 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); | 1974 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 1816 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1975 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 1817 | 1976 |
| 1818 state.SetNeedsAnimate(); | 1977 state.SetNeedsAnimate(); |
| 1819 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1978 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1820 | 1979 |
| 1821 state.OnBeginImplFrameDeadline(); | 1980 state.OnBeginImplFrameDeadline(); |
| 1822 EXPECT_ACTION_UPDATE_STATE( | 1981 EXPECT_ACTION_UPDATE_STATE( |
| 1823 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1982 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 1824 } | 1983 } |
| 1825 | 1984 |
| 1826 TEST(SchedulerStateMachineTest, TestForwardBeginFramesToChildren) { | 1985 TEST(SchedulerStateMachineTest, TestForwardBeginFramesToChildren) { |
| 1827 SchedulerSettings settings; | 1986 SchedulerSettings settings; |
| 1828 settings.forward_begin_frames_to_children = true; | 1987 settings.forward_begin_frames_to_children = true; |
| 1829 StateMachine state(settings); | 1988 StateMachine state(settings); |
| 1830 state.SetCanStart(); | 1989 state.SetCanStart(); |
| 1831 state.UpdateState(state.NextAction()); | 1990 state.UpdateState(state.NextAction()); |
| 1832 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 1991 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 1833 state.SetVisible(true); | 1992 state.SetVisible(true); |
| 1834 state.SetCanDraw(true); | 1993 state.SetCanDraw(true); |
| 1835 | 1994 |
| 1836 EXPECT_FALSE(state.BeginFrameNeeded()); | 1995 EXPECT_FALSE(state.BeginFrameNeeded()); |
| 1837 state.SetChildrenNeedBeginFrames(true); | 1996 state.SetChildrenNeedBeginFrames(true); |
| 1838 EXPECT_TRUE(state.BeginFrameNeeded()); | 1997 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 1839 } | 1998 } |
| 1840 | 1999 |
| 1841 } // namespace | 2000 } // namespace |
| 1842 } // namespace cc | 2001 } // namespace cc |
| OLD | NEW |