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 "cc/scheduler/scheduler.h" | 7 #include "cc/scheduler/scheduler.h" |
| 8 #include "cc/test/begin_frame_args_test.h" |
8 #include "testing/gtest/include/gtest/gtest.h" | 9 #include "testing/gtest/include/gtest/gtest.h" |
9 | 10 |
10 #define EXPECT_ACTION_UPDATE_STATE(action) \ | 11 #define EXPECT_ACTION_UPDATE_STATE(action) \ |
11 EXPECT_EQ(action, state.NextAction()) << *state.AsValue(); \ | 12 EXPECT_EQ(action, state.NextAction()) << *state.AsValue(); \ |
12 if (action == SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE || \ | 13 if (action == SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE || \ |
13 action == SchedulerStateMachine::ACTION_DRAW_AND_SWAP_FORCED) { \ | 14 action == SchedulerStateMachine::ACTION_DRAW_AND_SWAP_FORCED) { \ |
14 EXPECT_EQ(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE, \ | 15 EXPECT_EQ(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE, \ |
15 state.begin_impl_frame_state()) \ | 16 state.begin_impl_frame_state()) \ |
16 << *state.AsValue(); \ | 17 << *state.AsValue(); \ |
17 } \ | 18 } \ |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
124 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION) | 125 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION) |
125 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 126 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
126 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE); | 127 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE); |
127 state.SetNeedsRedraw(false); | 128 state.SetNeedsRedraw(false); |
128 state.SetVisible(true); | 129 state.SetVisible(true); |
129 | 130 |
130 EXPECT_FALSE(state.BeginFrameNeeded()); | 131 EXPECT_FALSE(state.BeginFrameNeeded()); |
131 | 132 |
132 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 133 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
133 EXPECT_FALSE(state.BeginFrameNeeded()); | 134 EXPECT_FALSE(state.BeginFrameNeeded()); |
134 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 135 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); |
135 | 136 |
136 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 137 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
137 state.OnBeginImplFrameDeadline(); | 138 state.OnBeginImplFrameDeadline(); |
138 } | 139 } |
139 | 140 |
140 // If commit requested but can_start is still false, do nothing. | 141 // If commit requested but can_start is still false, do nothing. |
141 { | 142 { |
142 StateMachine state(default_scheduler_settings); | 143 StateMachine state(default_scheduler_settings); |
143 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE); | 144 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE); |
144 state.SetNeedsRedraw(false); | 145 state.SetNeedsRedraw(false); |
145 state.SetVisible(true); | 146 state.SetVisible(true); |
146 state.SetNeedsCommit(); | 147 state.SetNeedsCommit(); |
147 | 148 |
148 EXPECT_FALSE(state.BeginFrameNeeded()); | 149 EXPECT_FALSE(state.BeginFrameNeeded()); |
149 | 150 |
150 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 151 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
151 EXPECT_FALSE(state.BeginFrameNeeded()); | 152 EXPECT_FALSE(state.BeginFrameNeeded()); |
152 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 153 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); |
153 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 154 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
154 state.OnBeginImplFrameDeadline(); | 155 state.OnBeginImplFrameDeadline(); |
155 } | 156 } |
156 | 157 |
157 // If commit requested, begin a main frame. | 158 // If commit requested, begin a main frame. |
158 { | 159 { |
159 StateMachine state(default_scheduler_settings); | 160 StateMachine state(default_scheduler_settings); |
160 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE); | 161 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE); |
161 state.SetCanStart(); | 162 state.SetCanStart(); |
162 state.UpdateState(state.NextAction()); | 163 state.UpdateState(state.NextAction()); |
163 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 164 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
164 state.SetNeedsRedraw(false); | 165 state.SetNeedsRedraw(false); |
165 state.SetVisible(true); | 166 state.SetVisible(true); |
166 state.SetNeedsCommit(); | 167 state.SetNeedsCommit(); |
167 | 168 |
168 EXPECT_TRUE(state.BeginFrameNeeded()); | 169 EXPECT_TRUE(state.BeginFrameNeeded()); |
169 | 170 |
170 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 171 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); |
171 EXPECT_ACTION_UPDATE_STATE( | 172 EXPECT_ACTION_UPDATE_STATE( |
172 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 173 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
173 } | 174 } |
174 | 175 |
175 // Begin the frame, make sure needs_commit and commit_state update correctly. | 176 // Begin the frame, make sure needs_commit and commit_state update correctly. |
176 { | 177 { |
177 StateMachine state(default_scheduler_settings); | 178 StateMachine state(default_scheduler_settings); |
178 state.SetCanStart(); | 179 state.SetCanStart(); |
179 state.UpdateState(state.NextAction()); | 180 state.UpdateState(state.NextAction()); |
180 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 181 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
(...skipping 16 matching lines...) Expand all Loading... |
197 state.UpdateState(state.NextAction()); | 198 state.UpdateState(state.NextAction()); |
198 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 199 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
199 state.SetNeedsRedraw(false); | 200 state.SetNeedsRedraw(false); |
200 state.SetVisible(true); | 201 state.SetVisible(true); |
201 state.SetCanDraw(true); | 202 state.SetCanDraw(true); |
202 state.SetNeedsCommit(); | 203 state.SetNeedsCommit(); |
203 | 204 |
204 EXPECT_TRUE(state.BeginFrameNeeded()); | 205 EXPECT_TRUE(state.BeginFrameNeeded()); |
205 | 206 |
206 // Commit to the pending tree. | 207 // Commit to the pending tree. |
207 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 208 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); |
208 EXPECT_ACTION_UPDATE_STATE( | 209 EXPECT_ACTION_UPDATE_STATE( |
209 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 210 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
210 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 211 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
211 state.NotifyBeginMainFrameStarted(); | 212 state.NotifyBeginMainFrameStarted(); |
212 state.NotifyReadyToCommit(); | 213 state.NotifyReadyToCommit(); |
213 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 214 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
214 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 215 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
215 EXPECT_EQ(state.CommitState(), | 216 EXPECT_EQ(state.CommitState(), |
216 SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW); | 217 SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW); |
217 | 218 |
218 state.OnBeginImplFrameDeadline(); | 219 state.OnBeginImplFrameDeadline(); |
219 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 220 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
220 EXPECT_EQ(state.CommitState(), | 221 EXPECT_EQ(state.CommitState(), |
221 SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW); | 222 SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW); |
222 | 223 |
223 // Verify that the next commit doesn't start until the previous | 224 // Verify that the next commit doesn't start until the previous |
224 // commit has been drawn. | 225 // commit has been drawn. |
225 state.SetNeedsCommit(); | 226 state.SetNeedsCommit(); |
226 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 227 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); |
227 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 228 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
228 | 229 |
229 // Make sure that a draw of the active tree doesn't spuriously advance | 230 // Make sure that a draw of the active tree doesn't spuriously advance |
230 // the commit state and unblock the next commit. | 231 // the commit state and unblock the next commit. |
231 state.SetNeedsRedraw(true); | 232 state.SetNeedsRedraw(true); |
232 state.OnBeginImplFrameDeadline(); | 233 state.OnBeginImplFrameDeadline(); |
233 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 234 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
234 EXPECT_ACTION_UPDATE_STATE( | 235 EXPECT_ACTION_UPDATE_STATE( |
235 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 236 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
236 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 237 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
237 EXPECT_EQ(state.CommitState(), | 238 EXPECT_EQ(state.CommitState(), |
238 SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW); | 239 SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW); |
239 EXPECT_TRUE(state.has_pending_tree()); | 240 EXPECT_TRUE(state.has_pending_tree()); |
240 | 241 |
241 // Verify NotifyReadyToActivate unblocks activation, draw, and | 242 // Verify NotifyReadyToActivate unblocks activation, draw, and |
242 // commit in that order. | 243 // commit in that order. |
243 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 244 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); |
244 | 245 |
245 state.NotifyReadyToActivate(); | 246 state.NotifyReadyToActivate(); |
246 EXPECT_ACTION_UPDATE_STATE( | 247 EXPECT_ACTION_UPDATE_STATE( |
247 SchedulerStateMachine::ACTION_ACTIVATE_PENDING_TREE); | 248 SchedulerStateMachine::ACTION_ACTIVATE_PENDING_TREE); |
248 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 249 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
249 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 250 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
250 EXPECT_EQ(state.CommitState(), | 251 EXPECT_EQ(state.CommitState(), |
251 SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW); | 252 SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW); |
252 | 253 |
253 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineEarly()); | 254 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineEarly()); |
(...skipping 26 matching lines...) Expand all Loading... |
280 state.UpdateState(state.NextAction()); | 281 state.UpdateState(state.NextAction()); |
281 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 282 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
282 state.SetNeedsRedraw(false); | 283 state.SetNeedsRedraw(false); |
283 state.SetVisible(true); | 284 state.SetVisible(true); |
284 state.SetCanDraw(true); | 285 state.SetCanDraw(true); |
285 state.SetNeedsCommit(); | 286 state.SetNeedsCommit(); |
286 | 287 |
287 EXPECT_TRUE(state.BeginFrameNeeded()); | 288 EXPECT_TRUE(state.BeginFrameNeeded()); |
288 | 289 |
289 // Commit to the pending tree. | 290 // Commit to the pending tree. |
290 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 291 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); |
291 EXPECT_ACTION_UPDATE_STATE( | 292 EXPECT_ACTION_UPDATE_STATE( |
292 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 293 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
293 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 294 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
294 | 295 |
295 state.NotifyBeginMainFrameStarted(); | 296 state.NotifyBeginMainFrameStarted(); |
296 state.NotifyReadyToCommit(); | 297 state.NotifyReadyToCommit(); |
297 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 298 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
298 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 299 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
299 EXPECT_EQ(state.CommitState(), SchedulerStateMachine::COMMIT_STATE_IDLE); | 300 EXPECT_EQ(state.CommitState(), SchedulerStateMachine::COMMIT_STATE_IDLE); |
300 | 301 |
301 state.OnBeginImplFrameDeadline(); | 302 state.OnBeginImplFrameDeadline(); |
302 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 303 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
303 | 304 |
304 // Verify that the next commit starts while there is still a pending tree. | 305 // Verify that the next commit starts while there is still a pending tree. |
305 state.SetNeedsCommit(); | 306 state.SetNeedsCommit(); |
306 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 307 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); |
307 EXPECT_ACTION_UPDATE_STATE( | 308 EXPECT_ACTION_UPDATE_STATE( |
308 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 309 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
309 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 310 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
310 | 311 |
311 // Verify the pending commit doesn't overwrite the pending | 312 // Verify the pending commit doesn't overwrite the pending |
312 // tree until the pending tree has been activated. | 313 // tree until the pending tree has been activated. |
313 state.NotifyBeginMainFrameStarted(); | 314 state.NotifyBeginMainFrameStarted(); |
314 state.NotifyReadyToCommit(); | 315 state.NotifyReadyToCommit(); |
315 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 316 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
316 | 317 |
(...skipping 19 matching lines...) Expand all Loading... |
336 SchedulerSettings default_scheduler_settings; | 337 SchedulerSettings default_scheduler_settings; |
337 StateMachine state(default_scheduler_settings); | 338 StateMachine state(default_scheduler_settings); |
338 state.SetCanStart(); | 339 state.SetCanStart(); |
339 state.UpdateState(state.NextAction()); | 340 state.UpdateState(state.NextAction()); |
340 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 341 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
341 state.SetVisible(true); | 342 state.SetVisible(true); |
342 state.SetCanDraw(true); | 343 state.SetCanDraw(true); |
343 state.SetNeedsRedraw(true); | 344 state.SetNeedsRedraw(true); |
344 EXPECT_TRUE(state.RedrawPending()); | 345 EXPECT_TRUE(state.RedrawPending()); |
345 EXPECT_TRUE(state.BeginFrameNeeded()); | 346 EXPECT_TRUE(state.BeginFrameNeeded()); |
346 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 347 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); |
347 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 348 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
348 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 349 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
349 state.OnBeginImplFrameDeadline(); | 350 state.OnBeginImplFrameDeadline(); |
350 | 351 |
351 // We're drawing now. | 352 // We're drawing now. |
352 EXPECT_ACTION_UPDATE_STATE( | 353 EXPECT_ACTION_UPDATE_STATE( |
353 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 354 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
354 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 355 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
355 | 356 |
356 EXPECT_FALSE(state.RedrawPending()); | 357 EXPECT_FALSE(state.RedrawPending()); |
357 EXPECT_FALSE(state.CommitPending()); | 358 EXPECT_FALSE(state.CommitPending()); |
358 | 359 |
359 // Failing the draw makes us require a commit. | 360 // Failing the draw makes us require a commit. |
360 state.DidDrawIfPossibleCompleted( | 361 state.DidDrawIfPossibleCompleted( |
361 DrawSwapReadbackResult::DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); | 362 DrawSwapReadbackResult::DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); |
362 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 363 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); |
363 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 364 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
364 EXPECT_ACTION_UPDATE_STATE( | 365 EXPECT_ACTION_UPDATE_STATE( |
365 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 366 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
366 EXPECT_TRUE(state.RedrawPending()); | 367 EXPECT_TRUE(state.RedrawPending()); |
367 EXPECT_TRUE(state.CommitPending()); | 368 EXPECT_TRUE(state.CommitPending()); |
368 } | 369 } |
369 | 370 |
370 TEST(SchedulerStateMachineTest, TestFailedDrawForMissingHighResNeedsCommit) { | 371 TEST(SchedulerStateMachineTest, TestFailedDrawForMissingHighResNeedsCommit) { |
371 SchedulerSettings default_scheduler_settings; | 372 SchedulerSettings default_scheduler_settings; |
372 StateMachine state(default_scheduler_settings); | 373 StateMachine state(default_scheduler_settings); |
373 state.SetCanStart(); | 374 state.SetCanStart(); |
374 state.UpdateState(state.NextAction()); | 375 state.UpdateState(state.NextAction()); |
375 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 376 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
376 state.SetVisible(true); | 377 state.SetVisible(true); |
377 state.SetCanDraw(true); | 378 state.SetCanDraw(true); |
378 state.SetNeedsRedraw(true); | 379 state.SetNeedsRedraw(true); |
379 EXPECT_TRUE(state.RedrawPending()); | 380 EXPECT_TRUE(state.RedrawPending()); |
380 EXPECT_TRUE(state.BeginFrameNeeded()); | 381 EXPECT_TRUE(state.BeginFrameNeeded()); |
381 | 382 |
382 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 383 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); |
383 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 384 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
384 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 385 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
385 state.OnBeginImplFrameDeadline(); | 386 state.OnBeginImplFrameDeadline(); |
386 EXPECT_ACTION_UPDATE_STATE( | 387 EXPECT_ACTION_UPDATE_STATE( |
387 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 388 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
388 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 389 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
389 EXPECT_FALSE(state.RedrawPending()); | 390 EXPECT_FALSE(state.RedrawPending()); |
390 EXPECT_FALSE(state.CommitPending()); | 391 EXPECT_FALSE(state.CommitPending()); |
391 | 392 |
392 // Missing high res content requires a commit (but not a redraw) | 393 // Missing high res content requires a commit (but not a redraw) |
393 state.DidDrawIfPossibleCompleted( | 394 state.DidDrawIfPossibleCompleted( |
394 DrawSwapReadbackResult::DRAW_ABORTED_MISSING_HIGH_RES_CONTENT); | 395 DrawSwapReadbackResult::DRAW_ABORTED_MISSING_HIGH_RES_CONTENT); |
395 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 396 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); |
396 EXPECT_ACTION_UPDATE_STATE( | 397 EXPECT_ACTION_UPDATE_STATE( |
397 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 398 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
398 EXPECT_FALSE(state.RedrawPending()); | 399 EXPECT_FALSE(state.RedrawPending()); |
399 EXPECT_TRUE(state.CommitPending()); | 400 EXPECT_TRUE(state.CommitPending()); |
400 } | 401 } |
401 | 402 |
402 TEST(SchedulerStateMachineTest, | 403 TEST(SchedulerStateMachineTest, |
403 TestsetNeedsRedrawDuringFailedDrawDoesNotRemoveNeedsRedraw) { | 404 TestsetNeedsRedrawDuringFailedDrawDoesNotRemoveNeedsRedraw) { |
404 SchedulerSettings default_scheduler_settings; | 405 SchedulerSettings default_scheduler_settings; |
405 StateMachine state(default_scheduler_settings); | 406 StateMachine state(default_scheduler_settings); |
406 state.SetCanStart(); | 407 state.SetCanStart(); |
407 state.UpdateState(state.NextAction()); | 408 state.UpdateState(state.NextAction()); |
408 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 409 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
409 | 410 |
410 state.SetVisible(true); | 411 state.SetVisible(true); |
411 state.SetCanDraw(true); | 412 state.SetCanDraw(true); |
412 state.SetNeedsRedraw(true); | 413 state.SetNeedsRedraw(true); |
413 EXPECT_TRUE(state.RedrawPending()); | 414 EXPECT_TRUE(state.RedrawPending()); |
414 EXPECT_TRUE(state.BeginFrameNeeded()); | 415 EXPECT_TRUE(state.BeginFrameNeeded()); |
415 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 416 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); |
416 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 417 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
417 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 418 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
418 state.OnBeginImplFrameDeadline(); | 419 state.OnBeginImplFrameDeadline(); |
419 | 420 |
420 // We're drawing now. | 421 // We're drawing now. |
421 EXPECT_ACTION_UPDATE_STATE( | 422 EXPECT_ACTION_UPDATE_STATE( |
422 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 423 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
423 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 424 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
424 EXPECT_FALSE(state.RedrawPending()); | 425 EXPECT_FALSE(state.RedrawPending()); |
425 EXPECT_FALSE(state.CommitPending()); | 426 EXPECT_FALSE(state.CommitPending()); |
426 | 427 |
427 // While still in the same BeginMainFrame callback on the main thread, | 428 // While still in the same BeginMainFrame callback on the main thread, |
428 // set needs redraw again. This should not redraw. | 429 // set needs redraw again. This should not redraw. |
429 state.SetNeedsRedraw(true); | 430 state.SetNeedsRedraw(true); |
430 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 431 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
431 | 432 |
432 // Failing the draw for animation checkerboards makes us require a commit. | 433 // Failing the draw for animation checkerboards makes us require a commit. |
433 state.DidDrawIfPossibleCompleted( | 434 state.DidDrawIfPossibleCompleted( |
434 DrawSwapReadbackResult::DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); | 435 DrawSwapReadbackResult::DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); |
435 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 436 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); |
436 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 437 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
437 EXPECT_ACTION_UPDATE_STATE( | 438 EXPECT_ACTION_UPDATE_STATE( |
438 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 439 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
439 EXPECT_TRUE(state.RedrawPending()); | 440 EXPECT_TRUE(state.RedrawPending()); |
440 } | 441 } |
441 | 442 |
442 void TestFailedDrawsEventuallyForceDrawAfterNextCommit( | 443 void TestFailedDrawsEventuallyForceDrawAfterNextCommit( |
443 bool main_frame_before_draw_enabled) { | 444 bool main_frame_before_draw_enabled) { |
444 SchedulerSettings scheduler_settings; | 445 SchedulerSettings scheduler_settings; |
445 scheduler_settings.main_frame_before_draw_enabled = | 446 scheduler_settings.main_frame_before_draw_enabled = |
446 main_frame_before_draw_enabled; | 447 main_frame_before_draw_enabled; |
447 scheduler_settings.maximum_number_of_failed_draws_before_draw_is_forced_ = 1; | 448 scheduler_settings.maximum_number_of_failed_draws_before_draw_is_forced_ = 1; |
448 StateMachine state(scheduler_settings); | 449 StateMachine state(scheduler_settings); |
449 state.SetCanStart(); | 450 state.SetCanStart(); |
450 state.UpdateState(state.NextAction()); | 451 state.UpdateState(state.NextAction()); |
451 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 452 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
452 state.SetVisible(true); | 453 state.SetVisible(true); |
453 state.SetCanDraw(true); | 454 state.SetCanDraw(true); |
454 | 455 |
455 // Start a commit. | 456 // Start a commit. |
456 state.SetNeedsCommit(); | 457 state.SetNeedsCommit(); |
457 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 458 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
458 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 459 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); |
459 EXPECT_ACTION_UPDATE_STATE( | 460 EXPECT_ACTION_UPDATE_STATE( |
460 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 461 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
461 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 462 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
462 EXPECT_TRUE(state.CommitPending()); | 463 EXPECT_TRUE(state.CommitPending()); |
463 | 464 |
464 // Then initiate a draw. | 465 // Then initiate a draw. |
465 state.SetNeedsRedraw(true); | 466 state.SetNeedsRedraw(true); |
466 state.OnBeginImplFrameDeadline(); | 467 state.OnBeginImplFrameDeadline(); |
467 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 468 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
468 EXPECT_ACTION_UPDATE_STATE( | 469 EXPECT_ACTION_UPDATE_STATE( |
(...skipping 10 matching lines...) Expand all Loading... |
479 | 480 |
480 // Finish the commit. Note, we should not yet be forcing a draw, but should | 481 // Finish the commit. Note, we should not yet be forcing a draw, but should |
481 // continue the commit as usual. | 482 // continue the commit as usual. |
482 state.NotifyBeginMainFrameStarted(); | 483 state.NotifyBeginMainFrameStarted(); |
483 state.NotifyReadyToCommit(); | 484 state.NotifyReadyToCommit(); |
484 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 485 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
485 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 486 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
486 EXPECT_TRUE(state.RedrawPending()); | 487 EXPECT_TRUE(state.RedrawPending()); |
487 | 488 |
488 // The redraw should be forced at the end of the next BeginImplFrame. | 489 // The redraw should be forced at the end of the next BeginImplFrame. |
489 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 490 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); |
490 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 491 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
491 if (main_frame_before_draw_enabled) { | 492 if (main_frame_before_draw_enabled) { |
492 EXPECT_ACTION_UPDATE_STATE( | 493 EXPECT_ACTION_UPDATE_STATE( |
493 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 494 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
494 } | 495 } |
495 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 496 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
496 state.OnBeginImplFrameDeadline(); | 497 state.OnBeginImplFrameDeadline(); |
497 EXPECT_ACTION_UPDATE_STATE( | 498 EXPECT_ACTION_UPDATE_STATE( |
498 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_FORCED); | 499 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_FORCED); |
499 } | 500 } |
(...skipping 21 matching lines...) Expand all Loading... |
521 StateMachine state(scheduler_settings); | 522 StateMachine state(scheduler_settings); |
522 state.SetCanStart(); | 523 state.SetCanStart(); |
523 state.UpdateState(state.NextAction()); | 524 state.UpdateState(state.NextAction()); |
524 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 525 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
525 state.SetVisible(true); | 526 state.SetVisible(true); |
526 state.SetCanDraw(true); | 527 state.SetCanDraw(true); |
527 | 528 |
528 // Start a commit. | 529 // Start a commit. |
529 state.SetNeedsCommit(); | 530 state.SetNeedsCommit(); |
530 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 531 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
531 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 532 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); |
532 EXPECT_ACTION_UPDATE_STATE( | 533 EXPECT_ACTION_UPDATE_STATE( |
533 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 534 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
534 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 535 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
535 EXPECT_TRUE(state.CommitPending()); | 536 EXPECT_TRUE(state.CommitPending()); |
536 | 537 |
537 // Then initiate a draw. | 538 // Then initiate a draw. |
538 state.SetNeedsRedraw(true); | 539 state.SetNeedsRedraw(true); |
539 state.OnBeginImplFrameDeadline(); | 540 state.OnBeginImplFrameDeadline(); |
540 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 541 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
541 EXPECT_ACTION_UPDATE_STATE( | 542 EXPECT_ACTION_UPDATE_STATE( |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
582 StateMachine state(default_scheduler_settings); | 583 StateMachine state(default_scheduler_settings); |
583 state.SetCanStart(); | 584 state.SetCanStart(); |
584 state.UpdateState(state.NextAction()); | 585 state.UpdateState(state.NextAction()); |
585 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 586 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
586 state.SetVisible(true); | 587 state.SetVisible(true); |
587 state.SetCanDraw(true); | 588 state.SetCanDraw(true); |
588 | 589 |
589 // Start a draw. | 590 // Start a draw. |
590 state.SetNeedsRedraw(true); | 591 state.SetNeedsRedraw(true); |
591 EXPECT_TRUE(state.BeginFrameNeeded()); | 592 EXPECT_TRUE(state.BeginFrameNeeded()); |
592 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 593 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); |
593 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 594 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
594 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 595 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
595 state.OnBeginImplFrameDeadline(); | 596 state.OnBeginImplFrameDeadline(); |
596 EXPECT_TRUE(state.RedrawPending()); | 597 EXPECT_TRUE(state.RedrawPending()); |
597 EXPECT_ACTION_UPDATE_STATE( | 598 EXPECT_ACTION_UPDATE_STATE( |
598 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 599 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
599 | 600 |
600 // Failing the draw for animation checkerboards makes us require a commit. | 601 // Failing the draw for animation checkerboards makes us require a commit. |
601 state.DidDrawIfPossibleCompleted( | 602 state.DidDrawIfPossibleCompleted( |
602 DrawSwapReadbackResult::DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); | 603 DrawSwapReadbackResult::DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); |
603 EXPECT_ACTION_UPDATE_STATE( | 604 EXPECT_ACTION_UPDATE_STATE( |
604 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 605 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
605 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 606 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
606 EXPECT_TRUE(state.RedrawPending()); | 607 EXPECT_TRUE(state.RedrawPending()); |
607 | 608 |
608 // We should not be trying to draw again now, but we have a commit pending. | 609 // We should not be trying to draw again now, but we have a commit pending. |
609 EXPECT_TRUE(state.BeginFrameNeeded()); | 610 EXPECT_TRUE(state.BeginFrameNeeded()); |
610 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 611 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); |
611 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 612 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
612 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 613 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
613 | 614 |
614 // We should try to draw again at the end of the next BeginImplFrame on | 615 // We should try to draw again at the end of the next BeginImplFrame on |
615 // the impl thread. | 616 // the impl thread. |
616 state.OnBeginImplFrameDeadline(); | 617 state.OnBeginImplFrameDeadline(); |
617 EXPECT_ACTION_UPDATE_STATE( | 618 EXPECT_ACTION_UPDATE_STATE( |
618 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 619 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
619 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 620 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
620 } | 621 } |
621 | 622 |
622 TEST(SchedulerStateMachineTest, TestDoestDrawTwiceInSameFrame) { | 623 TEST(SchedulerStateMachineTest, TestDoestDrawTwiceInSameFrame) { |
623 SchedulerSettings default_scheduler_settings; | 624 SchedulerSettings default_scheduler_settings; |
624 StateMachine state(default_scheduler_settings); | 625 StateMachine state(default_scheduler_settings); |
625 state.SetCanStart(); | 626 state.SetCanStart(); |
626 state.UpdateState(state.NextAction()); | 627 state.UpdateState(state.NextAction()); |
627 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 628 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
628 state.SetVisible(true); | 629 state.SetVisible(true); |
629 state.SetCanDraw(true); | 630 state.SetCanDraw(true); |
630 state.SetNeedsRedraw(true); | 631 state.SetNeedsRedraw(true); |
631 | 632 |
632 // Draw the first frame. | 633 // Draw the first frame. |
633 EXPECT_TRUE(state.BeginFrameNeeded()); | 634 EXPECT_TRUE(state.BeginFrameNeeded()); |
634 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 635 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); |
635 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 636 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
636 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 637 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
637 | 638 |
638 state.OnBeginImplFrameDeadline(); | 639 state.OnBeginImplFrameDeadline(); |
639 EXPECT_ACTION_UPDATE_STATE( | 640 EXPECT_ACTION_UPDATE_STATE( |
640 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 641 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
641 state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DRAW_SUCCESS); | 642 state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DRAW_SUCCESS); |
642 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 643 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
643 | 644 |
644 // Before the next BeginImplFrame, set needs redraw again. | 645 // Before the next BeginImplFrame, set needs redraw again. |
645 // This should not redraw until the next BeginImplFrame. | 646 // This should not redraw until the next BeginImplFrame. |
646 state.SetNeedsRedraw(true); | 647 state.SetNeedsRedraw(true); |
647 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 648 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
648 | 649 |
649 // Move to another frame. This should now draw. | 650 // Move to another frame. This should now draw. |
650 EXPECT_TRUE(state.BeginFrameNeeded()); | 651 EXPECT_TRUE(state.BeginFrameNeeded()); |
651 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 652 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); |
652 | 653 |
653 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 654 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
654 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 655 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
655 | 656 |
656 state.OnBeginImplFrameDeadline(); | 657 state.OnBeginImplFrameDeadline(); |
657 EXPECT_ACTION_UPDATE_STATE( | 658 EXPECT_ACTION_UPDATE_STATE( |
658 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 659 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
659 state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DRAW_SUCCESS); | 660 state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DRAW_SUCCESS); |
660 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 661 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
661 | 662 |
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
790 // There shouldn't be any drawing regardless of BeginImplFrame. | 791 // There shouldn't be any drawing regardless of BeginImplFrame. |
791 for (size_t j = 0; j < 2; ++j) { | 792 for (size_t j = 0; j < 2; ++j) { |
792 StateMachine state(default_scheduler_settings); | 793 StateMachine state(default_scheduler_settings); |
793 state.SetCanStart(); | 794 state.SetCanStart(); |
794 state.UpdateState(state.NextAction()); | 795 state.UpdateState(state.NextAction()); |
795 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 796 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
796 state.SetCommitState(all_commit_states[i]); | 797 state.SetCommitState(all_commit_states[i]); |
797 state.SetVisible(false); | 798 state.SetVisible(false); |
798 state.SetNeedsRedraw(true); | 799 state.SetNeedsRedraw(true); |
799 if (j == 1) | 800 if (j == 1) |
800 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 801 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); |
801 | 802 |
802 state.SetCanDraw(false); | 803 state.SetCanDraw(false); |
803 EXPECT_NE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE, | 804 EXPECT_NE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE, |
804 state.NextAction()); | 805 state.NextAction()); |
805 } | 806 } |
806 } | 807 } |
807 } | 808 } |
808 | 809 |
809 TEST(SchedulerStateMachineTest, | 810 TEST(SchedulerStateMachineTest, |
810 TestCanRedrawWithWaitingForFirstDrawMakesProgress) { | 811 TestCanRedrawWithWaitingForFirstDrawMakesProgress) { |
811 SchedulerSettings default_scheduler_settings; | 812 SchedulerSettings default_scheduler_settings; |
812 StateMachine state(default_scheduler_settings); | 813 StateMachine state(default_scheduler_settings); |
813 state.SetCanStart(); | 814 state.SetCanStart(); |
814 state.UpdateState(state.NextAction()); | 815 state.UpdateState(state.NextAction()); |
815 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 816 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
816 | 817 |
817 state.SetActiveTreeNeedsFirstDraw(true); | 818 state.SetActiveTreeNeedsFirstDraw(true); |
818 state.SetNeedsCommit(); | 819 state.SetNeedsCommit(); |
819 state.SetNeedsRedraw(true); | 820 state.SetNeedsRedraw(true); |
820 state.SetVisible(true); | 821 state.SetVisible(true); |
821 state.SetCanDraw(false); | 822 state.SetCanDraw(false); |
822 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 823 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); |
823 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT); | 824 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT); |
824 EXPECT_ACTION_UPDATE_STATE( | 825 EXPECT_ACTION_UPDATE_STATE( |
825 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 826 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
826 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 827 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
827 state.NotifyBeginMainFrameStarted(); | 828 state.NotifyBeginMainFrameStarted(); |
828 state.NotifyReadyToCommit(); | 829 state.NotifyReadyToCommit(); |
829 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 830 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
830 state.OnBeginImplFrameDeadline(); | 831 state.OnBeginImplFrameDeadline(); |
831 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT); | 832 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT); |
832 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 833 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
833 } | 834 } |
834 | 835 |
835 void TestSetNeedsCommitIsNotLost(bool main_frame_before_draw_enabled) { | 836 void TestSetNeedsCommitIsNotLost(bool main_frame_before_draw_enabled) { |
836 SchedulerSettings scheduler_settings; | 837 SchedulerSettings scheduler_settings; |
837 scheduler_settings.main_frame_before_draw_enabled = | 838 scheduler_settings.main_frame_before_draw_enabled = |
838 main_frame_before_draw_enabled; | 839 main_frame_before_draw_enabled; |
839 StateMachine state(scheduler_settings); | 840 StateMachine state(scheduler_settings); |
840 state.SetCanStart(); | 841 state.SetCanStart(); |
841 state.UpdateState(state.NextAction()); | 842 state.UpdateState(state.NextAction()); |
842 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 843 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
843 state.SetNeedsCommit(); | 844 state.SetNeedsCommit(); |
844 state.SetVisible(true); | 845 state.SetVisible(true); |
845 state.SetCanDraw(true); | 846 state.SetCanDraw(true); |
846 | 847 |
847 EXPECT_TRUE(state.BeginFrameNeeded()); | 848 EXPECT_TRUE(state.BeginFrameNeeded()); |
848 | 849 |
849 // Begin the frame. | 850 // Begin the frame. |
850 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 851 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); |
851 EXPECT_ACTION_UPDATE_STATE( | 852 EXPECT_ACTION_UPDATE_STATE( |
852 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 853 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
853 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT, | 854 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT, |
854 state.CommitState()); | 855 state.CommitState()); |
855 | 856 |
856 // Now, while the frame is in progress, set another commit. | 857 // Now, while the frame is in progress, set another commit. |
857 state.SetNeedsCommit(); | 858 state.SetNeedsCommit(); |
858 EXPECT_TRUE(state.NeedsCommit()); | 859 EXPECT_TRUE(state.NeedsCommit()); |
859 | 860 |
860 // Let the frame finish. | 861 // Let the frame finish. |
(...skipping 15 matching lines...) Expand all Loading... |
876 state.OnBeginImplFrameDeadline(); | 877 state.OnBeginImplFrameDeadline(); |
877 EXPECT_EQ(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE, | 878 EXPECT_EQ(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE, |
878 state.begin_impl_frame_state()); | 879 state.begin_impl_frame_state()); |
879 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction()); | 880 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction()); |
880 | 881 |
881 state.OnBeginImplFrameIdle(); | 882 state.OnBeginImplFrameIdle(); |
882 EXPECT_EQ(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE, | 883 EXPECT_EQ(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE, |
883 state.begin_impl_frame_state()); | 884 state.begin_impl_frame_state()); |
884 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction()); | 885 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction()); |
885 | 886 |
886 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 887 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); |
887 EXPECT_EQ(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING, | 888 EXPECT_EQ(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING, |
888 state.begin_impl_frame_state()); | 889 state.begin_impl_frame_state()); |
889 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction()); | 890 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction()); |
890 | 891 |
891 // Finish the commit, then make sure we start the next commit immediately | 892 // Finish the commit, then make sure we start the next commit immediately |
892 // and draw on the next BeginImplFrame. | 893 // and draw on the next BeginImplFrame. |
893 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 894 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
894 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 895 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
895 if (main_frame_before_draw_enabled) { | 896 if (main_frame_before_draw_enabled) { |
896 EXPECT_ACTION_UPDATE_STATE( | 897 EXPECT_ACTION_UPDATE_STATE( |
(...skipping 30 matching lines...) Expand all Loading... |
927 state.SetCanStart(); | 928 state.SetCanStart(); |
928 state.UpdateState(state.NextAction()); | 929 state.UpdateState(state.NextAction()); |
929 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 930 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
930 state.SetVisible(true); | 931 state.SetVisible(true); |
931 state.SetCanDraw(true); | 932 state.SetCanDraw(true); |
932 | 933 |
933 // Start clean and set commit. | 934 // Start clean and set commit. |
934 state.SetNeedsCommit(); | 935 state.SetNeedsCommit(); |
935 | 936 |
936 // Begin the frame. | 937 // Begin the frame. |
937 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 938 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); |
938 EXPECT_ACTION_UPDATE_STATE( | 939 EXPECT_ACTION_UPDATE_STATE( |
939 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 940 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
940 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT, | 941 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT, |
941 state.CommitState()); | 942 state.CommitState()); |
942 EXPECT_FALSE(state.NeedsCommit()); | 943 EXPECT_FALSE(state.NeedsCommit()); |
943 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 944 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
944 | 945 |
945 // Tell the scheduler the frame finished. | 946 // Tell the scheduler the frame finished. |
946 state.NotifyBeginMainFrameStarted(); | 947 state.NotifyBeginMainFrameStarted(); |
947 state.NotifyReadyToCommit(); | 948 state.NotifyReadyToCommit(); |
(...skipping 27 matching lines...) Expand all Loading... |
975 state.SetCanStart(); | 976 state.SetCanStart(); |
976 state.UpdateState(state.NextAction()); | 977 state.UpdateState(state.NextAction()); |
977 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 978 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
978 state.SetVisible(true); | 979 state.SetVisible(true); |
979 state.SetCanDraw(true); | 980 state.SetCanDraw(true); |
980 | 981 |
981 // Start clean and set commit. | 982 // Start clean and set commit. |
982 state.SetNeedsCommit(); | 983 state.SetNeedsCommit(); |
983 | 984 |
984 // Begin the frame. | 985 // Begin the frame. |
985 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 986 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); |
986 EXPECT_ACTION_UPDATE_STATE( | 987 EXPECT_ACTION_UPDATE_STATE( |
987 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 988 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
988 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT, | 989 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT, |
989 state.CommitState()); | 990 state.CommitState()); |
990 EXPECT_FALSE(state.NeedsCommit()); | 991 EXPECT_FALSE(state.NeedsCommit()); |
991 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 992 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
992 | 993 |
993 // Request another commit while the commit is in flight. | 994 // Request another commit while the commit is in flight. |
994 state.SetNeedsCommit(); | 995 state.SetNeedsCommit(); |
995 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 996 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
(...skipping 18 matching lines...) Expand all Loading... |
1014 EXPECT_ACTION_UPDATE_STATE( | 1015 EXPECT_ACTION_UPDATE_STATE( |
1015 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1016 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
1016 state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DRAW_SUCCESS); | 1017 state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DRAW_SUCCESS); |
1017 | 1018 |
1018 // Should be synchronized, no draw needed, no action needed. | 1019 // Should be synchronized, no draw needed, no action needed. |
1019 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1020 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1020 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); | 1021 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); |
1021 EXPECT_FALSE(state.needs_redraw()); | 1022 EXPECT_FALSE(state.needs_redraw()); |
1022 | 1023 |
1023 // Next BeginImplFrame should initiate second commit. | 1024 // Next BeginImplFrame should initiate second commit. |
1024 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 1025 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); |
1025 EXPECT_ACTION_UPDATE_STATE( | 1026 EXPECT_ACTION_UPDATE_STATE( |
1026 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1027 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
1027 } | 1028 } |
1028 | 1029 |
1029 TEST(SchedulerStateMachineTest, TestRequestCommitInvisible) { | 1030 TEST(SchedulerStateMachineTest, TestRequestCommitInvisible) { |
1030 SchedulerSettings default_scheduler_settings; | 1031 SchedulerSettings default_scheduler_settings; |
1031 StateMachine state(default_scheduler_settings); | 1032 StateMachine state(default_scheduler_settings); |
1032 state.SetCanStart(); | 1033 state.SetCanStart(); |
1033 state.UpdateState(state.NextAction()); | 1034 state.UpdateState(state.NextAction()); |
1034 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 1035 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
1035 state.SetNeedsCommit(); | 1036 state.SetNeedsCommit(); |
1036 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1037 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1037 } | 1038 } |
1038 | 1039 |
1039 TEST(SchedulerStateMachineTest, TestGoesInvisibleBeforeFinishCommit) { | 1040 TEST(SchedulerStateMachineTest, TestGoesInvisibleBeforeFinishCommit) { |
1040 SchedulerSettings default_scheduler_settings; | 1041 SchedulerSettings default_scheduler_settings; |
1041 StateMachine state(default_scheduler_settings); | 1042 StateMachine state(default_scheduler_settings); |
1042 state.SetCanStart(); | 1043 state.SetCanStart(); |
1043 state.UpdateState(state.NextAction()); | 1044 state.UpdateState(state.NextAction()); |
1044 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 1045 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
1045 state.SetVisible(true); | 1046 state.SetVisible(true); |
1046 state.SetCanDraw(true); | 1047 state.SetCanDraw(true); |
1047 | 1048 |
1048 // Start clean and set commit. | 1049 // Start clean and set commit. |
1049 state.SetNeedsCommit(); | 1050 state.SetNeedsCommit(); |
1050 | 1051 |
1051 // Begin the frame while visible. | 1052 // Begin the frame while visible. |
1052 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 1053 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); |
1053 EXPECT_ACTION_UPDATE_STATE( | 1054 EXPECT_ACTION_UPDATE_STATE( |
1054 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1055 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
1055 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT, | 1056 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT, |
1056 state.CommitState()); | 1057 state.CommitState()); |
1057 EXPECT_FALSE(state.NeedsCommit()); | 1058 EXPECT_FALSE(state.NeedsCommit()); |
1058 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1059 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1059 | 1060 |
1060 // Become invisible and abort BeginMainFrame. | 1061 // Become invisible and abort BeginMainFrame. |
1061 state.SetVisible(false); | 1062 state.SetVisible(false); |
1062 state.BeginMainFrameAborted(false); | 1063 state.BeginMainFrameAborted(false); |
1063 | 1064 |
1064 // We should now be back in the idle state as if we never started the frame. | 1065 // We should now be back in the idle state as if we never started the frame. |
1065 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); | 1066 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); |
1066 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1067 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1067 | 1068 |
1068 // We shouldn't do anything on the BeginImplFrame deadline. | 1069 // We shouldn't do anything on the BeginImplFrame deadline. |
1069 state.OnBeginImplFrameDeadline(); | 1070 state.OnBeginImplFrameDeadline(); |
1070 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1071 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1071 | 1072 |
1072 // Become visible again. | 1073 // Become visible again. |
1073 state.SetVisible(true); | 1074 state.SetVisible(true); |
1074 | 1075 |
1075 // Although we have aborted on this frame and haven't cancelled the commit | 1076 // Although we have aborted on this frame and haven't cancelled the commit |
1076 // (i.e. need another), don't send another BeginMainFrame yet. | 1077 // (i.e. need another), don't send another BeginMainFrame yet. |
1077 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); | 1078 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); |
1078 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); | 1079 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); |
1079 EXPECT_TRUE(state.NeedsCommit()); | 1080 EXPECT_TRUE(state.NeedsCommit()); |
1080 | 1081 |
1081 // Start a new frame. | 1082 // Start a new frame. |
1082 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 1083 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); |
1083 EXPECT_ACTION_UPDATE_STATE( | 1084 EXPECT_ACTION_UPDATE_STATE( |
1084 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1085 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
1085 | 1086 |
1086 // We should be starting the commit now. | 1087 // We should be starting the commit now. |
1087 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT, | 1088 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT, |
1088 state.CommitState()); | 1089 state.CommitState()); |
1089 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1090 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1090 } | 1091 } |
1091 | 1092 |
1092 TEST(SchedulerStateMachineTest, AbortBeginMainFrameAndCancelCommit) { | 1093 TEST(SchedulerStateMachineTest, AbortBeginMainFrameAndCancelCommit) { |
(...skipping 18 matching lines...) Expand all Loading... |
1111 // Abort the commit, cancelling future commits. | 1112 // Abort the commit, cancelling future commits. |
1112 state.BeginMainFrameAborted(true); | 1113 state.BeginMainFrameAborted(true); |
1113 | 1114 |
1114 // Verify that another commit doesn't start on the same frame. | 1115 // Verify that another commit doesn't start on the same frame. |
1115 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); | 1116 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); |
1116 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); | 1117 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); |
1117 EXPECT_FALSE(state.NeedsCommit()); | 1118 EXPECT_FALSE(state.NeedsCommit()); |
1118 | 1119 |
1119 // Start a new frame; draw because this is the first frame since output | 1120 // Start a new frame; draw because this is the first frame since output |
1120 // surface init'd. | 1121 // surface init'd. |
1121 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 1122 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); |
1122 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1123 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
1123 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1124 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1124 state.OnBeginImplFrameDeadline(); | 1125 state.OnBeginImplFrameDeadline(); |
1125 EXPECT_ACTION_UPDATE_STATE( | 1126 EXPECT_ACTION_UPDATE_STATE( |
1126 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1127 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
1127 | 1128 |
1128 // Verify another commit doesn't start on another frame either. | 1129 // Verify another commit doesn't start on another frame either. |
1129 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); | 1130 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); |
1130 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); | 1131 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); |
1131 EXPECT_FALSE(state.NeedsCommit()); | 1132 EXPECT_FALSE(state.NeedsCommit()); |
(...skipping 11 matching lines...) Expand all Loading... |
1143 state.SetCanStart(); | 1144 state.SetCanStart(); |
1144 state.SetVisible(true); | 1145 state.SetVisible(true); |
1145 state.SetCanDraw(true); | 1146 state.SetCanDraw(true); |
1146 | 1147 |
1147 EXPECT_ACTION_UPDATE_STATE( | 1148 EXPECT_ACTION_UPDATE_STATE( |
1148 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); | 1149 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); |
1149 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 1150 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
1150 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1151 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1151 | 1152 |
1152 // Check that the first init does not SetNeedsCommit. | 1153 // Check that the first init does not SetNeedsCommit. |
1153 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 1154 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); |
1154 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1155 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1155 state.OnBeginImplFrameDeadline(); | 1156 state.OnBeginImplFrameDeadline(); |
1156 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1157 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1157 | 1158 |
1158 // Check that a needs commit initiates a BeginMainFrame. | 1159 // Check that a needs commit initiates a BeginMainFrame. |
1159 state.SetNeedsCommit(); | 1160 state.SetNeedsCommit(); |
1160 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 1161 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); |
1161 EXPECT_ACTION_UPDATE_STATE( | 1162 EXPECT_ACTION_UPDATE_STATE( |
1162 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1163 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
1163 } | 1164 } |
1164 | 1165 |
1165 TEST(SchedulerStateMachineTest, TestContextLostWhenCompletelyIdle) { | 1166 TEST(SchedulerStateMachineTest, TestContextLostWhenCompletelyIdle) { |
1166 SchedulerSettings default_scheduler_settings; | 1167 SchedulerSettings default_scheduler_settings; |
1167 StateMachine state(default_scheduler_settings); | 1168 StateMachine state(default_scheduler_settings); |
1168 state.SetCanStart(); | 1169 state.SetCanStart(); |
1169 state.UpdateState(state.NextAction()); | 1170 state.UpdateState(state.NextAction()); |
1170 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 1171 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
1171 | 1172 |
1172 state.SetVisible(true); | 1173 state.SetVisible(true); |
1173 state.SetCanDraw(true); | 1174 state.SetCanDraw(true); |
1174 | 1175 |
1175 EXPECT_NE(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION, | 1176 EXPECT_NE(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION, |
1176 state.NextAction()); | 1177 state.NextAction()); |
1177 state.DidLoseOutputSurface(); | 1178 state.DidLoseOutputSurface(); |
1178 | 1179 |
1179 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION, | 1180 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION, |
1180 state.NextAction()); | 1181 state.NextAction()); |
1181 state.UpdateState(state.NextAction()); | 1182 state.UpdateState(state.NextAction()); |
1182 | 1183 |
1183 // Once context recreation begins, nothing should happen. | 1184 // Once context recreation begins, nothing should happen. |
1184 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1185 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1185 | 1186 |
1186 // Recreate the context. | 1187 // Recreate the context. |
1187 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 1188 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
1188 | 1189 |
1189 // When the context is recreated, we should begin a commit. | 1190 // When the context is recreated, we should begin a commit. |
1190 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 1191 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); |
1191 EXPECT_ACTION_UPDATE_STATE( | 1192 EXPECT_ACTION_UPDATE_STATE( |
1192 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1193 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
1193 } | 1194 } |
1194 | 1195 |
1195 TEST(SchedulerStateMachineTest, | 1196 TEST(SchedulerStateMachineTest, |
1196 TestContextLostWhenIdleAndCommitRequestedWhileRecreating) { | 1197 TestContextLostWhenIdleAndCommitRequestedWhileRecreating) { |
1197 SchedulerSettings default_scheduler_settings; | 1198 SchedulerSettings default_scheduler_settings; |
1198 StateMachine state(default_scheduler_settings); | 1199 StateMachine state(default_scheduler_settings); |
1199 state.SetCanStart(); | 1200 state.SetCanStart(); |
1200 state.UpdateState(state.NextAction()); | 1201 state.UpdateState(state.NextAction()); |
1201 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 1202 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
1202 state.SetVisible(true); | 1203 state.SetVisible(true); |
1203 state.SetCanDraw(true); | 1204 state.SetCanDraw(true); |
1204 | 1205 |
1205 EXPECT_NE(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION, | 1206 EXPECT_NE(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION, |
1206 state.NextAction()); | 1207 state.NextAction()); |
1207 state.DidLoseOutputSurface(); | 1208 state.DidLoseOutputSurface(); |
1208 | 1209 |
1209 EXPECT_ACTION_UPDATE_STATE( | 1210 EXPECT_ACTION_UPDATE_STATE( |
1210 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); | 1211 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); |
1211 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1212 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1212 | 1213 |
1213 // Once context recreation begins, nothing should happen. | 1214 // Once context recreation begins, nothing should happen. |
1214 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 1215 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); |
1215 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1216 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1216 state.OnBeginImplFrameDeadline(); | 1217 state.OnBeginImplFrameDeadline(); |
1217 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1218 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1218 | 1219 |
1219 // While context is recreating, commits shouldn't begin. | 1220 // While context is recreating, commits shouldn't begin. |
1220 state.SetNeedsCommit(); | 1221 state.SetNeedsCommit(); |
1221 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 1222 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); |
1222 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1223 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1223 state.OnBeginImplFrameDeadline(); | 1224 state.OnBeginImplFrameDeadline(); |
1224 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1225 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1225 | 1226 |
1226 // Recreate the context | 1227 // Recreate the context |
1227 state.DidCreateAndInitializeOutputSurface(); | 1228 state.DidCreateAndInitializeOutputSurface(); |
1228 EXPECT_FALSE(state.RedrawPending()); | 1229 EXPECT_FALSE(state.RedrawPending()); |
1229 | 1230 |
1230 // When the context is recreated, we should begin a commit | 1231 // When the context is recreated, we should begin a commit |
1231 EXPECT_ACTION_UPDATE_STATE( | 1232 EXPECT_ACTION_UPDATE_STATE( |
1232 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1233 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
1233 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1234 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1234 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT, | 1235 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT, |
1235 state.CommitState()); | 1236 state.CommitState()); |
1236 | 1237 |
1237 state.NotifyBeginMainFrameStarted(); | 1238 state.NotifyBeginMainFrameStarted(); |
1238 state.NotifyReadyToCommit(); | 1239 state.NotifyReadyToCommit(); |
1239 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 1240 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
1240 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1241 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1241 // Finishing the first commit after initializing an output surface should | 1242 // Finishing the first commit after initializing an output surface should |
1242 // automatically cause a redraw. | 1243 // automatically cause a redraw. |
1243 EXPECT_TRUE(state.RedrawPending()); | 1244 EXPECT_TRUE(state.RedrawPending()); |
1244 | 1245 |
1245 // Once the context is recreated, whether we draw should be based on | 1246 // Once the context is recreated, whether we draw should be based on |
1246 // SetCanDraw. | 1247 // SetCanDraw. |
1247 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 1248 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); |
1248 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1249 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
1249 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1250 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1250 state.OnBeginImplFrameDeadline(); | 1251 state.OnBeginImplFrameDeadline(); |
1251 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE, | 1252 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE, |
1252 state.NextAction()); | 1253 state.NextAction()); |
1253 state.SetCanDraw(false); | 1254 state.SetCanDraw(false); |
1254 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT, | 1255 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT, |
1255 state.NextAction()); | 1256 state.NextAction()); |
1256 state.SetCanDraw(true); | 1257 state.SetCanDraw(true); |
1257 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE, | 1258 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE, |
1258 state.NextAction()); | 1259 state.NextAction()); |
1259 } | 1260 } |
1260 | 1261 |
1261 TEST(SchedulerStateMachineTest, TestContextLostWhileCommitInProgress) { | 1262 TEST(SchedulerStateMachineTest, TestContextLostWhileCommitInProgress) { |
1262 SchedulerSettings scheduler_settings; | 1263 SchedulerSettings scheduler_settings; |
1263 StateMachine state(scheduler_settings); | 1264 StateMachine state(scheduler_settings); |
1264 state.SetCanStart(); | 1265 state.SetCanStart(); |
1265 state.UpdateState(state.NextAction()); | 1266 state.UpdateState(state.NextAction()); |
1266 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 1267 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
1267 state.SetVisible(true); | 1268 state.SetVisible(true); |
1268 state.SetCanDraw(true); | 1269 state.SetCanDraw(true); |
1269 | 1270 |
1270 // Get a commit in flight. | 1271 // Get a commit in flight. |
1271 state.SetNeedsCommit(); | 1272 state.SetNeedsCommit(); |
1272 | 1273 |
1273 // Set damage and expect a draw. | 1274 // Set damage and expect a draw. |
1274 state.SetNeedsRedraw(true); | 1275 state.SetNeedsRedraw(true); |
1275 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 1276 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); |
1276 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1277 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
1277 EXPECT_ACTION_UPDATE_STATE( | 1278 EXPECT_ACTION_UPDATE_STATE( |
1278 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1279 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
1279 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1280 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1280 state.OnBeginImplFrameDeadline(); | 1281 state.OnBeginImplFrameDeadline(); |
1281 EXPECT_ACTION_UPDATE_STATE( | 1282 EXPECT_ACTION_UPDATE_STATE( |
1282 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1283 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
1283 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1284 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1284 | 1285 |
1285 // Cause a lost context while the BeginMainFrame is in flight. | 1286 // Cause a lost context while the BeginMainFrame is in flight. |
(...skipping 12 matching lines...) Expand all Loading... |
1298 // waiting for the first draw to unblock the main thread. | 1299 // waiting for the first draw to unblock the main thread. |
1299 EXPECT_TRUE(state.active_tree_needs_first_draw()); | 1300 EXPECT_TRUE(state.active_tree_needs_first_draw()); |
1300 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT); | 1301 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT); |
1301 | 1302 |
1302 // Expect to begin context recreation only in BEGIN_IMPL_FRAME_STATE_IDLE | 1303 // Expect to begin context recreation only in BEGIN_IMPL_FRAME_STATE_IDLE |
1303 EXPECT_EQ(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE, | 1304 EXPECT_EQ(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE, |
1304 state.begin_impl_frame_state()); | 1305 state.begin_impl_frame_state()); |
1305 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION, | 1306 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION, |
1306 state.NextAction()); | 1307 state.NextAction()); |
1307 | 1308 |
1308 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 1309 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); |
1309 EXPECT_EQ(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING, | 1310 EXPECT_EQ(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING, |
1310 state.begin_impl_frame_state()); | 1311 state.begin_impl_frame_state()); |
1311 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); | 1312 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); |
1312 | 1313 |
1313 state.OnBeginImplFrameDeadlinePending(); | 1314 state.OnBeginImplFrameDeadlinePending(); |
1314 EXPECT_EQ(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME, | 1315 EXPECT_EQ(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME, |
1315 state.begin_impl_frame_state()); | 1316 state.begin_impl_frame_state()); |
1316 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); | 1317 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); |
1317 | 1318 |
1318 state.OnBeginImplFrameDeadline(); | 1319 state.OnBeginImplFrameDeadline(); |
(...skipping 11 matching lines...) Expand all Loading... |
1330 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 1331 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
1331 state.SetVisible(true); | 1332 state.SetVisible(true); |
1332 state.SetCanDraw(true); | 1333 state.SetCanDraw(true); |
1333 | 1334 |
1334 // Get a commit in flight. | 1335 // Get a commit in flight. |
1335 state.SetNeedsCommit(); | 1336 state.SetNeedsCommit(); |
1336 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1337 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1337 | 1338 |
1338 // Set damage and expect a draw. | 1339 // Set damage and expect a draw. |
1339 state.SetNeedsRedraw(true); | 1340 state.SetNeedsRedraw(true); |
1340 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 1341 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); |
1341 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1342 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
1342 EXPECT_ACTION_UPDATE_STATE( | 1343 EXPECT_ACTION_UPDATE_STATE( |
1343 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1344 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
1344 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1345 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1345 state.OnBeginImplFrameDeadline(); | 1346 state.OnBeginImplFrameDeadline(); |
1346 EXPECT_ACTION_UPDATE_STATE( | 1347 EXPECT_ACTION_UPDATE_STATE( |
1347 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1348 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
1348 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1349 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1349 | 1350 |
1350 // Cause a lost context while the BeginMainFrame is in flight. | 1351 // Cause a lost context while the BeginMainFrame is in flight. |
(...skipping 12 matching lines...) Expand all Loading... |
1363 | 1364 |
1364 // Because the output surface is missing, we expect the draw to abort. | 1365 // Because the output surface is missing, we expect the draw to abort. |
1365 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT); | 1366 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT); |
1366 | 1367 |
1367 // Expect to begin context recreation only in BEGIN_IMPL_FRAME_STATE_IDLE | 1368 // Expect to begin context recreation only in BEGIN_IMPL_FRAME_STATE_IDLE |
1368 EXPECT_EQ(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE, | 1369 EXPECT_EQ(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE, |
1369 state.begin_impl_frame_state()); | 1370 state.begin_impl_frame_state()); |
1370 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION, | 1371 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION, |
1371 state.NextAction()); | 1372 state.NextAction()); |
1372 | 1373 |
1373 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 1374 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); |
1374 EXPECT_EQ(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING, | 1375 EXPECT_EQ(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING, |
1375 state.begin_impl_frame_state()); | 1376 state.begin_impl_frame_state()); |
1376 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); | 1377 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); |
1377 | 1378 |
1378 state.OnBeginImplFrameDeadlinePending(); | 1379 state.OnBeginImplFrameDeadlinePending(); |
1379 EXPECT_EQ(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME, | 1380 EXPECT_EQ(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME, |
1380 state.begin_impl_frame_state()); | 1381 state.begin_impl_frame_state()); |
1381 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); | 1382 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); |
1382 | 1383 |
1383 state.OnBeginImplFrameDeadline(); | 1384 state.OnBeginImplFrameDeadline(); |
1384 EXPECT_EQ(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE, | 1385 EXPECT_EQ(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE, |
1385 state.begin_impl_frame_state()); | 1386 state.begin_impl_frame_state()); |
1386 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); | 1387 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); |
1387 | 1388 |
1388 state.OnBeginImplFrameIdle(); | 1389 state.OnBeginImplFrameIdle(); |
1389 EXPECT_ACTION_UPDATE_STATE( | 1390 EXPECT_ACTION_UPDATE_STATE( |
1390 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); | 1391 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); |
1391 | 1392 |
1392 // After we get a new output surface, the commit flow should start. | 1393 // After we get a new output surface, the commit flow should start. |
1393 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 1394 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
1394 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 1395 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); |
1395 EXPECT_ACTION_UPDATE_STATE( | 1396 EXPECT_ACTION_UPDATE_STATE( |
1396 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1397 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
1397 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1398 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1398 state.NotifyBeginMainFrameStarted(); | 1399 state.NotifyBeginMainFrameStarted(); |
1399 state.NotifyReadyToCommit(); | 1400 state.NotifyReadyToCommit(); |
1400 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 1401 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
1401 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1402 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1402 state.OnBeginImplFrameDeadline(); | 1403 state.OnBeginImplFrameDeadline(); |
1403 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1404 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
1404 EXPECT_ACTION_UPDATE_STATE( | 1405 EXPECT_ACTION_UPDATE_STATE( |
1405 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1406 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
1406 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1407 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1407 } | 1408 } |
1408 | 1409 |
1409 TEST(SchedulerStateMachineTest, TestFinishAllRenderingWhileContextLost) { | 1410 TEST(SchedulerStateMachineTest, TestFinishAllRenderingWhileContextLost) { |
1410 SchedulerSettings default_scheduler_settings; | 1411 SchedulerSettings default_scheduler_settings; |
1411 StateMachine state(default_scheduler_settings); | 1412 StateMachine state(default_scheduler_settings); |
1412 state.SetCanStart(); | 1413 state.SetCanStart(); |
1413 state.UpdateState(state.NextAction()); | 1414 state.UpdateState(state.NextAction()); |
1414 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 1415 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
1415 state.SetVisible(true); | 1416 state.SetVisible(true); |
1416 state.SetCanDraw(true); | 1417 state.SetCanDraw(true); |
1417 | 1418 |
1418 // Cause a lost context lost. | 1419 // Cause a lost context lost. |
1419 state.DidLoseOutputSurface(); | 1420 state.DidLoseOutputSurface(); |
1420 | 1421 |
1421 // Ask a forced redraw for readback and verify it ocurrs. | 1422 // Ask a forced redraw for readback and verify it ocurrs. |
1422 state.SetNeedsForcedRedrawForReadback(); | 1423 state.SetNeedsForcedRedrawForReadback(); |
1423 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 1424 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); |
1424 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_READBACK); | 1425 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_READBACK); |
1425 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1426 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1426 | 1427 |
1427 // Forced redraws for readbacks need to be followed by a new commit | 1428 // Forced redraws for readbacks need to be followed by a new commit |
1428 // to replace the readback commit. | 1429 // to replace the readback commit. |
1429 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT, | 1430 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT, |
1430 state.CommitState()); | 1431 state.CommitState()); |
1431 state.NotifyBeginMainFrameStarted(); | 1432 state.NotifyBeginMainFrameStarted(); |
1432 state.NotifyReadyToCommit(); | 1433 state.NotifyReadyToCommit(); |
1433 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 1434 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
(...skipping 29 matching lines...) Expand all Loading... |
1463 state.SetNeedsRedraw(true); | 1464 state.SetNeedsRedraw(true); |
1464 | 1465 |
1465 // Cause a lost output surface, and restore it. | 1466 // Cause a lost output surface, and restore it. |
1466 state.DidLoseOutputSurface(); | 1467 state.DidLoseOutputSurface(); |
1467 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION, | 1468 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION, |
1468 state.NextAction()); | 1469 state.NextAction()); |
1469 state.UpdateState(state.NextAction()); | 1470 state.UpdateState(state.NextAction()); |
1470 state.DidCreateAndInitializeOutputSurface(); | 1471 state.DidCreateAndInitializeOutputSurface(); |
1471 | 1472 |
1472 EXPECT_FALSE(state.RedrawPending()); | 1473 EXPECT_FALSE(state.RedrawPending()); |
1473 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 1474 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); |
1474 EXPECT_EQ(SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME, | 1475 EXPECT_EQ(SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME, |
1475 state.NextAction()); | 1476 state.NextAction()); |
1476 } | 1477 } |
1477 | 1478 |
1478 TEST(SchedulerStateMachineTest, | 1479 TEST(SchedulerStateMachineTest, |
1479 TestPendingActivationsShouldBeForcedAfterLostOutputSurface) { | 1480 TestPendingActivationsShouldBeForcedAfterLostOutputSurface) { |
1480 SchedulerSettings settings; | 1481 SchedulerSettings settings; |
1481 settings.impl_side_painting = true; | 1482 settings.impl_side_painting = true; |
1482 StateMachine state(settings); | 1483 StateMachine state(settings); |
1483 state.SetCanStart(); | 1484 state.SetCanStart(); |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1556 SchedulerStateMachine::READBACK_STATE_WAITING_FOR_REPLACEMENT_COMMIT, | 1557 SchedulerStateMachine::READBACK_STATE_WAITING_FOR_REPLACEMENT_COMMIT, |
1557 state.readback_state()); | 1558 state.readback_state()); |
1558 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT, | 1559 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT, |
1559 state.CommitState()); | 1560 state.CommitState()); |
1560 | 1561 |
1561 // Finish the replacement commit. | 1562 // Finish the replacement commit. |
1562 state.NotifyBeginMainFrameStarted(); | 1563 state.NotifyBeginMainFrameStarted(); |
1563 state.NotifyReadyToCommit(); | 1564 state.NotifyReadyToCommit(); |
1564 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 1565 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
1565 | 1566 |
1566 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 1567 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); |
1567 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1568 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
1568 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1569 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1569 state.OnBeginImplFrameDeadline(); | 1570 state.OnBeginImplFrameDeadline(); |
1570 EXPECT_ACTION_UPDATE_STATE( | 1571 EXPECT_ACTION_UPDATE_STATE( |
1571 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1572 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
1572 EXPECT_EQ(SchedulerStateMachine::READBACK_STATE_IDLE, state.readback_state()); | 1573 EXPECT_EQ(SchedulerStateMachine::READBACK_STATE_IDLE, state.readback_state()); |
1573 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1574 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1574 } | 1575 } |
1575 | 1576 |
1576 TEST(SchedulerStateMachineTest, TestFinishCommitWhenCommitInProgress) { | 1577 TEST(SchedulerStateMachineTest, TestFinishCommitWhenCommitInProgress) { |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1661 if (settings.main_frame_before_draw_enabled) { | 1662 if (settings.main_frame_before_draw_enabled) { |
1662 // New replacement commit is scheduled. | 1663 // New replacement commit is scheduled. |
1663 EXPECT_ACTION_UPDATE_STATE( | 1664 EXPECT_ACTION_UPDATE_STATE( |
1664 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1665 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
1665 // Forced commit is started. | 1666 // Forced commit is started. |
1666 EXPECT_EQ(SchedulerStateMachine::READBACK_STATE_WAITING_FOR_COMMIT, | 1667 EXPECT_EQ(SchedulerStateMachine::READBACK_STATE_WAITING_FOR_COMMIT, |
1667 state.readback_state()); | 1668 state.readback_state()); |
1668 } | 1669 } |
1669 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1670 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1670 | 1671 |
1671 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 1672 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); |
1672 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1673 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
1673 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1674 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1674 // Perform the draw & swap of replacement commit. | 1675 // Perform the draw & swap of replacement commit. |
1675 state.OnBeginImplFrameDeadline(); | 1676 state.OnBeginImplFrameDeadline(); |
1676 EXPECT_ACTION_UPDATE_STATE( | 1677 EXPECT_ACTION_UPDATE_STATE( |
1677 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1678 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
1678 if (!settings.main_frame_before_draw_enabled) { | 1679 if (!settings.main_frame_before_draw_enabled) { |
1679 // New replacement commit is scheduled. | 1680 // New replacement commit is scheduled. |
1680 EXPECT_ACTION_UPDATE_STATE( | 1681 EXPECT_ACTION_UPDATE_STATE( |
1681 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1682 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
(...skipping 19 matching lines...) Expand all Loading... |
1701 state.CommitState()); | 1702 state.CommitState()); |
1702 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1703 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1703 | 1704 |
1704 // Finish the replacement commit and draw it. | 1705 // Finish the replacement commit and draw it. |
1705 state.NotifyBeginMainFrameStarted(); | 1706 state.NotifyBeginMainFrameStarted(); |
1706 state.NotifyReadyToCommit(); | 1707 state.NotifyReadyToCommit(); |
1707 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 1708 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
1708 state.NotifyReadyToActivate(); | 1709 state.NotifyReadyToActivate(); |
1709 EXPECT_ACTION_UPDATE_STATE( | 1710 EXPECT_ACTION_UPDATE_STATE( |
1710 SchedulerStateMachine::ACTION_ACTIVATE_PENDING_TREE); | 1711 SchedulerStateMachine::ACTION_ACTIVATE_PENDING_TREE); |
1711 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 1712 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); |
1712 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1713 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
1713 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1714 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1714 state.OnBeginImplFrameDeadline(); | 1715 state.OnBeginImplFrameDeadline(); |
1715 EXPECT_ACTION_UPDATE_STATE( | 1716 EXPECT_ACTION_UPDATE_STATE( |
1716 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1717 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
1717 EXPECT_EQ(SchedulerStateMachine::READBACK_STATE_IDLE, state.readback_state()); | 1718 EXPECT_EQ(SchedulerStateMachine::READBACK_STATE_IDLE, state.readback_state()); |
1718 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1719 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1719 } | 1720 } |
1720 | 1721 |
1721 // Explicitly test when main_frame_before_draw_enabled = true. | 1722 // Explicitly test when main_frame_before_draw_enabled = true. |
(...skipping 29 matching lines...) Expand all Loading... |
1751 // is idle because main_frame_before_activation is enabled. | 1752 // is idle because main_frame_before_activation is enabled. |
1752 state.SetCommitState( | 1753 state.SetCommitState( |
1753 SchedulerStateMachine::COMMIT_STATE_IDLE); | 1754 SchedulerStateMachine::COMMIT_STATE_IDLE); |
1754 state.SetReadbackState( | 1755 state.SetReadbackState( |
1755 SchedulerStateMachine::READBACK_STATE_WAITING_FOR_REPLACEMENT_ACTIVATION); | 1756 SchedulerStateMachine::READBACK_STATE_WAITING_FOR_REPLACEMENT_ACTIVATION); |
1756 state.SetHasPendingTree(true); | 1757 state.SetHasPendingTree(true); |
1757 | 1758 |
1758 // New commit is requested and scheduled when impl-side painting is in | 1759 // New commit is requested and scheduled when impl-side painting is in |
1759 // progress. | 1760 // progress. |
1760 state.SetNeedsCommit(); | 1761 state.SetNeedsCommit(); |
1761 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 1762 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); |
1762 EXPECT_ACTION_UPDATE_STATE( | 1763 EXPECT_ACTION_UPDATE_STATE( |
1763 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1764 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
1764 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1765 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1765 | 1766 |
1766 // Forced commit is requested during the impl-side painting. | 1767 // Forced commit is requested during the impl-side painting. |
1767 state.SetNeedsForcedCommitForReadback(); | 1768 state.SetNeedsForcedCommitForReadback(); |
1768 EXPECT_FALSE(state.NeedsCommit()); | 1769 EXPECT_FALSE(state.NeedsCommit()); |
1769 | 1770 |
1770 state.OnBeginImplFrameDeadline(); | 1771 state.OnBeginImplFrameDeadline(); |
1771 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1772 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1772 | 1773 |
1773 state.NotifyReadyToActivate(); | 1774 state.NotifyReadyToActivate(); |
1774 EXPECT_ACTION_UPDATE_STATE( | 1775 EXPECT_ACTION_UPDATE_STATE( |
1775 SchedulerStateMachine::ACTION_ACTIVATE_PENDING_TREE); | 1776 SchedulerStateMachine::ACTION_ACTIVATE_PENDING_TREE); |
1776 // Replacement commit for requested forced commit is already scheduled. | 1777 // Replacement commit for requested forced commit is already scheduled. |
1777 EXPECT_EQ(SchedulerStateMachine::READBACK_STATE_WAITING_FOR_COMMIT, | 1778 EXPECT_EQ(SchedulerStateMachine::READBACK_STATE_WAITING_FOR_COMMIT, |
1778 state.readback_state()); | 1779 state.readback_state()); |
1779 EXPECT_FALSE(state.NeedsCommit()); | 1780 EXPECT_FALSE(state.NeedsCommit()); |
1780 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1781 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1781 | 1782 |
1782 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 1783 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); |
1783 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1784 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
1784 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1785 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
1785 // Perform the draw & swap of replacement commit. | 1786 // Perform the draw & swap of replacement commit. |
1786 state.OnBeginImplFrameDeadline(); | 1787 state.OnBeginImplFrameDeadline(); |
1787 EXPECT_ACTION_UPDATE_STATE( | 1788 EXPECT_ACTION_UPDATE_STATE( |
1788 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1789 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
1789 EXPECT_ACTION_UPDATE_STATE( | 1790 EXPECT_ACTION_UPDATE_STATE( |
1790 SchedulerStateMachine::ACTION_NONE); | 1791 SchedulerStateMachine::ACTION_NONE); |
1791 | 1792 |
1792 // forced commit is started. | 1793 // forced commit is started. |
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2003 settings.impl_side_painting = true; | 2004 settings.impl_side_painting = true; |
2004 StateMachine state(settings); | 2005 StateMachine state(settings); |
2005 state.SetCanStart(); | 2006 state.SetCanStart(); |
2006 state.UpdateState(state.NextAction()); | 2007 state.UpdateState(state.NextAction()); |
2007 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 2008 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
2008 state.SetVisible(true); | 2009 state.SetVisible(true); |
2009 state.SetCanDraw(true); | 2010 state.SetCanDraw(true); |
2010 | 2011 |
2011 // This test mirrors what happens during the first frame of a scroll gesture. | 2012 // This test mirrors what happens during the first frame of a scroll gesture. |
2012 // First we get the input event and a BeginFrame. | 2013 // First we get the input event and a BeginFrame. |
2013 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 2014 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); |
2014 | 2015 |
2015 // As a response the compositor requests a redraw and a commit to tell the | 2016 // As a response the compositor requests a redraw and a commit to tell the |
2016 // main thread about the new scroll offset. | 2017 // main thread about the new scroll offset. |
2017 state.SetNeedsRedraw(true); | 2018 state.SetNeedsRedraw(true); |
2018 state.SetNeedsCommit(); | 2019 state.SetNeedsCommit(); |
2019 | 2020 |
2020 // We should start the commit normally. | 2021 // We should start the commit normally. |
2021 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 2022 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
2022 EXPECT_ACTION_UPDATE_STATE( | 2023 EXPECT_ACTION_UPDATE_STATE( |
2023 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 2024 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
(...skipping 13 matching lines...) Expand all Loading... |
2037 settings.impl_side_painting = true; | 2038 settings.impl_side_painting = true; |
2038 StateMachine state(settings); | 2039 StateMachine state(settings); |
2039 state.SetCanStart(); | 2040 state.SetCanStart(); |
2040 state.UpdateState(state.NextAction()); | 2041 state.UpdateState(state.NextAction()); |
2041 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 2042 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
2042 state.SetVisible(true); | 2043 state.SetVisible(true); |
2043 state.SetCanDraw(true); | 2044 state.SetCanDraw(true); |
2044 | 2045 |
2045 // This test ensures that impl-draws are prioritized over main thread updates | 2046 // This test ensures that impl-draws are prioritized over main thread updates |
2046 // in prefer smoothness mode. | 2047 // in prefer smoothness mode. |
2047 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 2048 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); |
2048 state.SetNeedsRedraw(true); | 2049 state.SetNeedsRedraw(true); |
2049 state.SetNeedsCommit(); | 2050 state.SetNeedsCommit(); |
2050 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 2051 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
2051 EXPECT_ACTION_UPDATE_STATE( | 2052 EXPECT_ACTION_UPDATE_STATE( |
2052 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 2053 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
2053 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 2054 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
2054 | 2055 |
2055 // The deadline is not triggered early until we enter prefer smoothness mode. | 2056 // The deadline is not triggered early until we enter prefer smoothness mode. |
2056 EXPECT_FALSE(state.ShouldTriggerBeginImplFrameDeadlineEarly()); | 2057 EXPECT_FALSE(state.ShouldTriggerBeginImplFrameDeadlineEarly()); |
2057 state.SetSmoothnessTakesPriority(true); | 2058 state.SetSmoothnessTakesPriority(true); |
2058 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineEarly()); | 2059 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineEarly()); |
2059 } | 2060 } |
2060 | 2061 |
2061 TEST(SchedulerStateMachineTest, TestSetNeedsAnimate) { | 2062 TEST(SchedulerStateMachineTest, TestSetNeedsAnimate) { |
2062 SchedulerSettings settings; | 2063 SchedulerSettings settings; |
2063 settings.impl_side_painting = true; | 2064 settings.impl_side_painting = true; |
2064 StateMachine state(settings); | 2065 StateMachine state(settings); |
2065 state.SetCanStart(); | 2066 state.SetCanStart(); |
2066 state.UpdateState(state.NextAction()); | 2067 state.UpdateState(state.NextAction()); |
2067 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 2068 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
2068 state.SetVisible(true); | 2069 state.SetVisible(true); |
2069 state.SetCanDraw(true); | 2070 state.SetCanDraw(true); |
2070 | 2071 |
2071 // Test requesting an animation that, when run, causes us to draw. | 2072 // Test requesting an animation that, when run, causes us to draw. |
2072 state.SetNeedsAnimate(); | 2073 state.SetNeedsAnimate(); |
2073 EXPECT_TRUE(state.BeginFrameNeeded()); | 2074 EXPECT_TRUE(state.BeginFrameNeeded()); |
2074 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 2075 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
2075 | 2076 |
2076 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 2077 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); |
2077 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 2078 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
2078 | 2079 |
2079 state.OnBeginImplFrameDeadlinePending(); | 2080 state.OnBeginImplFrameDeadlinePending(); |
2080 state.OnBeginImplFrameDeadline(); | 2081 state.OnBeginImplFrameDeadline(); |
2081 EXPECT_ACTION_UPDATE_STATE( | 2082 EXPECT_ACTION_UPDATE_STATE( |
2082 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 2083 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
2083 } | 2084 } |
2084 | 2085 |
2085 TEST(SchedulerStateMachineTest, TestAnimateBeforeCommit) { | 2086 TEST(SchedulerStateMachineTest, TestAnimateBeforeCommit) { |
2086 SchedulerSettings settings; | 2087 SchedulerSettings settings; |
2087 settings.impl_side_painting = true; | 2088 settings.impl_side_painting = true; |
2088 StateMachine state(settings); | 2089 StateMachine state(settings); |
2089 state.SetCanStart(); | 2090 state.SetCanStart(); |
2090 state.UpdateState(state.NextAction()); | 2091 state.UpdateState(state.NextAction()); |
2091 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 2092 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
2092 state.SetVisible(true); | 2093 state.SetVisible(true); |
2093 state.SetCanDraw(true); | 2094 state.SetCanDraw(true); |
2094 | 2095 |
2095 // Check that animations are updated before we start a commit. | 2096 // Check that animations are updated before we start a commit. |
2096 state.SetNeedsAnimate(); | 2097 state.SetNeedsAnimate(); |
2097 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 2098 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
2098 state.SetNeedsCommit(); | 2099 state.SetNeedsCommit(); |
2099 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 2100 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
2100 EXPECT_TRUE(state.BeginFrameNeeded()); | 2101 EXPECT_TRUE(state.BeginFrameNeeded()); |
2101 | 2102 |
2102 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 2103 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); |
2103 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 2104 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
2104 EXPECT_ACTION_UPDATE_STATE( | 2105 EXPECT_ACTION_UPDATE_STATE( |
2105 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 2106 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
2106 | 2107 |
2107 state.OnBeginImplFrameDeadlinePending(); | 2108 state.OnBeginImplFrameDeadlinePending(); |
2108 state.OnBeginImplFrameDeadline(); | 2109 state.OnBeginImplFrameDeadline(); |
2109 EXPECT_ACTION_UPDATE_STATE( | 2110 EXPECT_ACTION_UPDATE_STATE( |
2110 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 2111 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
2111 } | 2112 } |
2112 | 2113 |
2113 TEST(SchedulerStateMachineTest, TestSetNeedsAnimateAfterAnimate) { | 2114 TEST(SchedulerStateMachineTest, TestSetNeedsAnimateAfterAnimate) { |
2114 SchedulerSettings settings; | 2115 SchedulerSettings settings; |
2115 settings.impl_side_painting = true; | 2116 settings.impl_side_painting = true; |
2116 StateMachine state(settings); | 2117 StateMachine state(settings); |
2117 state.SetCanStart(); | 2118 state.SetCanStart(); |
2118 state.UpdateState(state.NextAction()); | 2119 state.UpdateState(state.NextAction()); |
2119 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 2120 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
2120 state.SetVisible(true); | 2121 state.SetVisible(true); |
2121 state.SetCanDraw(true); | 2122 state.SetCanDraw(true); |
2122 | 2123 |
2123 // Test requesting an animation after we have already animated during this | 2124 // Test requesting an animation after we have already animated during this |
2124 // frame. | 2125 // frame. |
2125 state.SetNeedsRedraw(true); | 2126 state.SetNeedsRedraw(true); |
2126 EXPECT_TRUE(state.BeginFrameNeeded()); | 2127 EXPECT_TRUE(state.BeginFrameNeeded()); |
2127 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 2128 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
2128 | 2129 |
2129 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 2130 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting()); |
2130 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 2131 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
2131 | 2132 |
2132 state.SetNeedsAnimate(); | 2133 state.SetNeedsAnimate(); |
2133 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 2134 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
2134 | 2135 |
2135 state.OnBeginImplFrameDeadline(); | 2136 state.OnBeginImplFrameDeadline(); |
2136 EXPECT_ACTION_UPDATE_STATE( | 2137 EXPECT_ACTION_UPDATE_STATE( |
2137 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 2138 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
2138 } | 2139 } |
2139 | 2140 |
2140 } // namespace | 2141 } // namespace |
2141 } // namespace cc | 2142 } // namespace cc |
OLD | NEW |