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