Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(166)

Side by Side Diff: cc/scheduler/scheduler_state_machine_unittest.cc

Issue 1020993002: cc: Do not pass BeginFrameArgs to state machine. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « cc/scheduler/scheduler_state_machine.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/trace_event/trace_event.h" 7 #include "base/trace_event/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 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
145 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION) 145 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION)
146 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 146 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
147 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE); 147 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE);
148 state.SetNeedsRedraw(false); 148 state.SetNeedsRedraw(false);
149 state.SetVisible(true); 149 state.SetVisible(true);
150 150
151 EXPECT_FALSE(state.BeginFrameNeeded()); 151 EXPECT_FALSE(state.BeginFrameNeeded());
152 152
153 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 153 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
154 EXPECT_FALSE(state.BeginFrameNeeded()); 154 EXPECT_FALSE(state.BeginFrameNeeded());
155 state.OnBeginImplFrame( 155 state.OnBeginImplFrame();
156 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE));
157 156
158 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 157 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
159 state.OnBeginImplFrameDeadline(); 158 state.OnBeginImplFrameDeadline();
160 } 159 }
161 160
162 // If commit requested but can_start is still false, do nothing. 161 // If commit requested but can_start is still false, do nothing.
163 { 162 {
164 StateMachine state(default_scheduler_settings); 163 StateMachine state(default_scheduler_settings);
165 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE); 164 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE);
166 state.SetNeedsRedraw(false); 165 state.SetNeedsRedraw(false);
167 state.SetVisible(true); 166 state.SetVisible(true);
168 state.SetNeedsCommit(); 167 state.SetNeedsCommit();
169 168
170 EXPECT_FALSE(state.BeginFrameNeeded()); 169 EXPECT_FALSE(state.BeginFrameNeeded());
171 170
172 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 171 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
173 EXPECT_FALSE(state.BeginFrameNeeded()); 172 EXPECT_FALSE(state.BeginFrameNeeded());
174 state.OnBeginImplFrame( 173 state.OnBeginImplFrame();
175 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE));
176 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 174 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
177 state.OnBeginImplFrameDeadline(); 175 state.OnBeginImplFrameDeadline();
178 } 176 }
179 177
180 // If commit requested, begin a main frame. 178 // If commit requested, begin a main frame.
181 { 179 {
182 StateMachine state(default_scheduler_settings); 180 StateMachine state(default_scheduler_settings);
183 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE); 181 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE);
184 state.SetCanStart(); 182 state.SetCanStart();
185 state.UpdateState(state.NextAction()); 183 state.UpdateState(state.NextAction());
186 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 184 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
187 state.SetNeedsRedraw(false); 185 state.SetNeedsRedraw(false);
188 state.SetVisible(true); 186 state.SetVisible(true);
189 state.SetNeedsCommit(); 187 state.SetNeedsCommit();
190 188
191 EXPECT_TRUE(state.BeginFrameNeeded()); 189 EXPECT_TRUE(state.BeginFrameNeeded());
192 190
193 state.OnBeginImplFrame( 191 state.OnBeginImplFrame();
194 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE));
195 EXPECT_ACTION_UPDATE_STATE( 192 EXPECT_ACTION_UPDATE_STATE(
196 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 193 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
197 } 194 }
198 195
199 // Begin the frame, make sure needs_commit and commit_state update correctly. 196 // Begin the frame, make sure needs_commit and commit_state update correctly.
200 { 197 {
201 StateMachine state(default_scheduler_settings); 198 StateMachine state(default_scheduler_settings);
202 state.SetCanStart(); 199 state.SetCanStart();
203 state.UpdateState(state.NextAction()); 200 state.UpdateState(state.NextAction());
204 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 201 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
(...skipping 12 matching lines...) Expand all
217 scheduler_settings.main_frame_before_activation_enabled = true; 214 scheduler_settings.main_frame_before_activation_enabled = true;
218 StateMachine state(scheduler_settings); 215 StateMachine state(scheduler_settings);
219 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE); 216 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE);
220 SET_UP_STATE(state) 217 SET_UP_STATE(state)
221 state.SetNeedsRedraw(false); 218 state.SetNeedsRedraw(false);
222 state.SetNeedsCommit(); 219 state.SetNeedsCommit();
223 220
224 EXPECT_TRUE(state.BeginFrameNeeded()); 221 EXPECT_TRUE(state.BeginFrameNeeded());
225 222
226 // Commit to the pending tree. 223 // Commit to the pending tree.
227 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 224 state.OnBeginImplFrame();
228 EXPECT_ACTION_UPDATE_STATE( 225 EXPECT_ACTION_UPDATE_STATE(
229 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 226 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
230 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 227 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
231 228
232 state.NotifyBeginMainFrameStarted(); 229 state.NotifyBeginMainFrameStarted();
233 state.NotifyReadyToCommit(); 230 state.NotifyReadyToCommit();
234 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 231 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
235 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 232 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
236 EXPECT_COMMIT_STATE(SchedulerStateMachine::COMMIT_STATE_IDLE); 233 EXPECT_COMMIT_STATE(SchedulerStateMachine::COMMIT_STATE_IDLE);
237 234
238 state.OnBeginImplFrameDeadline(); 235 state.OnBeginImplFrameDeadline();
239 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 236 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
240 237
241 // Verify that the next commit starts while there is still a pending tree. 238 // Verify that the next commit starts while there is still a pending tree.
242 state.SetNeedsCommit(); 239 state.SetNeedsCommit();
243 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 240 state.OnBeginImplFrame();
244 EXPECT_ACTION_UPDATE_STATE( 241 EXPECT_ACTION_UPDATE_STATE(
245 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 242 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
246 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 243 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
247 244
248 // Verify the pending commit doesn't overwrite the pending 245 // Verify the pending commit doesn't overwrite the pending
249 // tree until the pending tree has been activated. 246 // tree until the pending tree has been activated.
250 state.NotifyBeginMainFrameStarted(); 247 state.NotifyBeginMainFrameStarted();
251 state.NotifyReadyToCommit(); 248 state.NotifyReadyToCommit();
252 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 249 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
253 250
(...skipping 16 matching lines...) Expand all
270 } 267 }
271 268
272 TEST(SchedulerStateMachineTest, 269 TEST(SchedulerStateMachineTest,
273 TestFailedDrawForAnimationCheckerboardSetsNeedsCommitAndDoesNotDrawAgain) { 270 TestFailedDrawForAnimationCheckerboardSetsNeedsCommitAndDoesNotDrawAgain) {
274 SchedulerSettings default_scheduler_settings; 271 SchedulerSettings default_scheduler_settings;
275 StateMachine state(default_scheduler_settings); 272 StateMachine state(default_scheduler_settings);
276 SET_UP_STATE(state) 273 SET_UP_STATE(state)
277 state.SetNeedsRedraw(true); 274 state.SetNeedsRedraw(true);
278 EXPECT_TRUE(state.RedrawPending()); 275 EXPECT_TRUE(state.RedrawPending());
279 EXPECT_TRUE(state.BeginFrameNeeded()); 276 EXPECT_TRUE(state.BeginFrameNeeded());
280 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 277 state.OnBeginImplFrame();
281 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 278 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE);
282 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 279 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
283 state.OnBeginImplFrameDeadline(); 280 state.OnBeginImplFrameDeadline();
284 281
285 // We're drawing now. 282 // We're drawing now.
286 EXPECT_ACTION_UPDATE_STATE( 283 EXPECT_ACTION_UPDATE_STATE(
287 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 284 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
288 state.DidSwapBuffers(); 285 state.DidSwapBuffers();
289 state.DidSwapBuffersComplete(); 286 state.DidSwapBuffersComplete();
290 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 287 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
291 288
292 EXPECT_FALSE(state.RedrawPending()); 289 EXPECT_FALSE(state.RedrawPending());
293 EXPECT_FALSE(state.CommitPending()); 290 EXPECT_FALSE(state.CommitPending());
294 291
295 // Failing the draw makes us require a commit. 292 // Failing the draw makes us require a commit.
296 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); 293 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS);
297 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 294 state.OnBeginImplFrame();
298 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 295 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE);
299 EXPECT_ACTION_UPDATE_STATE( 296 EXPECT_ACTION_UPDATE_STATE(
300 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 297 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
301 EXPECT_TRUE(state.RedrawPending()); 298 EXPECT_TRUE(state.RedrawPending());
302 EXPECT_TRUE(state.CommitPending()); 299 EXPECT_TRUE(state.CommitPending());
303 } 300 }
304 301
305 TEST(SchedulerStateMachineTest, TestFailedDrawForMissingHighResNeedsCommit) { 302 TEST(SchedulerStateMachineTest, TestFailedDrawForMissingHighResNeedsCommit) {
306 SchedulerSettings default_scheduler_settings; 303 SchedulerSettings default_scheduler_settings;
307 StateMachine state(default_scheduler_settings); 304 StateMachine state(default_scheduler_settings);
308 SET_UP_STATE(state) 305 SET_UP_STATE(state)
309 state.SetNeedsRedraw(true); 306 state.SetNeedsRedraw(true);
310 EXPECT_TRUE(state.RedrawPending()); 307 EXPECT_TRUE(state.RedrawPending());
311 EXPECT_TRUE(state.BeginFrameNeeded()); 308 EXPECT_TRUE(state.BeginFrameNeeded());
312 309
313 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 310 state.OnBeginImplFrame();
314 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 311 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE);
315 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 312 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
316 state.OnBeginImplFrameDeadline(); 313 state.OnBeginImplFrameDeadline();
317 EXPECT_ACTION_UPDATE_STATE( 314 EXPECT_ACTION_UPDATE_STATE(
318 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 315 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
319 state.DidSwapBuffers(); 316 state.DidSwapBuffers();
320 state.DidSwapBuffersComplete(); 317 state.DidSwapBuffersComplete();
321 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 318 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
322 EXPECT_FALSE(state.RedrawPending()); 319 EXPECT_FALSE(state.RedrawPending());
323 EXPECT_FALSE(state.CommitPending()); 320 EXPECT_FALSE(state.CommitPending());
324 321
325 // Missing high res content requires a commit (but not a redraw) 322 // Missing high res content requires a commit (but not a redraw)
326 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_MISSING_HIGH_RES_CONTENT); 323 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_MISSING_HIGH_RES_CONTENT);
327 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 324 state.OnBeginImplFrame();
328 EXPECT_ACTION_UPDATE_STATE( 325 EXPECT_ACTION_UPDATE_STATE(
329 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 326 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
330 EXPECT_FALSE(state.RedrawPending()); 327 EXPECT_FALSE(state.RedrawPending());
331 EXPECT_TRUE(state.CommitPending()); 328 EXPECT_TRUE(state.CommitPending());
332 } 329 }
333 330
334 TEST(SchedulerStateMachineTest, 331 TEST(SchedulerStateMachineTest,
335 TestsetNeedsRedrawDuringFailedDrawDoesNotRemoveNeedsRedraw) { 332 TestsetNeedsRedrawDuringFailedDrawDoesNotRemoveNeedsRedraw) {
336 SchedulerSettings default_scheduler_settings; 333 SchedulerSettings default_scheduler_settings;
337 StateMachine state(default_scheduler_settings); 334 StateMachine state(default_scheduler_settings);
338 SET_UP_STATE(state) 335 SET_UP_STATE(state)
339 state.SetNeedsRedraw(true); 336 state.SetNeedsRedraw(true);
340 EXPECT_TRUE(state.RedrawPending()); 337 EXPECT_TRUE(state.RedrawPending());
341 EXPECT_TRUE(state.BeginFrameNeeded()); 338 EXPECT_TRUE(state.BeginFrameNeeded());
342 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 339 state.OnBeginImplFrame();
343 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 340 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE);
344 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 341 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
345 state.OnBeginImplFrameDeadline(); 342 state.OnBeginImplFrameDeadline();
346 343
347 // We're drawing now. 344 // We're drawing now.
348 EXPECT_ACTION_UPDATE_STATE( 345 EXPECT_ACTION_UPDATE_STATE(
349 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 346 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
350 state.DidSwapBuffers(); 347 state.DidSwapBuffers();
351 state.DidSwapBuffersComplete(); 348 state.DidSwapBuffersComplete();
352 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 349 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
353 EXPECT_FALSE(state.RedrawPending()); 350 EXPECT_FALSE(state.RedrawPending());
354 EXPECT_FALSE(state.CommitPending()); 351 EXPECT_FALSE(state.CommitPending());
355 352
356 // While still in the same BeginMainFrame callback on the main thread, 353 // While still in the same BeginMainFrame callback on the main thread,
357 // set needs redraw again. This should not redraw. 354 // set needs redraw again. This should not redraw.
358 state.SetNeedsRedraw(true); 355 state.SetNeedsRedraw(true);
359 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 356 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
360 357
361 // Failing the draw for animation checkerboards makes us require a commit. 358 // Failing the draw for animation checkerboards makes us require a commit.
362 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); 359 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS);
363 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 360 state.OnBeginImplFrame();
364 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 361 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE);
365 EXPECT_ACTION_UPDATE_STATE( 362 EXPECT_ACTION_UPDATE_STATE(
366 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 363 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
367 EXPECT_TRUE(state.RedrawPending()); 364 EXPECT_TRUE(state.RedrawPending());
368 } 365 }
369 366
370 TEST(SchedulerStateMachineTest, 367 TEST(SchedulerStateMachineTest,
371 TestFailedDrawsEventuallyForceDrawAfterNextCommit) { 368 TestFailedDrawsEventuallyForceDrawAfterNextCommit) {
372 SchedulerSettings scheduler_settings; 369 SchedulerSettings scheduler_settings;
373 scheduler_settings.maximum_number_of_failed_draws_before_draw_is_forced_ = 1; 370 scheduler_settings.maximum_number_of_failed_draws_before_draw_is_forced_ = 1;
374 StateMachine state(scheduler_settings); 371 StateMachine state(scheduler_settings);
375 SET_UP_STATE(state) 372 SET_UP_STATE(state)
376 373
377 // Start a commit. 374 // Start a commit.
378 state.SetNeedsCommit(); 375 state.SetNeedsCommit();
379 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 376 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
380 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 377 state.OnBeginImplFrame();
381 EXPECT_ACTION_UPDATE_STATE( 378 EXPECT_ACTION_UPDATE_STATE(
382 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 379 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
383 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 380 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
384 EXPECT_TRUE(state.CommitPending()); 381 EXPECT_TRUE(state.CommitPending());
385 382
386 // Then initiate a draw. 383 // Then initiate a draw.
387 state.SetNeedsRedraw(true); 384 state.SetNeedsRedraw(true);
388 state.OnBeginImplFrameDeadline(); 385 state.OnBeginImplFrameDeadline();
389 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 386 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE);
390 EXPECT_ACTION_UPDATE_STATE( 387 EXPECT_ACTION_UPDATE_STATE(
391 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 388 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
392 389
393 // Fail the draw. 390 // Fail the draw.
394 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); 391 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS);
395 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 392 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
396 EXPECT_TRUE(state.BeginFrameNeeded()); 393 EXPECT_TRUE(state.BeginFrameNeeded());
397 EXPECT_TRUE(state.RedrawPending()); 394 EXPECT_TRUE(state.RedrawPending());
398 // But the commit is ongoing. 395 // But the commit is ongoing.
399 EXPECT_TRUE(state.CommitPending()); 396 EXPECT_TRUE(state.CommitPending());
400 397
401 // Finish the commit. Note, we should not yet be forcing a draw, but should 398 // Finish the commit. Note, we should not yet be forcing a draw, but should
402 // continue the commit as usual. 399 // continue the commit as usual.
403 state.NotifyBeginMainFrameStarted(); 400 state.NotifyBeginMainFrameStarted();
404 state.NotifyReadyToCommit(); 401 state.NotifyReadyToCommit();
405 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 402 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
406 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 403 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
407 EXPECT_TRUE(state.RedrawPending()); 404 EXPECT_TRUE(state.RedrawPending());
408 405
409 // The redraw should be forced at the end of the next BeginImplFrame. 406 // The redraw should be forced at the end of the next BeginImplFrame.
410 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 407 state.OnBeginImplFrame();
411 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 408 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE);
412 EXPECT_ACTION_UPDATE_STATE( 409 EXPECT_ACTION_UPDATE_STATE(
413 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 410 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
414 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 411 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
415 state.OnBeginImplFrameDeadline(); 412 state.OnBeginImplFrameDeadline();
416 EXPECT_ACTION_UPDATE_STATE( 413 EXPECT_ACTION_UPDATE_STATE(
417 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_FORCED); 414 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_FORCED);
418 state.DidSwapBuffers(); 415 state.DidSwapBuffers();
419 state.DidSwapBuffersComplete(); 416 state.DidSwapBuffersComplete();
420 } 417 }
421 418
422 TEST(SchedulerStateMachineTest, TestFailedDrawsDoNotRestartForcedDraw) { 419 TEST(SchedulerStateMachineTest, TestFailedDrawsDoNotRestartForcedDraw) {
423 SchedulerSettings scheduler_settings; 420 SchedulerSettings scheduler_settings;
424 int draw_limit = 1; 421 int draw_limit = 1;
425 scheduler_settings.maximum_number_of_failed_draws_before_draw_is_forced_ = 422 scheduler_settings.maximum_number_of_failed_draws_before_draw_is_forced_ =
426 draw_limit; 423 draw_limit;
427 scheduler_settings.impl_side_painting = true; 424 scheduler_settings.impl_side_painting = true;
428 StateMachine state(scheduler_settings); 425 StateMachine state(scheduler_settings);
429 SET_UP_STATE(state) 426 SET_UP_STATE(state)
430 427
431 // Start a commit. 428 // Start a commit.
432 state.SetNeedsCommit(); 429 state.SetNeedsCommit();
433 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 430 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
434 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 431 state.OnBeginImplFrame();
435 EXPECT_ACTION_UPDATE_STATE( 432 EXPECT_ACTION_UPDATE_STATE(
436 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 433 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
437 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 434 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
438 EXPECT_TRUE(state.CommitPending()); 435 EXPECT_TRUE(state.CommitPending());
439 436
440 // Then initiate a draw. 437 // Then initiate a draw.
441 state.SetNeedsRedraw(true); 438 state.SetNeedsRedraw(true);
442 state.OnBeginImplFrameDeadline(); 439 state.OnBeginImplFrameDeadline();
443 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 440 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE);
444 EXPECT_ACTION_UPDATE_STATE( 441 EXPECT_ACTION_UPDATE_STATE(
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
477 } 474 }
478 475
479 TEST(SchedulerStateMachineTest, TestFailedDrawIsRetriedInNextBeginImplFrame) { 476 TEST(SchedulerStateMachineTest, TestFailedDrawIsRetriedInNextBeginImplFrame) {
480 SchedulerSettings default_scheduler_settings; 477 SchedulerSettings default_scheduler_settings;
481 StateMachine state(default_scheduler_settings); 478 StateMachine state(default_scheduler_settings);
482 SET_UP_STATE(state) 479 SET_UP_STATE(state)
483 480
484 // Start a draw. 481 // Start a draw.
485 state.SetNeedsRedraw(true); 482 state.SetNeedsRedraw(true);
486 EXPECT_TRUE(state.BeginFrameNeeded()); 483 EXPECT_TRUE(state.BeginFrameNeeded());
487 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 484 state.OnBeginImplFrame();
488 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 485 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE);
489 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 486 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
490 state.OnBeginImplFrameDeadline(); 487 state.OnBeginImplFrameDeadline();
491 EXPECT_TRUE(state.RedrawPending()); 488 EXPECT_TRUE(state.RedrawPending());
492 EXPECT_ACTION_UPDATE_STATE( 489 EXPECT_ACTION_UPDATE_STATE(
493 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 490 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
494 491
495 // Failing the draw for animation checkerboards makes us require a commit. 492 // Failing the draw for animation checkerboards makes us require a commit.
496 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); 493 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS);
497 EXPECT_ACTION_UPDATE_STATE( 494 EXPECT_ACTION_UPDATE_STATE(
498 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 495 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
499 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 496 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
500 EXPECT_TRUE(state.RedrawPending()); 497 EXPECT_TRUE(state.RedrawPending());
501 498
502 // We should not be trying to draw again now, but we have a commit pending. 499 // We should not be trying to draw again now, but we have a commit pending.
503 EXPECT_TRUE(state.BeginFrameNeeded()); 500 EXPECT_TRUE(state.BeginFrameNeeded());
504 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 501 state.OnBeginImplFrame();
505 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 502 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE);
506 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 503 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
507 504
508 // We should try to draw again at the end of the next BeginImplFrame on 505 // We should try to draw again at the end of the next BeginImplFrame on
509 // the impl thread. 506 // the impl thread.
510 state.OnBeginImplFrameDeadline(); 507 state.OnBeginImplFrameDeadline();
511 EXPECT_ACTION_UPDATE_STATE( 508 EXPECT_ACTION_UPDATE_STATE(
512 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 509 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
513 state.DidSwapBuffers(); 510 state.DidSwapBuffers();
514 state.DidSwapBuffersComplete(); 511 state.DidSwapBuffersComplete();
515 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 512 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
516 } 513 }
517 514
518 TEST(SchedulerStateMachineTest, TestDoestDrawTwiceInSameFrame) { 515 TEST(SchedulerStateMachineTest, TestDoestDrawTwiceInSameFrame) {
519 SchedulerSettings default_scheduler_settings; 516 SchedulerSettings default_scheduler_settings;
520 StateMachine state(default_scheduler_settings); 517 StateMachine state(default_scheduler_settings);
521 SET_UP_STATE(state) 518 SET_UP_STATE(state)
522 state.SetNeedsRedraw(true); 519 state.SetNeedsRedraw(true);
523 520
524 // Draw the first frame. 521 // Draw the first frame.
525 EXPECT_TRUE(state.BeginFrameNeeded()); 522 EXPECT_TRUE(state.BeginFrameNeeded());
526 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 523 state.OnBeginImplFrame();
527 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 524 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE);
528 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 525 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
529 526
530 state.OnBeginImplFrameDeadline(); 527 state.OnBeginImplFrameDeadline();
531 EXPECT_ACTION_UPDATE_STATE( 528 EXPECT_ACTION_UPDATE_STATE(
532 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 529 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
533 state.DidSwapBuffers(); 530 state.DidSwapBuffers();
534 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); 531 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS);
535 state.DidSwapBuffersComplete(); 532 state.DidSwapBuffersComplete();
536 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 533 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
537 534
538 // Before the next BeginImplFrame, set needs redraw again. 535 // Before the next BeginImplFrame, set needs redraw again.
539 // This should not redraw until the next BeginImplFrame. 536 // This should not redraw until the next BeginImplFrame.
540 state.SetNeedsRedraw(true); 537 state.SetNeedsRedraw(true);
541 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 538 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
542 539
543 // Move to another frame. This should now draw. 540 // Move to another frame. This should now draw.
544 EXPECT_TRUE(state.BeginFrameNeeded()); 541 EXPECT_TRUE(state.BeginFrameNeeded());
545 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 542 state.OnBeginImplFrame();
546 543
547 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 544 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE);
548 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 545 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
549 546
550 state.OnBeginImplFrameDeadline(); 547 state.OnBeginImplFrameDeadline();
551 EXPECT_ACTION_UPDATE_STATE( 548 EXPECT_ACTION_UPDATE_STATE(
552 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 549 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
553 state.DidSwapBuffers(); 550 state.DidSwapBuffers();
554 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); 551 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS);
555 state.DidSwapBuffersComplete(); 552 state.DidSwapBuffersComplete();
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
670 // There shouldn't be any drawing regardless of BeginImplFrame. 667 // There shouldn't be any drawing regardless of BeginImplFrame.
671 for (size_t j = 0; j < 2; ++j) { 668 for (size_t j = 0; j < 2; ++j) {
672 StateMachine state(default_scheduler_settings); 669 StateMachine state(default_scheduler_settings);
673 state.SetCanStart(); 670 state.SetCanStart();
674 state.UpdateState(state.NextAction()); 671 state.UpdateState(state.NextAction());
675 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 672 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
676 state.SetCommitState(all_commit_states[i]); 673 state.SetCommitState(all_commit_states[i]);
677 state.SetVisible(false); 674 state.SetVisible(false);
678 state.SetNeedsRedraw(true); 675 state.SetNeedsRedraw(true);
679 if (j == 1) 676 if (j == 1)
680 state.OnBeginImplFrame( 677 state.OnBeginImplFrame();
681 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE));
682 678
683 state.SetCanDraw(false); 679 state.SetCanDraw(false);
684 EXPECT_NE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE, 680 EXPECT_NE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE,
685 state.NextAction()); 681 state.NextAction());
686 } 682 }
687 } 683 }
688 } 684 }
689 685
690 TEST(SchedulerStateMachineTest, 686 TEST(SchedulerStateMachineTest,
691 TestCanRedrawWithWaitingForFirstDrawMakesProgress) { 687 TestCanRedrawWithWaitingForFirstDrawMakesProgress) {
692 SchedulerSettings default_scheduler_settings; 688 SchedulerSettings default_scheduler_settings;
693 StateMachine state(default_scheduler_settings); 689 StateMachine state(default_scheduler_settings);
694 state.SetCanStart(); 690 state.SetCanStart();
695 state.UpdateState(state.NextAction()); 691 state.UpdateState(state.NextAction());
696 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 692 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
697 693
698 state.SetActiveTreeNeedsFirstDraw(true); 694 state.SetActiveTreeNeedsFirstDraw(true);
699 state.SetNeedsCommit(); 695 state.SetNeedsCommit();
700 state.SetNeedsRedraw(true); 696 state.SetNeedsRedraw(true);
701 state.SetVisible(true); 697 state.SetVisible(true);
702 state.SetCanDraw(false); 698 state.SetCanDraw(false);
703 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 699 state.OnBeginImplFrame();
704 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 700 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE);
705 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT); 701 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT);
706 EXPECT_ACTION_UPDATE_STATE( 702 EXPECT_ACTION_UPDATE_STATE(
707 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 703 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
708 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 704 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
709 state.NotifyBeginMainFrameStarted(); 705 state.NotifyBeginMainFrameStarted();
710 state.NotifyReadyToCommit(); 706 state.NotifyReadyToCommit();
711 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 707 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
712 state.OnBeginImplFrameDeadline(); 708 state.OnBeginImplFrameDeadline();
713 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 709 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE);
714 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT); 710 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT);
715 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 711 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
716 } 712 }
717 713
718 TEST(SchedulerStateMachineTest, TestSetNeedsCommitIsNotLost) { 714 TEST(SchedulerStateMachineTest, TestSetNeedsCommitIsNotLost) {
719 SchedulerSettings scheduler_settings; 715 SchedulerSettings scheduler_settings;
720 StateMachine state(scheduler_settings); 716 StateMachine state(scheduler_settings);
721 SET_UP_STATE(state) 717 SET_UP_STATE(state)
722 state.SetNeedsCommit(); 718 state.SetNeedsCommit();
723 719
724 EXPECT_TRUE(state.BeginFrameNeeded()); 720 EXPECT_TRUE(state.BeginFrameNeeded());
725 721
726 // Begin the frame. 722 // Begin the frame.
727 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 723 state.OnBeginImplFrame();
728 EXPECT_ACTION_UPDATE_STATE( 724 EXPECT_ACTION_UPDATE_STATE(
729 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 725 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
730 EXPECT_COMMIT_STATE( 726 EXPECT_COMMIT_STATE(
731 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT); 727 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT);
732 728
733 // Now, while the frame is in progress, set another commit. 729 // Now, while the frame is in progress, set another commit.
734 state.SetNeedsCommit(); 730 state.SetNeedsCommit();
735 EXPECT_TRUE(state.NeedsCommit()); 731 EXPECT_TRUE(state.NeedsCommit());
736 732
737 // Let the frame finish. 733 // Let the frame finish.
(...skipping 13 matching lines...) Expand all
751 747
752 state.OnBeginImplFrameDeadline(); 748 state.OnBeginImplFrameDeadline();
753 EXPECT_IMPL_FRAME_STATE( 749 EXPECT_IMPL_FRAME_STATE(
754 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE); 750 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE);
755 EXPECT_ACTION(SchedulerStateMachine::ACTION_COMMIT); 751 EXPECT_ACTION(SchedulerStateMachine::ACTION_COMMIT);
756 752
757 state.OnBeginImplFrameIdle(); 753 state.OnBeginImplFrameIdle();
758 EXPECT_IMPL_FRAME_STATE(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE); 754 EXPECT_IMPL_FRAME_STATE(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE);
759 EXPECT_ACTION(SchedulerStateMachine::ACTION_COMMIT); 755 EXPECT_ACTION(SchedulerStateMachine::ACTION_COMMIT);
760 756
761 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 757 state.OnBeginImplFrame();
762 EXPECT_IMPL_FRAME_STATE( 758 EXPECT_IMPL_FRAME_STATE(
763 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING); 759 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING);
764 EXPECT_ACTION(SchedulerStateMachine::ACTION_COMMIT); 760 EXPECT_ACTION(SchedulerStateMachine::ACTION_COMMIT);
765 761
766 // Finish the commit, then make sure we start the next commit immediately 762 // Finish the commit, then make sure we start the next commit immediately
767 // and draw on the next BeginImplFrame. 763 // and draw on the next BeginImplFrame.
768 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 764 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
769 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 765 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE);
770 EXPECT_ACTION_UPDATE_STATE( 766 EXPECT_ACTION_UPDATE_STATE(
771 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 767 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
(...skipping 12 matching lines...) Expand all
784 780
785 TEST(SchedulerStateMachineTest, TestFullCycle) { 781 TEST(SchedulerStateMachineTest, TestFullCycle) {
786 SchedulerSettings default_scheduler_settings; 782 SchedulerSettings default_scheduler_settings;
787 StateMachine state(default_scheduler_settings); 783 StateMachine state(default_scheduler_settings);
788 SET_UP_STATE(state) 784 SET_UP_STATE(state)
789 785
790 // Start clean and set commit. 786 // Start clean and set commit.
791 state.SetNeedsCommit(); 787 state.SetNeedsCommit();
792 788
793 // Begin the frame. 789 // Begin the frame.
794 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 790 state.OnBeginImplFrame();
795 EXPECT_ACTION_UPDATE_STATE( 791 EXPECT_ACTION_UPDATE_STATE(
796 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 792 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
797 EXPECT_COMMIT_STATE( 793 EXPECT_COMMIT_STATE(
798 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT); 794 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT);
799 EXPECT_FALSE(state.NeedsCommit()); 795 EXPECT_FALSE(state.NeedsCommit());
800 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 796 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
801 797
802 // Tell the scheduler the frame finished. 798 // Tell the scheduler the frame finished.
803 state.NotifyBeginMainFrameStarted(); 799 state.NotifyBeginMainFrameStarted();
804 state.NotifyReadyToCommit(); 800 state.NotifyReadyToCommit();
(...skipping 25 matching lines...) Expand all
830 TEST(SchedulerStateMachineTest, TestFullCycleWithMainThreadLowLatencyMode) { 826 TEST(SchedulerStateMachineTest, TestFullCycleWithMainThreadLowLatencyMode) {
831 SchedulerSettings scheduler_settings; 827 SchedulerSettings scheduler_settings;
832 scheduler_settings.main_thread_should_always_be_low_latency = true; 828 scheduler_settings.main_thread_should_always_be_low_latency = true;
833 StateMachine state(scheduler_settings); 829 StateMachine state(scheduler_settings);
834 SET_UP_STATE(state) 830 SET_UP_STATE(state)
835 831
836 // Start clean and set commit. 832 // Start clean and set commit.
837 state.SetNeedsCommit(); 833 state.SetNeedsCommit();
838 834
839 // Begin the frame. 835 // Begin the frame.
840 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 836 state.OnBeginImplFrame();
841 EXPECT_ACTION_UPDATE_STATE( 837 EXPECT_ACTION_UPDATE_STATE(
842 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 838 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
843 EXPECT_COMMIT_STATE( 839 EXPECT_COMMIT_STATE(
844 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT); 840 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT);
845 EXPECT_FALSE(state.NeedsCommit()); 841 EXPECT_FALSE(state.NeedsCommit());
846 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 842 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
847 843
848 // Tell the scheduler the frame finished. 844 // Tell the scheduler the frame finished.
849 state.NotifyBeginMainFrameStarted(); 845 state.NotifyBeginMainFrameStarted();
850 state.NotifyReadyToCommit(); 846 state.NotifyReadyToCommit();
851 EXPECT_COMMIT_STATE(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT); 847 EXPECT_COMMIT_STATE(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT);
852 848
853 // Commit. 849 // Commit.
854 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 850 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
855 EXPECT_TRUE(state.active_tree_needs_first_draw()); 851 EXPECT_TRUE(state.active_tree_needs_first_draw());
856 EXPECT_TRUE(state.needs_redraw()); 852 EXPECT_TRUE(state.needs_redraw());
857 853
858 // Now commit should wait for draw. 854 // Now commit should wait for draw.
859 EXPECT_COMMIT_STATE(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_DRAW); 855 EXPECT_COMMIT_STATE(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_DRAW);
860 856
861 // Swap throttled. Do not draw. 857 // Swap throttled. Do not draw.
862 state.DidSwapBuffers(); 858 state.DidSwapBuffers();
863 state.OnBeginImplFrameDeadline(); 859 state.OnBeginImplFrameDeadline();
864 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 860 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE);
865 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 861 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
866 state.DidSwapBuffersComplete(); 862 state.DidSwapBuffersComplete();
867 863
868 // Haven't draw since last commit, do not begin new main frame. 864 // Haven't draw since last commit, do not begin new main frame.
869 state.SetNeedsCommit(); 865 state.SetNeedsCommit();
870 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 866 state.OnBeginImplFrame();
871 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 867 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE);
872 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 868 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
873 869
874 // At BeginImplFrame deadline, draw. 870 // At BeginImplFrame deadline, draw.
875 state.OnBeginImplFrameDeadline(); 871 state.OnBeginImplFrameDeadline();
876 EXPECT_ACTION_UPDATE_STATE( 872 EXPECT_ACTION_UPDATE_STATE(
877 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 873 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
878 state.DidSwapBuffers(); 874 state.DidSwapBuffers();
879 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); 875 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS);
880 state.DidSwapBuffersComplete(); 876 state.DidSwapBuffersComplete();
(...skipping 10 matching lines...) Expand all
891 SchedulerSettings scheduler_settings; 887 SchedulerSettings scheduler_settings;
892 scheduler_settings.main_thread_should_always_be_low_latency = true; 888 scheduler_settings.main_thread_should_always_be_low_latency = true;
893 scheduler_settings.impl_side_painting = true; 889 scheduler_settings.impl_side_painting = true;
894 StateMachine state(scheduler_settings); 890 StateMachine state(scheduler_settings);
895 SET_UP_STATE(state) 891 SET_UP_STATE(state)
896 892
897 // Start clean and set commit. 893 // Start clean and set commit.
898 state.SetNeedsCommit(); 894 state.SetNeedsCommit();
899 895
900 // Begin the frame. 896 // Begin the frame.
901 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 897 state.OnBeginImplFrame();
902 EXPECT_ACTION_UPDATE_STATE( 898 EXPECT_ACTION_UPDATE_STATE(
903 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 899 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
904 EXPECT_COMMIT_STATE( 900 EXPECT_COMMIT_STATE(
905 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT); 901 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT);
906 EXPECT_FALSE(state.NeedsCommit()); 902 EXPECT_FALSE(state.NeedsCommit());
907 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 903 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
908 904
909 // Tell the scheduler the frame finished. 905 // Tell the scheduler the frame finished.
910 state.NotifyBeginMainFrameStarted(); 906 state.NotifyBeginMainFrameStarted();
911 state.NotifyReadyToCommit(); 907 state.NotifyReadyToCommit();
(...skipping 10 matching lines...) Expand all
922 // frame, and still block BeginMainFrame. 918 // frame, and still block BeginMainFrame.
923 state.SetNeedsRedraw(true); 919 state.SetNeedsRedraw(true);
924 state.SetNeedsCommit(); 920 state.SetNeedsCommit();
925 state.OnBeginImplFrameDeadline(); 921 state.OnBeginImplFrameDeadline();
926 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 922 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE);
927 EXPECT_ACTION_UPDATE_STATE( 923 EXPECT_ACTION_UPDATE_STATE(
928 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 924 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
929 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 925 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
930 926
931 // Cannot BeginMainFrame yet since last commit is not yet activated and drawn. 927 // Cannot BeginMainFrame yet since last commit is not yet activated and drawn.
932 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 928 state.OnBeginImplFrame();
933 EXPECT_COMMIT_STATE( 929 EXPECT_COMMIT_STATE(
934 SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_ACTIVATION); 930 SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_ACTIVATION);
935 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 931 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
936 932
937 // Now activate sync tree. 933 // Now activate sync tree.
938 state.NotifyReadyToActivate(); 934 state.NotifyReadyToActivate();
939 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); 935 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE);
940 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 936 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
941 EXPECT_TRUE(state.active_tree_needs_first_draw()); 937 EXPECT_TRUE(state.active_tree_needs_first_draw());
942 EXPECT_TRUE(state.needs_redraw()); 938 EXPECT_TRUE(state.needs_redraw());
943 EXPECT_COMMIT_STATE(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_DRAW); 939 EXPECT_COMMIT_STATE(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_DRAW);
944 940
945 // Swap throttled. Do not draw. 941 // Swap throttled. Do not draw.
946 state.DidSwapBuffers(); 942 state.DidSwapBuffers();
947 state.OnBeginImplFrameDeadline(); 943 state.OnBeginImplFrameDeadline();
948 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 944 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE);
949 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 945 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
950 state.DidSwapBuffersComplete(); 946 state.DidSwapBuffersComplete();
951 947
952 // Haven't draw since last commit, do not begin new main frame. 948 // Haven't draw since last commit, do not begin new main frame.
953 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 949 state.OnBeginImplFrame();
954 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 950 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE);
955 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 951 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
956 952
957 // At BeginImplFrame deadline, draw. This draws unblocks BeginMainFrame. 953 // At BeginImplFrame deadline, draw. This draws unblocks BeginMainFrame.
958 state.OnBeginImplFrameDeadline(); 954 state.OnBeginImplFrameDeadline();
959 EXPECT_ACTION_UPDATE_STATE( 955 EXPECT_ACTION_UPDATE_STATE(
960 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 956 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
961 state.DidSwapBuffers(); 957 state.DidSwapBuffers();
962 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); 958 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS);
963 state.DidSwapBuffersComplete(); 959 state.DidSwapBuffersComplete();
964 960
965 // Now will be able to start main frame. 961 // Now will be able to start main frame.
966 EXPECT_COMMIT_STATE(SchedulerStateMachine::COMMIT_STATE_IDLE); 962 EXPECT_COMMIT_STATE(SchedulerStateMachine::COMMIT_STATE_IDLE);
967 EXPECT_FALSE(state.needs_redraw()); 963 EXPECT_FALSE(state.needs_redraw());
968 EXPECT_ACTION_UPDATE_STATE( 964 EXPECT_ACTION_UPDATE_STATE(
969 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 965 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
970 } 966 }
971 967
972 TEST(SchedulerStateMachineTest, TestFullCycleWithCommitRequestInbetween) { 968 TEST(SchedulerStateMachineTest, TestFullCycleWithCommitRequestInbetween) {
973 SchedulerSettings default_scheduler_settings; 969 SchedulerSettings default_scheduler_settings;
974 StateMachine state(default_scheduler_settings); 970 StateMachine state(default_scheduler_settings);
975 SET_UP_STATE(state) 971 SET_UP_STATE(state)
976 972
977 // Start clean and set commit. 973 // Start clean and set commit.
978 state.SetNeedsCommit(); 974 state.SetNeedsCommit();
979 975
980 // Begin the frame. 976 // Begin the frame.
981 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 977 state.OnBeginImplFrame();
982 EXPECT_ACTION_UPDATE_STATE( 978 EXPECT_ACTION_UPDATE_STATE(
983 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 979 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
984 EXPECT_COMMIT_STATE( 980 EXPECT_COMMIT_STATE(
985 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT); 981 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT);
986 EXPECT_FALSE(state.NeedsCommit()); 982 EXPECT_FALSE(state.NeedsCommit());
987 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 983 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
988 984
989 // Request another commit while the commit is in flight. 985 // Request another commit while the commit is in flight.
990 state.SetNeedsCommit(); 986 state.SetNeedsCommit();
991 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 987 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
(...skipping 19 matching lines...) Expand all
1011 state.DidSwapBuffers(); 1007 state.DidSwapBuffers();
1012 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); 1008 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS);
1013 state.DidSwapBuffersComplete(); 1009 state.DidSwapBuffersComplete();
1014 1010
1015 // Should be synchronized, no draw needed, no action needed. 1011 // Should be synchronized, no draw needed, no action needed.
1016 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1012 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1017 EXPECT_COMMIT_STATE(SchedulerStateMachine::COMMIT_STATE_IDLE); 1013 EXPECT_COMMIT_STATE(SchedulerStateMachine::COMMIT_STATE_IDLE);
1018 EXPECT_FALSE(state.needs_redraw()); 1014 EXPECT_FALSE(state.needs_redraw());
1019 1015
1020 // Next BeginImplFrame should initiate second commit. 1016 // Next BeginImplFrame should initiate second commit.
1021 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 1017 state.OnBeginImplFrame();
1022 EXPECT_ACTION_UPDATE_STATE( 1018 EXPECT_ACTION_UPDATE_STATE(
1023 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1019 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
1024 } 1020 }
1025 1021
1026 TEST(SchedulerStateMachineTest, TestRequestCommitInvisible) { 1022 TEST(SchedulerStateMachineTest, TestRequestCommitInvisible) {
1027 SchedulerSettings default_scheduler_settings; 1023 SchedulerSettings default_scheduler_settings;
1028 StateMachine state(default_scheduler_settings); 1024 StateMachine state(default_scheduler_settings);
1029 state.SetCanStart(); 1025 state.SetCanStart();
1030 state.UpdateState(state.NextAction()); 1026 state.UpdateState(state.NextAction());
1031 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 1027 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
1032 state.SetNeedsCommit(); 1028 state.SetNeedsCommit();
1033 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1029 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1034 } 1030 }
1035 1031
1036 // See ThreadProxy::BeginMainFrame "EarlyOut_NotVisible" / 1032 // See ThreadProxy::BeginMainFrame "EarlyOut_NotVisible" /
1037 // "EarlyOut_OutputSurfaceLost" cases. 1033 // "EarlyOut_OutputSurfaceLost" cases.
1038 TEST(SchedulerStateMachineTest, TestAbortBeginMainFrameBecauseInvisible) { 1034 TEST(SchedulerStateMachineTest, TestAbortBeginMainFrameBecauseInvisible) {
1039 SchedulerSettings default_scheduler_settings; 1035 SchedulerSettings default_scheduler_settings;
1040 StateMachine state(default_scheduler_settings); 1036 StateMachine state(default_scheduler_settings);
1041 SET_UP_STATE(state) 1037 SET_UP_STATE(state)
1042 1038
1043 // Start clean and set commit. 1039 // Start clean and set commit.
1044 state.SetNeedsCommit(); 1040 state.SetNeedsCommit();
1045 1041
1046 // Begin the frame while visible. 1042 // Begin the frame while visible.
1047 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 1043 state.OnBeginImplFrame();
1048 EXPECT_ACTION_UPDATE_STATE( 1044 EXPECT_ACTION_UPDATE_STATE(
1049 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1045 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
1050 EXPECT_COMMIT_STATE( 1046 EXPECT_COMMIT_STATE(
1051 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT); 1047 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT);
1052 EXPECT_FALSE(state.NeedsCommit()); 1048 EXPECT_FALSE(state.NeedsCommit());
1053 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1049 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1054 1050
1055 // Become invisible and abort BeginMainFrame. 1051 // Become invisible and abort BeginMainFrame.
1056 state.SetVisible(false); 1052 state.SetVisible(false);
1057 state.BeginMainFrameAborted(CommitEarlyOutReason::ABORTED_NOT_VISIBLE); 1053 state.BeginMainFrameAborted(CommitEarlyOutReason::ABORTED_NOT_VISIBLE);
(...skipping 13 matching lines...) Expand all
1071 // Become visible again. 1067 // Become visible again.
1072 state.SetVisible(true); 1068 state.SetVisible(true);
1073 1069
1074 // Although we have aborted on this frame and haven't cancelled the commit 1070 // Although we have aborted on this frame and haven't cancelled the commit
1075 // (i.e. need another), don't send another BeginMainFrame yet. 1071 // (i.e. need another), don't send another BeginMainFrame yet.
1076 EXPECT_COMMIT_STATE(SchedulerStateMachine::COMMIT_STATE_IDLE); 1072 EXPECT_COMMIT_STATE(SchedulerStateMachine::COMMIT_STATE_IDLE);
1077 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); 1073 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE);
1078 EXPECT_TRUE(state.NeedsCommit()); 1074 EXPECT_TRUE(state.NeedsCommit());
1079 1075
1080 // Start a new frame. 1076 // Start a new frame.
1081 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 1077 state.OnBeginImplFrame();
1082 EXPECT_ACTION_UPDATE_STATE( 1078 EXPECT_ACTION_UPDATE_STATE(
1083 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1079 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
1084 1080
1085 // We should be starting the commit now. 1081 // We should be starting the commit now.
1086 EXPECT_COMMIT_STATE( 1082 EXPECT_COMMIT_STATE(
1087 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT); 1083 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT);
1088 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1084 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1089 } 1085 }
1090 1086
1091 // See ThreadProxy::BeginMainFrame "EarlyOut_NoUpdates" case. 1087 // See ThreadProxy::BeginMainFrame "EarlyOut_NoUpdates" case.
1092 TEST(SchedulerStateMachineTest, TestAbortBeginMainFrameBecauseCommitNotNeeded) { 1088 TEST(SchedulerStateMachineTest, TestAbortBeginMainFrameBecauseCommitNotNeeded) {
1093 SchedulerSettings default_scheduler_settings; 1089 SchedulerSettings default_scheduler_settings;
1094 StateMachine state(default_scheduler_settings); 1090 StateMachine state(default_scheduler_settings);
1095 state.SetCanStart(); 1091 state.SetCanStart();
1096 state.UpdateState(state.NextAction()); 1092 state.UpdateState(state.NextAction());
1097 state.DidCreateAndInitializeOutputSurface(); 1093 state.DidCreateAndInitializeOutputSurface();
1098 state.SetVisible(true); 1094 state.SetVisible(true);
1099 state.SetCanDraw(true); 1095 state.SetCanDraw(true);
1100 1096
1101 // Get into a begin frame / commit state. 1097 // Get into a begin frame / commit state.
1102 state.SetNeedsCommit(); 1098 state.SetNeedsCommit();
1103 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 1099 state.OnBeginImplFrame();
1104 EXPECT_ACTION_UPDATE_STATE( 1100 EXPECT_ACTION_UPDATE_STATE(
1105 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1101 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
1106 EXPECT_COMMIT_STATE( 1102 EXPECT_COMMIT_STATE(
1107 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT); 1103 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT);
1108 EXPECT_FALSE(state.NeedsCommit()); 1104 EXPECT_FALSE(state.NeedsCommit());
1109 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); 1105 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE);
1110 1106
1111 // Abort the commit, true means that the BeginMainFrame was sent but there 1107 // Abort the commit, true means that the BeginMainFrame was sent but there
1112 // was no work to do on the main thread. 1108 // was no work to do on the main thread.
1113 state.BeginMainFrameAborted(CommitEarlyOutReason::FINISHED_NO_UPDATES); 1109 state.BeginMainFrameAborted(CommitEarlyOutReason::FINISHED_NO_UPDATES);
1114 1110
1115 // NeedsCommit should now be false because the commit was actually handled. 1111 // NeedsCommit should now be false because the commit was actually handled.
1116 EXPECT_FALSE(state.NeedsCommit()); 1112 EXPECT_FALSE(state.NeedsCommit());
1117 1113
1118 // Even though the commit was aborted, we still expect to draw the new frame. 1114 // Even though the commit was aborted, we still expect to draw the new frame.
1119 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 1115 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE);
1120 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1116 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1121 state.OnBeginImplFrameDeadline(); 1117 state.OnBeginImplFrameDeadline();
1122 EXPECT_ACTION_UPDATE_STATE( 1118 EXPECT_ACTION_UPDATE_STATE(
1123 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 1119 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
1124 state.DidSwapBuffers(); 1120 state.DidSwapBuffers();
1125 state.DidSwapBuffersComplete(); 1121 state.DidSwapBuffersComplete();
1126 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1122 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1127 1123
1128 // Verify another commit doesn't start on another frame either. 1124 // Verify another commit doesn't start on another frame either.
1129 EXPECT_FALSE(state.NeedsCommit()); 1125 EXPECT_FALSE(state.NeedsCommit());
1130 EXPECT_COMMIT_STATE(SchedulerStateMachine::COMMIT_STATE_IDLE); 1126 EXPECT_COMMIT_STATE(SchedulerStateMachine::COMMIT_STATE_IDLE);
1131 1127
1132 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 1128 state.OnBeginImplFrame();
1133 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1129 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1134 state.OnBeginImplFrameDeadline(); 1130 state.OnBeginImplFrameDeadline();
1135 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1131 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1136 1132
1137 // Verify another commit can start if requested, though. 1133 // Verify another commit can start if requested, though.
1138 state.SetNeedsCommit(); 1134 state.SetNeedsCommit();
1139 EXPECT_COMMIT_STATE(SchedulerStateMachine::COMMIT_STATE_IDLE); 1135 EXPECT_COMMIT_STATE(SchedulerStateMachine::COMMIT_STATE_IDLE);
1140 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 1136 state.OnBeginImplFrame();
1141 EXPECT_ACTION(SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1137 EXPECT_ACTION(SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
1142 } 1138 }
1143 1139
1144 TEST(SchedulerStateMachineTest, TestFirstContextCreation) { 1140 TEST(SchedulerStateMachineTest, TestFirstContextCreation) {
1145 SchedulerSettings default_scheduler_settings; 1141 SchedulerSettings default_scheduler_settings;
1146 StateMachine state(default_scheduler_settings); 1142 StateMachine state(default_scheduler_settings);
1147 state.SetCanStart(); 1143 state.SetCanStart();
1148 state.SetVisible(true); 1144 state.SetVisible(true);
1149 state.SetCanDraw(true); 1145 state.SetCanDraw(true);
1150 1146
1151 EXPECT_ACTION_UPDATE_STATE( 1147 EXPECT_ACTION_UPDATE_STATE(
1152 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); 1148 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION);
1153 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 1149 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
1154 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1150 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1155 1151
1156 // Check that the first init does not SetNeedsCommit. 1152 // Check that the first init does not SetNeedsCommit.
1157 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 1153 state.OnBeginImplFrame();
1158 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1154 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1159 state.OnBeginImplFrameDeadline(); 1155 state.OnBeginImplFrameDeadline();
1160 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1156 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1161 1157
1162 // Check that a needs commit initiates a BeginMainFrame. 1158 // Check that a needs commit initiates a BeginMainFrame.
1163 state.SetNeedsCommit(); 1159 state.SetNeedsCommit();
1164 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 1160 state.OnBeginImplFrame();
1165 EXPECT_ACTION_UPDATE_STATE( 1161 EXPECT_ACTION_UPDATE_STATE(
1166 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1162 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
1167 } 1163 }
1168 1164
1169 TEST(SchedulerStateMachineTest, TestContextLostWhenCompletelyIdle) { 1165 TEST(SchedulerStateMachineTest, TestContextLostWhenCompletelyIdle) {
1170 SchedulerSettings default_scheduler_settings; 1166 SchedulerSettings default_scheduler_settings;
1171 StateMachine state(default_scheduler_settings); 1167 StateMachine state(default_scheduler_settings);
1172 SET_UP_STATE(state) 1168 SET_UP_STATE(state)
1173 1169
1174 EXPECT_NE(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION, 1170 EXPECT_NE(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION,
1175 state.NextAction()); 1171 state.NextAction());
1176 state.DidLoseOutputSurface(); 1172 state.DidLoseOutputSurface();
1177 1173
1178 EXPECT_ACTION(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); 1174 EXPECT_ACTION(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION);
1179 state.UpdateState(state.NextAction()); 1175 state.UpdateState(state.NextAction());
1180 1176
1181 // Once context recreation begins, nothing should happen. 1177 // Once context recreation begins, nothing should happen.
1182 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1178 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1183 1179
1184 // Recreate the context. 1180 // Recreate the context.
1185 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 1181 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
1186 1182
1187 // When the context is recreated, we should begin a commit. 1183 // When the context is recreated, we should begin a commit.
1188 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 1184 state.OnBeginImplFrame();
1189 EXPECT_ACTION_UPDATE_STATE( 1185 EXPECT_ACTION_UPDATE_STATE(
1190 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1186 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
1191 } 1187 }
1192 1188
1193 TEST(SchedulerStateMachineTest, 1189 TEST(SchedulerStateMachineTest,
1194 TestContextLostWhenIdleAndCommitRequestedWhileRecreating) { 1190 TestContextLostWhenIdleAndCommitRequestedWhileRecreating) {
1195 SchedulerSettings default_scheduler_settings; 1191 SchedulerSettings default_scheduler_settings;
1196 // We use impl side painting because it's the more complicated version. 1192 // We use impl side painting because it's the more complicated version.
1197 default_scheduler_settings.impl_side_painting = true; 1193 default_scheduler_settings.impl_side_painting = true;
1198 StateMachine state(default_scheduler_settings); 1194 StateMachine state(default_scheduler_settings);
1199 SET_UP_STATE(state) 1195 SET_UP_STATE(state)
1200 1196
1201 EXPECT_NE(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION, 1197 EXPECT_NE(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION,
1202 state.NextAction()); 1198 state.NextAction());
1203 state.DidLoseOutputSurface(); 1199 state.DidLoseOutputSurface();
1204 EXPECT_EQ(state.output_surface_state(), 1200 EXPECT_EQ(state.output_surface_state(),
1205 SchedulerStateMachine::OUTPUT_SURFACE_LOST); 1201 SchedulerStateMachine::OUTPUT_SURFACE_LOST);
1206 1202
1207 EXPECT_ACTION_UPDATE_STATE( 1203 EXPECT_ACTION_UPDATE_STATE(
1208 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); 1204 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION);
1209 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1205 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1210 1206
1211 // Once context recreation begins, nothing should happen. 1207 // Once context recreation begins, nothing should happen.
1212 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 1208 state.OnBeginImplFrame();
1213 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1209 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1214 state.OnBeginImplFrameDeadline(); 1210 state.OnBeginImplFrameDeadline();
1215 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1211 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1216 1212
1217 // While context is recreating, commits shouldn't begin. 1213 // While context is recreating, commits shouldn't begin.
1218 state.SetNeedsCommit(); 1214 state.SetNeedsCommit();
1219 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 1215 state.OnBeginImplFrame();
1220 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1216 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1221 state.OnBeginImplFrameDeadline(); 1217 state.OnBeginImplFrameDeadline();
1222 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1218 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1223 1219
1224 // Recreate the context 1220 // Recreate the context
1225 state.DidCreateAndInitializeOutputSurface(); 1221 state.DidCreateAndInitializeOutputSurface();
1226 EXPECT_EQ(state.output_surface_state(), 1222 EXPECT_EQ(state.output_surface_state(),
1227 SchedulerStateMachine::OUTPUT_SURFACE_WAITING_FOR_FIRST_COMMIT); 1223 SchedulerStateMachine::OUTPUT_SURFACE_WAITING_FOR_FIRST_COMMIT);
1228 EXPECT_FALSE(state.RedrawPending()); 1224 EXPECT_FALSE(state.RedrawPending());
1229 1225
1230 // When the context is recreated, we wait until the next BeginImplFrame 1226 // When the context is recreated, we wait until the next BeginImplFrame
1231 // before starting. 1227 // before starting.
1232 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1228 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1233 1229
1234 // When the BeginFrame comes in we should begin a commit 1230 // When the BeginFrame comes in we should begin a commit
1235 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 1231 state.OnBeginImplFrame();
1236 EXPECT_ACTION_UPDATE_STATE( 1232 EXPECT_ACTION_UPDATE_STATE(
1237 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1233 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
1238 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1234 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1239 EXPECT_COMMIT_STATE( 1235 EXPECT_COMMIT_STATE(
1240 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT); 1236 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT);
1241 1237
1242 // Until that commit finishes, we shouldn't be drawing or animate. 1238 // Until that commit finishes, we shouldn't be drawing or animate.
1243 state.OnBeginImplFrameDeadline(); 1239 state.OnBeginImplFrameDeadline();
1244 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1240 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1245 1241
1246 // Finish the commit, which should make the surface active. 1242 // Finish the commit, which should make the surface active.
1247 state.NotifyBeginMainFrameStarted(); 1243 state.NotifyBeginMainFrameStarted();
1248 state.NotifyReadyToCommit(); 1244 state.NotifyReadyToCommit();
1249 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 1245 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
1250 EXPECT_EQ(state.output_surface_state(), 1246 EXPECT_EQ(state.output_surface_state(),
1251 SchedulerStateMachine::OUTPUT_SURFACE_WAITING_FOR_FIRST_ACTIVATION); 1247 SchedulerStateMachine::OUTPUT_SURFACE_WAITING_FOR_FIRST_ACTIVATION);
1252 state.NotifyReadyToActivate(); 1248 state.NotifyReadyToActivate();
1253 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); 1249 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE);
1254 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1250 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1255 EXPECT_EQ(state.output_surface_state(), 1251 EXPECT_EQ(state.output_surface_state(),
1256 SchedulerStateMachine::OUTPUT_SURFACE_ACTIVE); 1252 SchedulerStateMachine::OUTPUT_SURFACE_ACTIVE);
1257 1253
1258 // Finishing the first commit after initializing an output surface should 1254 // Finishing the first commit after initializing an output surface should
1259 // automatically cause a redraw. 1255 // automatically cause a redraw.
1260 EXPECT_TRUE(state.RedrawPending()); 1256 EXPECT_TRUE(state.RedrawPending());
1261 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 1257 state.OnBeginImplFrame();
1262 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 1258 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE);
1263 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1259 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1264 state.OnBeginImplFrameDeadline(); 1260 state.OnBeginImplFrameDeadline();
1265 EXPECT_ACTION_UPDATE_STATE( 1261 EXPECT_ACTION_UPDATE_STATE(
1266 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 1262 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
1267 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1263 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1268 EXPECT_FALSE(state.RedrawPending()); 1264 EXPECT_FALSE(state.RedrawPending());
1269 1265
1270 // Next frame as no work to do. 1266 // Next frame as no work to do.
1271 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 1267 state.OnBeginImplFrame();
1272 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1268 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1273 state.OnBeginImplFrameDeadline(); 1269 state.OnBeginImplFrameDeadline();
1274 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1270 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1275 1271
1276 // Once the context is recreated, whether we draw should be based on 1272 // Once the context is recreated, whether we draw should be based on
1277 // SetCanDraw if waiting on first draw after activate. 1273 // SetCanDraw if waiting on first draw after activate.
1278 state.SetNeedsRedraw(true); 1274 state.SetNeedsRedraw(true);
1279 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 1275 state.OnBeginImplFrame();
1280 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 1276 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE);
1281 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1277 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1282 state.OnBeginImplFrameDeadline(); 1278 state.OnBeginImplFrameDeadline();
1283 EXPECT_ACTION(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 1279 EXPECT_ACTION(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
1284 state.SetCanDraw(false); 1280 state.SetCanDraw(false);
1285 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); 1281 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE);
1286 state.SetCanDraw(true); 1282 state.SetCanDraw(true);
1287 EXPECT_ACTION_UPDATE_STATE( 1283 EXPECT_ACTION_UPDATE_STATE(
1288 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 1284 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
1289 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1285 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1290 1286
1291 // Once the context is recreated, whether we draw should be based on 1287 // Once the context is recreated, whether we draw should be based on
1292 // SetCanDraw if waiting on first draw after activate. 1288 // SetCanDraw if waiting on first draw after activate.
1293 state.SetNeedsRedraw(true); 1289 state.SetNeedsRedraw(true);
1294 state.SetNeedsCommit(); 1290 state.SetNeedsCommit();
1295 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 1291 state.OnBeginImplFrame();
1296 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 1292 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE);
1297 EXPECT_ACTION_UPDATE_STATE( 1293 EXPECT_ACTION_UPDATE_STATE(
1298 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1294 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
1299 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1295 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1300 // Activate so we need the first draw 1296 // Activate so we need the first draw
1301 state.NotifyBeginMainFrameStarted(); 1297 state.NotifyBeginMainFrameStarted();
1302 state.NotifyReadyToCommit(); 1298 state.NotifyReadyToCommit();
1303 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 1299 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
1304 state.NotifyReadyToActivate(); 1300 state.NotifyReadyToActivate();
1305 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); 1301 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE);
(...skipping 13 matching lines...) Expand all
1319 TEST(SchedulerStateMachineTest, TestContextLostWhileCommitInProgress) { 1315 TEST(SchedulerStateMachineTest, TestContextLostWhileCommitInProgress) {
1320 SchedulerSettings scheduler_settings; 1316 SchedulerSettings scheduler_settings;
1321 StateMachine state(scheduler_settings); 1317 StateMachine state(scheduler_settings);
1322 SET_UP_STATE(state) 1318 SET_UP_STATE(state)
1323 1319
1324 // Get a commit in flight. 1320 // Get a commit in flight.
1325 state.SetNeedsCommit(); 1321 state.SetNeedsCommit();
1326 1322
1327 // Set damage and expect a draw. 1323 // Set damage and expect a draw.
1328 state.SetNeedsRedraw(true); 1324 state.SetNeedsRedraw(true);
1329 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 1325 state.OnBeginImplFrame();
1330 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 1326 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE);
1331 EXPECT_ACTION_UPDATE_STATE( 1327 EXPECT_ACTION_UPDATE_STATE(
1332 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1328 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
1333 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1329 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1334 state.OnBeginImplFrameDeadline(); 1330 state.OnBeginImplFrameDeadline();
1335 EXPECT_ACTION_UPDATE_STATE( 1331 EXPECT_ACTION_UPDATE_STATE(
1336 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 1332 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
1337 state.DidSwapBuffers(); 1333 state.DidSwapBuffers();
1338 state.DidSwapBuffersComplete(); 1334 state.DidSwapBuffersComplete();
1339 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1335 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
(...skipping 12 matching lines...) Expand all
1352 1348
1353 // We will abort the draw when the output surface is lost if we are 1349 // We will abort the draw when the output surface is lost if we are
1354 // waiting for the first draw to unblock the main thread. 1350 // waiting for the first draw to unblock the main thread.
1355 EXPECT_TRUE(state.active_tree_needs_first_draw()); 1351 EXPECT_TRUE(state.active_tree_needs_first_draw());
1356 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT); 1352 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT);
1357 1353
1358 // Expect to begin context recreation only in BEGIN_IMPL_FRAME_STATE_IDLE 1354 // Expect to begin context recreation only in BEGIN_IMPL_FRAME_STATE_IDLE
1359 EXPECT_IMPL_FRAME_STATE(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE); 1355 EXPECT_IMPL_FRAME_STATE(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE);
1360 EXPECT_ACTION(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); 1356 EXPECT_ACTION(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION);
1361 1357
1362 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 1358 state.OnBeginImplFrame();
1363 EXPECT_IMPL_FRAME_STATE( 1359 EXPECT_IMPL_FRAME_STATE(
1364 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING); 1360 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING);
1365 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); 1361 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE);
1366 1362
1367 state.OnBeginImplFrameDeadlinePending(); 1363 state.OnBeginImplFrameDeadlinePending();
1368 EXPECT_IMPL_FRAME_STATE( 1364 EXPECT_IMPL_FRAME_STATE(
1369 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME); 1365 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME);
1370 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); 1366 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE);
1371 1367
1372 state.OnBeginImplFrameDeadline(); 1368 state.OnBeginImplFrameDeadline();
1373 EXPECT_IMPL_FRAME_STATE( 1369 EXPECT_IMPL_FRAME_STATE(
1374 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE); 1370 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE);
1375 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); 1371 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE);
1376 } 1372 }
1377 1373
1378 TEST(SchedulerStateMachineTest, 1374 TEST(SchedulerStateMachineTest,
1379 TestContextLostWhileCommitInProgressAndAnotherCommitRequested) { 1375 TestContextLostWhileCommitInProgressAndAnotherCommitRequested) {
1380 SchedulerSettings scheduler_settings; 1376 SchedulerSettings scheduler_settings;
1381 StateMachine state(scheduler_settings); 1377 StateMachine state(scheduler_settings);
1382 SET_UP_STATE(state) 1378 SET_UP_STATE(state)
1383 1379
1384 // Get a commit in flight. 1380 // Get a commit in flight.
1385 state.SetNeedsCommit(); 1381 state.SetNeedsCommit();
1386 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1382 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1387 1383
1388 // Set damage and expect a draw. 1384 // Set damage and expect a draw.
1389 state.SetNeedsRedraw(true); 1385 state.SetNeedsRedraw(true);
1390 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 1386 state.OnBeginImplFrame();
1391 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 1387 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE);
1392 EXPECT_ACTION_UPDATE_STATE( 1388 EXPECT_ACTION_UPDATE_STATE(
1393 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1389 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
1394 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1390 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1395 state.OnBeginImplFrameDeadline(); 1391 state.OnBeginImplFrameDeadline();
1396 EXPECT_ACTION_UPDATE_STATE( 1392 EXPECT_ACTION_UPDATE_STATE(
1397 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 1393 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
1398 state.DidSwapBuffers(); 1394 state.DidSwapBuffers();
1399 state.DidSwapBuffersComplete(); 1395 state.DidSwapBuffersComplete();
1400 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1396 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
(...skipping 12 matching lines...) Expand all
1413 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 1409 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
1414 EXPECT_TRUE(state.active_tree_needs_first_draw()); 1410 EXPECT_TRUE(state.active_tree_needs_first_draw());
1415 1411
1416 // Because the output surface is missing, we expect the draw to abort. 1412 // Because the output surface is missing, we expect the draw to abort.
1417 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT); 1413 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT);
1418 1414
1419 // Expect to begin context recreation only in BEGIN_IMPL_FRAME_STATE_IDLE 1415 // Expect to begin context recreation only in BEGIN_IMPL_FRAME_STATE_IDLE
1420 EXPECT_IMPL_FRAME_STATE(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE); 1416 EXPECT_IMPL_FRAME_STATE(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE);
1421 EXPECT_ACTION(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); 1417 EXPECT_ACTION(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION);
1422 1418
1423 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 1419 state.OnBeginImplFrame();
1424 EXPECT_IMPL_FRAME_STATE( 1420 EXPECT_IMPL_FRAME_STATE(
1425 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING); 1421 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING);
1426 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); 1422 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE);
1427 1423
1428 state.OnBeginImplFrameDeadlinePending(); 1424 state.OnBeginImplFrameDeadlinePending();
1429 EXPECT_IMPL_FRAME_STATE( 1425 EXPECT_IMPL_FRAME_STATE(
1430 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME); 1426 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME);
1431 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); 1427 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE);
1432 1428
1433 state.OnBeginImplFrameDeadline(); 1429 state.OnBeginImplFrameDeadline();
1434 EXPECT_IMPL_FRAME_STATE( 1430 EXPECT_IMPL_FRAME_STATE(
1435 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE); 1431 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE);
1436 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); 1432 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE);
1437 1433
1438 state.OnBeginImplFrameIdle(); 1434 state.OnBeginImplFrameIdle();
1439 EXPECT_ACTION_UPDATE_STATE( 1435 EXPECT_ACTION_UPDATE_STATE(
1440 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); 1436 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION);
1441 1437
1442 // After we get a new output surface, the commit flow should start. 1438 // After we get a new output surface, the commit flow should start.
1443 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 1439 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
1444 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 1440 state.OnBeginImplFrame();
1445 EXPECT_ACTION_UPDATE_STATE( 1441 EXPECT_ACTION_UPDATE_STATE(
1446 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1442 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
1447 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1443 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1448 state.NotifyBeginMainFrameStarted(); 1444 state.NotifyBeginMainFrameStarted();
1449 state.NotifyReadyToCommit(); 1445 state.NotifyReadyToCommit();
1450 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 1446 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
1451 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1447 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1452 state.OnBeginImplFrameDeadline(); 1448 state.OnBeginImplFrameDeadline();
1453 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 1449 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE);
1454 EXPECT_ACTION_UPDATE_STATE( 1450 EXPECT_ACTION_UPDATE_STATE(
(...skipping 10 matching lines...) Expand all
1465 1461
1466 state.SetNeedsRedraw(true); 1462 state.SetNeedsRedraw(true);
1467 1463
1468 // Cause a lost output surface, and restore it. 1464 // Cause a lost output surface, and restore it.
1469 state.DidLoseOutputSurface(); 1465 state.DidLoseOutputSurface();
1470 EXPECT_ACTION(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); 1466 EXPECT_ACTION(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION);
1471 state.UpdateState(state.NextAction()); 1467 state.UpdateState(state.NextAction());
1472 state.DidCreateAndInitializeOutputSurface(); 1468 state.DidCreateAndInitializeOutputSurface();
1473 1469
1474 EXPECT_FALSE(state.RedrawPending()); 1470 EXPECT_FALSE(state.RedrawPending());
1475 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 1471 state.OnBeginImplFrame();
1476 EXPECT_ACTION(SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1472 EXPECT_ACTION(SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
1477 } 1473 }
1478 1474
1479 TEST(SchedulerStateMachineTest, 1475 TEST(SchedulerStateMachineTest,
1480 TestPendingActivationsShouldBeForcedAfterLostOutputSurface) { 1476 TestPendingActivationsShouldBeForcedAfterLostOutputSurface) {
1481 SchedulerSettings settings; 1477 SchedulerSettings settings;
1482 settings.impl_side_painting = true; 1478 settings.impl_side_painting = true;
1483 StateMachine state(settings); 1479 StateMachine state(settings);
1484 SET_UP_STATE(state) 1480 SET_UP_STATE(state)
1485 1481
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
1579 1575
1580 TEST(SchedulerStateMachineTest, 1576 TEST(SchedulerStateMachineTest,
1581 TestTriggerDeadlineImmediatelyAfterAbortedCommit) { 1577 TestTriggerDeadlineImmediatelyAfterAbortedCommit) {
1582 SchedulerSettings settings; 1578 SchedulerSettings settings;
1583 settings.impl_side_painting = true; 1579 settings.impl_side_painting = true;
1584 StateMachine state(settings); 1580 StateMachine state(settings);
1585 SET_UP_STATE(state) 1581 SET_UP_STATE(state)
1586 1582
1587 // This test mirrors what happens during the first frame of a scroll gesture. 1583 // This test mirrors what happens during the first frame of a scroll gesture.
1588 // First we get the input event and a BeginFrame. 1584 // First we get the input event and a BeginFrame.
1589 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 1585 state.OnBeginImplFrame();
1590 1586
1591 // As a response the compositor requests a redraw and a commit to tell the 1587 // As a response the compositor requests a redraw and a commit to tell the
1592 // main thread about the new scroll offset. 1588 // main thread about the new scroll offset.
1593 state.SetNeedsRedraw(true); 1589 state.SetNeedsRedraw(true);
1594 state.SetNeedsCommit(); 1590 state.SetNeedsCommit();
1595 1591
1596 // We should start the commit normally. 1592 // We should start the commit normally.
1597 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 1593 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE);
1598 EXPECT_ACTION_UPDATE_STATE( 1594 EXPECT_ACTION_UPDATE_STATE(
1599 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1595 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
(...skipping 14 matching lines...) Expand all
1614 StateMachine& state = *state_ptr; 1610 StateMachine& state = *state_ptr;
1615 1611
1616 state.NotifyBeginMainFrameStarted(); 1612 state.NotifyBeginMainFrameStarted();
1617 state.NotifyReadyToCommit(); 1613 state.NotifyReadyToCommit();
1618 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 1614 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
1619 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1615 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1620 state.NotifyReadyToActivate(); 1616 state.NotifyReadyToActivate();
1621 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); 1617 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE);
1622 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1618 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1623 1619
1624 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 1620 state.OnBeginImplFrame();
1625 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 1621 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE);
1626 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1622 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1627 1623
1628 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineImmediately()); 1624 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineImmediately());
1629 state.OnBeginImplFrameDeadline(); 1625 state.OnBeginImplFrameDeadline();
1630 EXPECT_ACTION_UPDATE_STATE( 1626 EXPECT_ACTION_UPDATE_STATE(
1631 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 1627 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
1632 state.DidSwapBuffers(); 1628 state.DidSwapBuffers();
1633 } 1629 }
1634 1630
1635 TEST(SchedulerStateMachineTest, TestImplLatencyTakesPriority) { 1631 TEST(SchedulerStateMachineTest, TestImplLatencyTakesPriority) {
1636 SchedulerSettings settings; 1632 SchedulerSettings settings;
1637 settings.impl_side_painting = true; 1633 settings.impl_side_painting = true;
1638 StateMachine state(settings); 1634 StateMachine state(settings);
1639 SET_UP_STATE(state) 1635 SET_UP_STATE(state)
1640 1636
1641 // This test ensures that impl-draws are prioritized over main thread updates 1637 // This test ensures that impl-draws are prioritized over main thread updates
1642 // in prefer impl latency mode. 1638 // in prefer impl latency mode.
1643 state.SetNeedsRedraw(true); 1639 state.SetNeedsRedraw(true);
1644 state.SetNeedsCommit(); 1640 state.SetNeedsCommit();
1645 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 1641 state.OnBeginImplFrame();
1646 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 1642 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE);
1647 EXPECT_ACTION_UPDATE_STATE( 1643 EXPECT_ACTION_UPDATE_STATE(
1648 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1644 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
1649 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1645 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1650 1646
1651 // Verify the deadline is not triggered early until we enter 1647 // Verify the deadline is not triggered early until we enter
1652 // prefer impl latency mode. 1648 // prefer impl latency mode.
1653 EXPECT_FALSE(state.ShouldTriggerBeginImplFrameDeadlineImmediately()); 1649 EXPECT_FALSE(state.ShouldTriggerBeginImplFrameDeadlineImmediately());
1654 state.SetImplLatencyTakesPriority(true); 1650 state.SetImplLatencyTakesPriority(true);
1655 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineImmediately()); 1651 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineImmediately());
(...skipping 16 matching lines...) Expand all
1672 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1668 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1673 1669
1674 // Finish the previous commit and draw it. 1670 // Finish the previous commit and draw it.
1675 FinishPreviousCommitAndDrawWithoutExitingDeadline(&state); 1671 FinishPreviousCommitAndDrawWithoutExitingDeadline(&state);
1676 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1672 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1677 1673
1678 // Verify we do not send another BeginMainFrame if was are swap throttled 1674 // Verify we do not send another BeginMainFrame if was are swap throttled
1679 // and did not just swap. 1675 // and did not just swap.
1680 state.SetNeedsCommit(); 1676 state.SetNeedsCommit();
1681 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1677 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1682 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 1678 state.OnBeginImplFrame();
1683 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1679 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1684 EXPECT_FALSE(state.ShouldTriggerBeginImplFrameDeadlineImmediately()); 1680 EXPECT_FALSE(state.ShouldTriggerBeginImplFrameDeadlineImmediately());
1685 state.OnBeginImplFrameDeadline(); 1681 state.OnBeginImplFrameDeadline();
1686 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1682 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1687 } 1683 }
1688 1684
1689 TEST(SchedulerStateMachineTest, 1685 TEST(SchedulerStateMachineTest,
1690 TestTriggerDeadlineImmediatelyOnLostOutputSurface) { 1686 TestTriggerDeadlineImmediatelyOnLostOutputSurface) {
1691 SchedulerSettings default_scheduler_settings; 1687 SchedulerSettings default_scheduler_settings;
1692 StateMachine state(default_scheduler_settings); 1688 StateMachine state(default_scheduler_settings);
1693 SET_UP_STATE(state) 1689 SET_UP_STATE(state)
1694 1690
1695 state.SetNeedsCommit(); 1691 state.SetNeedsCommit();
1696 1692
1697 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 1693 state.OnBeginImplFrame();
1698 EXPECT_ACTION_UPDATE_STATE( 1694 EXPECT_ACTION_UPDATE_STATE(
1699 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1695 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
1700 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1696 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1701 EXPECT_FALSE(state.ShouldTriggerBeginImplFrameDeadlineImmediately()); 1697 EXPECT_FALSE(state.ShouldTriggerBeginImplFrameDeadlineImmediately());
1702 1698
1703 state.DidLoseOutputSurface(); 1699 state.DidLoseOutputSurface();
1704 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1700 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1705 // The deadline should be triggered immediately when output surface is lost. 1701 // The deadline should be triggered immediately when output surface is lost.
1706 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineImmediately()); 1702 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineImmediately());
1707 } 1703 }
1708 1704
1709 TEST(SchedulerStateMachineTest, TestSetNeedsAnimate) { 1705 TEST(SchedulerStateMachineTest, TestSetNeedsAnimate) {
1710 SchedulerSettings settings; 1706 SchedulerSettings settings;
1711 settings.impl_side_painting = true; 1707 settings.impl_side_painting = true;
1712 StateMachine state(settings); 1708 StateMachine state(settings);
1713 SET_UP_STATE(state) 1709 SET_UP_STATE(state)
1714 1710
1715 // Test requesting an animation that, when run, causes us to draw. 1711 // Test requesting an animation that, when run, causes us to draw.
1716 state.SetNeedsAnimate(); 1712 state.SetNeedsAnimate();
1717 EXPECT_TRUE(state.BeginFrameNeeded()); 1713 EXPECT_TRUE(state.BeginFrameNeeded());
1718 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1714 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1719 1715
1720 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 1716 state.OnBeginImplFrame();
1721 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 1717 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE);
1722 1718
1723 state.OnBeginImplFrameDeadlinePending(); 1719 state.OnBeginImplFrameDeadlinePending();
1724 state.OnBeginImplFrameDeadline(); 1720 state.OnBeginImplFrameDeadline();
1725 EXPECT_ACTION_UPDATE_STATE( 1721 EXPECT_ACTION_UPDATE_STATE(
1726 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 1722 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
1727 } 1723 }
1728 1724
1729 TEST(SchedulerStateMachineTest, TestAnimateBeforeCommit) { 1725 TEST(SchedulerStateMachineTest, TestAnimateBeforeCommit) {
1730 SchedulerSettings settings; 1726 SchedulerSettings settings;
1731 settings.impl_side_painting = true; 1727 settings.impl_side_painting = true;
1732 StateMachine state(settings); 1728 StateMachine state(settings);
1733 SET_UP_STATE(state) 1729 SET_UP_STATE(state)
1734 1730
1735 // Check that animations are updated before we start a commit. 1731 // Check that animations are updated before we start a commit.
1736 state.SetNeedsAnimate(); 1732 state.SetNeedsAnimate();
1737 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1733 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1738 state.SetNeedsCommit(); 1734 state.SetNeedsCommit();
1739 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1735 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1740 EXPECT_TRUE(state.BeginFrameNeeded()); 1736 EXPECT_TRUE(state.BeginFrameNeeded());
1741 1737
1742 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 1738 state.OnBeginImplFrame();
1743 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 1739 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE);
1744 EXPECT_ACTION_UPDATE_STATE( 1740 EXPECT_ACTION_UPDATE_STATE(
1745 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1741 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
1746 1742
1747 state.OnBeginImplFrameDeadlinePending(); 1743 state.OnBeginImplFrameDeadlinePending();
1748 state.OnBeginImplFrameDeadline(); 1744 state.OnBeginImplFrameDeadline();
1749 EXPECT_ACTION_UPDATE_STATE( 1745 EXPECT_ACTION_UPDATE_STATE(
1750 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 1746 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
1751 } 1747 }
1752 1748
1753 TEST(SchedulerStateMachineTest, TestAnimateAfterCommitBeforeDraw) { 1749 TEST(SchedulerStateMachineTest, TestAnimateAfterCommitBeforeDraw) {
1754 SchedulerSettings settings; 1750 SchedulerSettings settings;
1755 settings.impl_side_painting = true; 1751 settings.impl_side_painting = true;
1756 StateMachine state(settings); 1752 StateMachine state(settings);
1757 SET_UP_STATE(state) 1753 SET_UP_STATE(state)
1758 1754
1759 // Check that animations are updated before we start a commit. 1755 // Check that animations are updated before we start a commit.
1760 state.SetNeedsAnimate(); 1756 state.SetNeedsAnimate();
1761 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1757 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1762 state.SetNeedsCommit(); 1758 state.SetNeedsCommit();
1763 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1759 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1764 EXPECT_TRUE(state.BeginFrameNeeded()); 1760 EXPECT_TRUE(state.BeginFrameNeeded());
1765 1761
1766 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 1762 state.OnBeginImplFrame();
1767 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 1763 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE);
1768 EXPECT_ACTION_UPDATE_STATE( 1764 EXPECT_ACTION_UPDATE_STATE(
1769 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1765 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
1770 1766
1771 state.NotifyBeginMainFrameStarted(); 1767 state.NotifyBeginMainFrameStarted();
1772 state.NotifyReadyToCommit(); 1768 state.NotifyReadyToCommit();
1773 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 1769 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
1774 1770
1775 state.OnBeginImplFrameDeadlinePending(); 1771 state.OnBeginImplFrameDeadlinePending();
1776 state.OnBeginImplFrameDeadline(); 1772 state.OnBeginImplFrameDeadline();
1777 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 1773 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE);
1778 EXPECT_ACTION_UPDATE_STATE( 1774 EXPECT_ACTION_UPDATE_STATE(
1779 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 1775 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
1780 } 1776 }
1781 1777
1782 TEST(SchedulerStateMachineTest, TestSetNeedsAnimateAfterAnimate) { 1778 TEST(SchedulerStateMachineTest, TestSetNeedsAnimateAfterAnimate) {
1783 SchedulerSettings settings; 1779 SchedulerSettings settings;
1784 settings.impl_side_painting = true; 1780 settings.impl_side_painting = true;
1785 StateMachine state(settings); 1781 StateMachine state(settings);
1786 SET_UP_STATE(state) 1782 SET_UP_STATE(state)
1787 1783
1788 // Test requesting an animation after we have already animated during this 1784 // Test requesting an animation after we have already animated during this
1789 // frame. 1785 // frame.
1790 state.SetNeedsRedraw(true); 1786 state.SetNeedsRedraw(true);
1791 EXPECT_TRUE(state.BeginFrameNeeded()); 1787 EXPECT_TRUE(state.BeginFrameNeeded());
1792 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1788 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1793 1789
1794 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 1790 state.OnBeginImplFrame();
1795 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 1791 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE);
1796 1792
1797 state.SetNeedsAnimate(); 1793 state.SetNeedsAnimate();
1798 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1794 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1799 1795
1800 state.OnBeginImplFrameDeadline(); 1796 state.OnBeginImplFrameDeadline();
1801 EXPECT_ACTION_UPDATE_STATE( 1797 EXPECT_ACTION_UPDATE_STATE(
1802 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 1798 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE);
1803 } 1799 }
1804 1800
(...skipping 11 matching lines...) Expand all
1816 SchedulerSettings settings; 1812 SchedulerSettings settings;
1817 StateMachine state(settings); 1813 StateMachine state(settings);
1818 SET_UP_STATE(state) 1814 SET_UP_STATE(state)
1819 1815
1820 state.SetDeferCommits(true); 1816 state.SetDeferCommits(true);
1821 1817
1822 state.SetNeedsCommit(); 1818 state.SetNeedsCommit();
1823 EXPECT_TRUE(state.BeginFrameNeeded()); 1819 EXPECT_TRUE(state.BeginFrameNeeded());
1824 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1820 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1825 1821
1826 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 1822 state.OnBeginImplFrame();
1827 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1823 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1828 1824
1829 state.OnBeginImplFrameDeadline(); 1825 state.OnBeginImplFrameDeadline();
1830 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1826 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1831 1827
1832 state.SetDeferCommits(false); 1828 state.SetDeferCommits(false);
1833 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 1829 state.OnBeginImplFrame();
1834 EXPECT_ACTION_UPDATE_STATE( 1830 EXPECT_ACTION_UPDATE_STATE(
1835 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1831 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
1836 } 1832 }
1837 1833
1838 } // namespace 1834 } // namespace
1839 } // namespace cc 1835 } // namespace cc
OLDNEW
« no previous file with comments | « cc/scheduler/scheduler_state_machine.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698