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

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

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

Powered by Google App Engine
This is Rietveld 408576698