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