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

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

Issue 16863005: cc: Add BeginFrameArgs (Closed) Base URL: http://git.chromium.org/chromium/src.git@nofrc12
Patch Set: Rebase Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « cc/scheduler/scheduler_state_machine.cc ('k') | cc/scheduler/scheduler_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2011 The Chromium Authors. All rights reserved. 1 // Copyright 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/scheduler/scheduler_state_machine.h" 5 #include "cc/scheduler/scheduler_state_machine.h"
6 6
7 #include "cc/scheduler/scheduler.h" 7 #include "cc/scheduler/scheduler.h"
8 #include "testing/gtest/include/gtest/gtest.h" 8 #include "testing/gtest/include/gtest/gtest.h"
9 9
10 namespace cc { 10 namespace cc {
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
49 state.DidCreateAndInitializeOutputSurface(); 49 state.DidCreateAndInitializeOutputSurface();
50 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE); 50 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE);
51 state.SetNeedsRedraw(false); 51 state.SetNeedsRedraw(false);
52 state.SetVisible(true); 52 state.SetVisible(true);
53 53
54 EXPECT_FALSE(state.BeginFrameNeededToDrawByImplThread()); 54 EXPECT_FALSE(state.BeginFrameNeededToDrawByImplThread());
55 55
56 state.DidLeaveBeginFrame(); 56 state.DidLeaveBeginFrame();
57 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); 57 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction());
58 EXPECT_FALSE(state.BeginFrameNeededToDrawByImplThread()); 58 EXPECT_FALSE(state.BeginFrameNeededToDrawByImplThread());
59 state.DidEnterBeginFrame(); 59 state.DidEnterBeginFrame(BeginFrameArgs::CreateForTesting());
60 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); 60 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction());
61 } 61 }
62 62
63 // If commit requested but can_start is still false, do nothing. 63 // If commit requested but can_start is still false, do nothing.
64 { 64 {
65 StateMachine state(default_scheduler_settings); 65 StateMachine state(default_scheduler_settings);
66 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE); 66 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE);
67 state.SetNeedsRedraw(false); 67 state.SetNeedsRedraw(false);
68 state.SetVisible(true); 68 state.SetVisible(true);
69 69
70 EXPECT_FALSE(state.BeginFrameNeededToDrawByImplThread()); 70 EXPECT_FALSE(state.BeginFrameNeededToDrawByImplThread());
71 71
72 state.DidLeaveBeginFrame(); 72 state.DidLeaveBeginFrame();
73 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); 73 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction());
74 EXPECT_FALSE(state.BeginFrameNeededToDrawByImplThread()); 74 EXPECT_FALSE(state.BeginFrameNeededToDrawByImplThread());
75 state.DidEnterBeginFrame(); 75 state.DidEnterBeginFrame(BeginFrameArgs::CreateForTesting());
76 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); 76 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction());
77 } 77 }
78 78
79 // If commit requested, begin a main frame. 79 // If commit requested, begin a main frame.
80 { 80 {
81 StateMachine state(default_scheduler_settings); 81 StateMachine state(default_scheduler_settings);
82 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE); 82 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE);
83 state.SetCanStart(); 83 state.SetCanStart();
84 state.SetNeedsRedraw(false); 84 state.SetNeedsRedraw(false);
85 state.SetVisible(true); 85 state.SetVisible(true);
(...skipping 30 matching lines...) Expand all
116 SchedulerSettings default_scheduler_settings; 116 SchedulerSettings default_scheduler_settings;
117 SchedulerStateMachine state(default_scheduler_settings); 117 SchedulerStateMachine state(default_scheduler_settings);
118 state.SetCanStart(); 118 state.SetCanStart();
119 state.UpdateState(state.NextAction()); 119 state.UpdateState(state.NextAction());
120 state.DidCreateAndInitializeOutputSurface(); 120 state.DidCreateAndInitializeOutputSurface();
121 state.SetVisible(true); 121 state.SetVisible(true);
122 state.SetCanDraw(true); 122 state.SetCanDraw(true);
123 state.SetNeedsRedraw(); 123 state.SetNeedsRedraw();
124 EXPECT_TRUE(state.RedrawPending()); 124 EXPECT_TRUE(state.RedrawPending());
125 EXPECT_TRUE(state.BeginFrameNeededToDrawByImplThread()); 125 EXPECT_TRUE(state.BeginFrameNeededToDrawByImplThread());
126 state.DidEnterBeginFrame(); 126 state.DidEnterBeginFrame(BeginFrameArgs::CreateForTesting());
127 127
128 // We're drawing now. 128 // We're drawing now.
129 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction()); 129 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction());
130 state.UpdateState(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); 130 state.UpdateState(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
131 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); 131 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction());
132 EXPECT_FALSE(state.RedrawPending()); 132 EXPECT_FALSE(state.RedrawPending());
133 EXPECT_FALSE(state.CommitPending()); 133 EXPECT_FALSE(state.CommitPending());
134 134
135 // Failing the draw makes us require a commit. 135 // Failing the draw makes us require a commit.
136 state.DidDrawIfPossibleCompleted(false); 136 state.DidDrawIfPossibleCompleted(false);
(...skipping 11 matching lines...) Expand all
148 SchedulerStateMachine state(default_scheduler_settings); 148 SchedulerStateMachine state(default_scheduler_settings);
149 state.SetCanStart(); 149 state.SetCanStart();
150 state.UpdateState(state.NextAction()); 150 state.UpdateState(state.NextAction());
151 state.DidCreateAndInitializeOutputSurface(); 151 state.DidCreateAndInitializeOutputSurface();
152 152
153 state.SetVisible(true); 153 state.SetVisible(true);
154 state.SetCanDraw(true); 154 state.SetCanDraw(true);
155 state.SetNeedsRedraw(); 155 state.SetNeedsRedraw();
156 EXPECT_TRUE(state.RedrawPending()); 156 EXPECT_TRUE(state.RedrawPending());
157 EXPECT_TRUE(state.BeginFrameNeededToDrawByImplThread()); 157 EXPECT_TRUE(state.BeginFrameNeededToDrawByImplThread());
158 state.DidEnterBeginFrame(); 158 state.DidEnterBeginFrame(BeginFrameArgs::CreateForTesting());
159 159
160 // We're drawing now. 160 // We're drawing now.
161 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction()); 161 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction());
162 state.UpdateState(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); 162 state.UpdateState(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
163 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); 163 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction());
164 EXPECT_FALSE(state.RedrawPending()); 164 EXPECT_FALSE(state.RedrawPending());
165 EXPECT_FALSE(state.CommitPending()); 165 EXPECT_FALSE(state.CommitPending());
166 166
167 // While still in the same begin frame callback on the main thread, 167 // While still in the same begin frame callback on the main thread,
168 // set needs redraw again. This should not redraw. 168 // set needs redraw again. This should not redraw.
(...skipping 21 matching lines...) Expand all
190 state.SetNeedsCommit(); 190 state.SetNeedsCommit();
191 EXPECT_EQ(SchedulerStateMachine::ACTION_SEND_BEGIN_FRAME_TO_MAIN_THREAD, 191 EXPECT_EQ(SchedulerStateMachine::ACTION_SEND_BEGIN_FRAME_TO_MAIN_THREAD,
192 state.NextAction()); 192 state.NextAction());
193 state.UpdateState( 193 state.UpdateState(
194 SchedulerStateMachine::ACTION_SEND_BEGIN_FRAME_TO_MAIN_THREAD); 194 SchedulerStateMachine::ACTION_SEND_BEGIN_FRAME_TO_MAIN_THREAD);
195 EXPECT_TRUE(state.CommitPending()); 195 EXPECT_TRUE(state.CommitPending());
196 196
197 // Then initiate a draw. 197 // Then initiate a draw.
198 state.SetNeedsRedraw(); 198 state.SetNeedsRedraw();
199 EXPECT_TRUE(state.BeginFrameNeededToDrawByImplThread()); 199 EXPECT_TRUE(state.BeginFrameNeededToDrawByImplThread());
200 state.DidEnterBeginFrame(); 200 state.DidEnterBeginFrame(BeginFrameArgs::CreateForTesting());
201 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction()); 201 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction());
202 EXPECT_TRUE(state.RedrawPending()); 202 EXPECT_TRUE(state.RedrawPending());
203 203
204 // Fail the draw. 204 // Fail the draw.
205 state.UpdateState(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); 205 state.UpdateState(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
206 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); 206 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction());
207 state.DidDrawIfPossibleCompleted(false); 207 state.DidDrawIfPossibleCompleted(false);
208 EXPECT_TRUE(state.RedrawPending()); 208 EXPECT_TRUE(state.RedrawPending());
209 // But the commit is ongoing. 209 // But the commit is ongoing.
210 EXPECT_TRUE(state.CommitPending()); 210 EXPECT_TRUE(state.CommitPending());
(...skipping 22 matching lines...) Expand all
233 state.SetNeedsCommit(); 233 state.SetNeedsCommit();
234 EXPECT_EQ(SchedulerStateMachine::ACTION_SEND_BEGIN_FRAME_TO_MAIN_THREAD, 234 EXPECT_EQ(SchedulerStateMachine::ACTION_SEND_BEGIN_FRAME_TO_MAIN_THREAD,
235 state.NextAction()); 235 state.NextAction());
236 state.UpdateState( 236 state.UpdateState(
237 SchedulerStateMachine::ACTION_SEND_BEGIN_FRAME_TO_MAIN_THREAD); 237 SchedulerStateMachine::ACTION_SEND_BEGIN_FRAME_TO_MAIN_THREAD);
238 EXPECT_TRUE(state.CommitPending()); 238 EXPECT_TRUE(state.CommitPending());
239 239
240 // Then initiate a draw. 240 // Then initiate a draw.
241 state.SetNeedsRedraw(); 241 state.SetNeedsRedraw();
242 EXPECT_TRUE(state.BeginFrameNeededToDrawByImplThread()); 242 EXPECT_TRUE(state.BeginFrameNeededToDrawByImplThread());
243 state.DidEnterBeginFrame(); 243 state.DidEnterBeginFrame(BeginFrameArgs::CreateForTesting());
244 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction()); 244 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction());
245 EXPECT_TRUE(state.RedrawPending()); 245 EXPECT_TRUE(state.RedrawPending());
246 246
247 // Fail the draw. 247 // Fail the draw.
248 state.UpdateState(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); 248 state.UpdateState(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
249 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); 249 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction());
250 state.DidDrawIfPossibleCompleted(false); 250 state.DidDrawIfPossibleCompleted(false);
251 EXPECT_TRUE(state.RedrawPending()); 251 EXPECT_TRUE(state.RedrawPending());
252 // But the commit is ongoing. 252 // But the commit is ongoing.
253 EXPECT_TRUE(state.CommitPending()); 253 EXPECT_TRUE(state.CommitPending());
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
288 state.SetNeedsCommit(); 288 state.SetNeedsCommit();
289 EXPECT_EQ(SchedulerStateMachine::ACTION_SEND_BEGIN_FRAME_TO_MAIN_THREAD, 289 EXPECT_EQ(SchedulerStateMachine::ACTION_SEND_BEGIN_FRAME_TO_MAIN_THREAD,
290 state.NextAction()); 290 state.NextAction());
291 state.UpdateState( 291 state.UpdateState(
292 SchedulerStateMachine::ACTION_SEND_BEGIN_FRAME_TO_MAIN_THREAD); 292 SchedulerStateMachine::ACTION_SEND_BEGIN_FRAME_TO_MAIN_THREAD);
293 EXPECT_TRUE(state.CommitPending()); 293 EXPECT_TRUE(state.CommitPending());
294 294
295 // Then initiate a draw. 295 // Then initiate a draw.
296 state.SetNeedsRedraw(); 296 state.SetNeedsRedraw();
297 EXPECT_TRUE(state.BeginFrameNeededToDrawByImplThread()); 297 EXPECT_TRUE(state.BeginFrameNeededToDrawByImplThread());
298 state.DidEnterBeginFrame(); 298 state.DidEnterBeginFrame(BeginFrameArgs::CreateForTesting());
299 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction()); 299 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction());
300 EXPECT_TRUE(state.RedrawPending()); 300 EXPECT_TRUE(state.RedrawPending());
301 301
302 // Fail the draw. 302 // Fail the draw.
303 state.UpdateState(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); 303 state.UpdateState(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
304 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); 304 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction());
305 state.DidDrawIfPossibleCompleted(false); 305 state.DidDrawIfPossibleCompleted(false);
306 EXPECT_TRUE(state.RedrawPending()); 306 EXPECT_TRUE(state.RedrawPending());
307 // But the commit is ongoing. 307 // But the commit is ongoing.
308 EXPECT_TRUE(state.CommitPending()); 308 EXPECT_TRUE(state.CommitPending());
(...skipping 15 matching lines...) Expand all
324 SchedulerStateMachine state(default_scheduler_settings); 324 SchedulerStateMachine state(default_scheduler_settings);
325 state.SetCanStart(); 325 state.SetCanStart();
326 state.UpdateState(state.NextAction()); 326 state.UpdateState(state.NextAction());
327 state.DidCreateAndInitializeOutputSurface(); 327 state.DidCreateAndInitializeOutputSurface();
328 state.SetVisible(true); 328 state.SetVisible(true);
329 state.SetCanDraw(true); 329 state.SetCanDraw(true);
330 330
331 // Start a draw. 331 // Start a draw.
332 state.SetNeedsRedraw(); 332 state.SetNeedsRedraw();
333 EXPECT_TRUE(state.BeginFrameNeededToDrawByImplThread()); 333 EXPECT_TRUE(state.BeginFrameNeededToDrawByImplThread());
334 state.DidEnterBeginFrame(); 334 state.DidEnterBeginFrame(BeginFrameArgs::CreateForTesting());
335 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction()); 335 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction());
336 EXPECT_TRUE(state.RedrawPending()); 336 EXPECT_TRUE(state.RedrawPending());
337 337
338 // Fail the draw. 338 // Fail the draw.
339 state.UpdateState(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); 339 state.UpdateState(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
340 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); 340 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction());
341 state.DidDrawIfPossibleCompleted(false); 341 state.DidDrawIfPossibleCompleted(false);
342 EXPECT_TRUE(state.RedrawPending()); 342 EXPECT_TRUE(state.RedrawPending());
343 343
344 // We should not be trying to draw again now, but we have a commit pending. 344 // We should not be trying to draw again now, but we have a commit pending.
345 EXPECT_EQ(SchedulerStateMachine::ACTION_SEND_BEGIN_FRAME_TO_MAIN_THREAD, 345 EXPECT_EQ(SchedulerStateMachine::ACTION_SEND_BEGIN_FRAME_TO_MAIN_THREAD,
346 state.NextAction()); 346 state.NextAction());
347 347
348 state.DidLeaveBeginFrame(); 348 state.DidLeaveBeginFrame();
349 EXPECT_TRUE(state.BeginFrameNeededToDrawByImplThread()); 349 EXPECT_TRUE(state.BeginFrameNeededToDrawByImplThread());
350 state.DidEnterBeginFrame(); 350 state.DidEnterBeginFrame(BeginFrameArgs::CreateForTesting());
351 351
352 // We should try to draw again in the next begin frame on the impl thread. 352 // We should try to draw again in the next begin frame on the impl thread.
353 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction()); 353 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction());
354 } 354 }
355 355
356 TEST(SchedulerStateMachineTest, TestDoestDrawTwiceInSameFrame) { 356 TEST(SchedulerStateMachineTest, TestDoestDrawTwiceInSameFrame) {
357 SchedulerSettings default_scheduler_settings; 357 SchedulerSettings default_scheduler_settings;
358 SchedulerStateMachine state(default_scheduler_settings); 358 SchedulerStateMachine state(default_scheduler_settings);
359 state.SetCanStart(); 359 state.SetCanStart();
360 state.UpdateState(state.NextAction()); 360 state.UpdateState(state.NextAction());
361 state.DidCreateAndInitializeOutputSurface(); 361 state.DidCreateAndInitializeOutputSurface();
362 state.SetVisible(true); 362 state.SetVisible(true);
363 state.SetCanDraw(true); 363 state.SetCanDraw(true);
364 state.SetNeedsRedraw(); 364 state.SetNeedsRedraw();
365 EXPECT_TRUE(state.BeginFrameNeededToDrawByImplThread()); 365 EXPECT_TRUE(state.BeginFrameNeededToDrawByImplThread());
366 state.DidEnterBeginFrame(); 366 state.DidEnterBeginFrame(BeginFrameArgs::CreateForTesting());
367 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction()); 367 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction());
368 state.UpdateState(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); 368 state.UpdateState(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
369 369
370 // While still in the same begin frame for the impl thread, set needs redraw 370 // While still in the same begin frame for the impl thread, set needs redraw
371 // again. This should not redraw. 371 // again. This should not redraw.
372 state.SetNeedsRedraw(); 372 state.SetNeedsRedraw();
373 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); 373 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction());
374 374
375 // Move to another frame. This should now draw. 375 // Move to another frame. This should now draw.
376 state.DidDrawIfPossibleCompleted(true); 376 state.DidDrawIfPossibleCompleted(true);
377 state.DidLeaveBeginFrame(); 377 state.DidLeaveBeginFrame();
378 EXPECT_TRUE(state.BeginFrameNeededToDrawByImplThread()); 378 EXPECT_TRUE(state.BeginFrameNeededToDrawByImplThread());
379 state.DidEnterBeginFrame(); 379 state.DidEnterBeginFrame(BeginFrameArgs::CreateForTesting());
380 380
381 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction()); 381 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction());
382 state.UpdateState(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); 382 state.UpdateState(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
383 state.DidDrawIfPossibleCompleted(true); 383 state.DidDrawIfPossibleCompleted(true);
384 EXPECT_FALSE(state.BeginFrameNeededToDrawByImplThread()); 384 EXPECT_FALSE(state.BeginFrameNeededToDrawByImplThread());
385 } 385 }
386 386
387 TEST(SchedulerStateMachineTest, TestNextActionDrawsOnBeginFrame) { 387 TEST(SchedulerStateMachineTest, TestNextActionDrawsOnBeginFrame) {
388 SchedulerSettings default_scheduler_settings; 388 SchedulerSettings default_scheduler_settings;
389 389
390 // When not in BeginFrame, or in BeginFrame but not visible, 390 // When not in BeginFrame, or in BeginFrame but not visible,
391 // don't draw. 391 // don't draw.
392 size_t num_commit_states = 392 size_t num_commit_states =
393 sizeof(all_commit_states) / sizeof(SchedulerStateMachine::CommitState); 393 sizeof(all_commit_states) / sizeof(SchedulerStateMachine::CommitState);
394 for (size_t i = 0; i < num_commit_states; ++i) { 394 for (size_t i = 0; i < num_commit_states; ++i) {
395 for (size_t j = 0; j < 2; ++j) { 395 for (size_t j = 0; j < 2; ++j) {
396 StateMachine state(default_scheduler_settings); 396 StateMachine state(default_scheduler_settings);
397 state.SetCanStart(); 397 state.SetCanStart();
398 state.UpdateState(state.NextAction()); 398 state.UpdateState(state.NextAction());
399 state.DidCreateAndInitializeOutputSurface(); 399 state.DidCreateAndInitializeOutputSurface();
400 state.SetCommitState(all_commit_states[i]); 400 state.SetCommitState(all_commit_states[i]);
401 bool visible = j; 401 bool visible = j;
402 if (!visible) { 402 if (!visible) {
403 state.DidEnterBeginFrame(); 403 state.DidEnterBeginFrame(BeginFrameArgs::CreateForTesting());
404 state.SetVisible(false); 404 state.SetVisible(false);
405 } else { 405 } else {
406 state.SetVisible(true); 406 state.SetVisible(true);
407 } 407 }
408 408
409 // Case 1: needs_commit=false 409 // Case 1: needs_commit=false
410 EXPECT_NE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, 410 EXPECT_NE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE,
411 state.NextAction()); 411 state.NextAction());
412 412
413 // Case 2: needs_commit=true 413 // Case 2: needs_commit=true
414 state.SetNeedsCommit(); 414 state.SetNeedsCommit();
415 EXPECT_NE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, 415 EXPECT_NE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE,
416 state.NextAction()); 416 state.NextAction());
417 } 417 }
418 } 418 }
419 419
420 // When in BeginFrame, or not in BeginFrame but needs_forced_dedraw 420 // When in BeginFrame, or not in BeginFrame but needs_forced_dedraw
421 // set, should always draw except if you're ready to commit, in which case 421 // set, should always draw except if you're ready to commit, in which case
422 // commit. 422 // commit.
423 for (size_t i = 0; i < num_commit_states; ++i) { 423 for (size_t i = 0; i < num_commit_states; ++i) {
424 for (size_t j = 0; j < 2; ++j) { 424 for (size_t j = 0; j < 2; ++j) {
425 StateMachine state(default_scheduler_settings); 425 StateMachine state(default_scheduler_settings);
426 state.SetCanStart(); 426 state.SetCanStart();
427 state.UpdateState(state.NextAction()); 427 state.UpdateState(state.NextAction());
428 state.DidCreateAndInitializeOutputSurface(); 428 state.DidCreateAndInitializeOutputSurface();
429 state.SetCanDraw(true); 429 state.SetCanDraw(true);
430 state.SetCommitState(all_commit_states[i]); 430 state.SetCommitState(all_commit_states[i]);
431 bool forced_draw = j; 431 bool forced_draw = j;
432 if (!forced_draw) { 432 if (!forced_draw) {
433 state.DidEnterBeginFrame(); 433 state.DidEnterBeginFrame(BeginFrameArgs::CreateForTesting());
434 state.SetNeedsRedraw(true); 434 state.SetNeedsRedraw(true);
435 state.SetVisible(true); 435 state.SetVisible(true);
436 } else { 436 } else {
437 state.SetNeedsForcedRedraw(true); 437 state.SetNeedsForcedRedraw(true);
438 } 438 }
439 439
440 SchedulerStateMachine::Action expected_action; 440 SchedulerStateMachine::Action expected_action;
441 if (all_commit_states[i] != 441 if (all_commit_states[i] !=
442 SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT) { 442 SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT) {
443 expected_action = 443 expected_action =
(...skipping 25 matching lines...) Expand all
469 for (size_t j = 0; j < 2; ++j) { 469 for (size_t j = 0; j < 2; ++j) {
470 StateMachine state(default_scheduler_settings); 470 StateMachine state(default_scheduler_settings);
471 state.SetCanStart(); 471 state.SetCanStart();
472 state.UpdateState(state.NextAction()); 472 state.UpdateState(state.NextAction());
473 state.DidCreateAndInitializeOutputSurface(); 473 state.DidCreateAndInitializeOutputSurface();
474 state.SetCommitState(all_commit_states[i]); 474 state.SetCommitState(all_commit_states[i]);
475 state.SetVisible(false); 475 state.SetVisible(false);
476 state.SetNeedsRedraw(true); 476 state.SetNeedsRedraw(true);
477 state.SetNeedsForcedRedraw(false); 477 state.SetNeedsForcedRedraw(false);
478 if (j == 1) 478 if (j == 1)
479 state.DidEnterBeginFrame(); 479 state.DidEnterBeginFrame(BeginFrameArgs::CreateForTesting());
480 480
481 // Case 1: needs_commit=false. 481 // Case 1: needs_commit=false.
482 EXPECT_NE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, 482 EXPECT_NE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE,
483 state.NextAction()); 483 state.NextAction());
484 484
485 // Case 2: needs_commit=true. 485 // Case 2: needs_commit=true.
486 state.SetNeedsCommit(); 486 state.SetNeedsCommit();
487 EXPECT_NE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, 487 EXPECT_NE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE,
488 state.NextAction()); 488 state.NextAction());
489 } 489 }
(...skipping 10 matching lines...) Expand all
500 for (size_t j = 0; j < 2; ++j) { 500 for (size_t j = 0; j < 2; ++j) {
501 StateMachine state(default_scheduler_settings); 501 StateMachine state(default_scheduler_settings);
502 state.SetCanStart(); 502 state.SetCanStart();
503 state.UpdateState(state.NextAction()); 503 state.UpdateState(state.NextAction());
504 state.DidCreateAndInitializeOutputSurface(); 504 state.DidCreateAndInitializeOutputSurface();
505 state.SetCommitState(all_commit_states[i]); 505 state.SetCommitState(all_commit_states[i]);
506 state.SetVisible(false); 506 state.SetVisible(false);
507 state.SetNeedsRedraw(true); 507 state.SetNeedsRedraw(true);
508 state.SetNeedsForcedRedraw(false); 508 state.SetNeedsForcedRedraw(false);
509 if (j == 1) 509 if (j == 1)
510 state.DidEnterBeginFrame(); 510 state.DidEnterBeginFrame(BeginFrameArgs::CreateForTesting());
511 511
512 state.SetCanDraw(false); 512 state.SetCanDraw(false);
513 EXPECT_NE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, 513 EXPECT_NE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE,
514 state.NextAction()); 514 state.NextAction());
515 } 515 }
516 } 516 }
517 } 517 }
518 518
519 TEST(SchedulerStateMachineTest, 519 TEST(SchedulerStateMachineTest,
520 TestCanRedrawWithWaitingForFirstDrawMakesProgress) { 520 TestCanRedrawWithWaitingForFirstDrawMakesProgress) {
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
555 EXPECT_TRUE(state.NeedsCommit()); 555 EXPECT_TRUE(state.NeedsCommit());
556 556
557 // Let the frame finish. 557 // Let the frame finish.
558 state.FinishCommit(); 558 state.FinishCommit();
559 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT, 559 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT,
560 state.CommitState()); 560 state.CommitState());
561 561
562 // Expect to commit regardless of BeginFrame state. 562 // Expect to commit regardless of BeginFrame state.
563 state.DidLeaveBeginFrame(); 563 state.DidLeaveBeginFrame();
564 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction()); 564 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction());
565 state.DidEnterBeginFrame(); 565 state.DidEnterBeginFrame(BeginFrameArgs::CreateForTesting());
566 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction()); 566 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction());
567 567
568 // Commit and make sure we draw on next BeginFrame 568 // Commit and make sure we draw on next BeginFrame
569 state.UpdateState(SchedulerStateMachine::ACTION_COMMIT); 569 state.UpdateState(SchedulerStateMachine::ACTION_COMMIT);
570 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction()); 570 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction());
571 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW, 571 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW,
572 state.CommitState()); 572 state.CommitState());
573 state.UpdateState(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); 573 state.UpdateState(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
574 state.DidDrawIfPossibleCompleted(true); 574 state.DidDrawIfPossibleCompleted(true);
575 575
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
610 // Commit. 610 // Commit.
611 state.UpdateState(SchedulerStateMachine::ACTION_COMMIT); 611 state.UpdateState(SchedulerStateMachine::ACTION_COMMIT);
612 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW, 612 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW,
613 state.CommitState()); 613 state.CommitState());
614 EXPECT_TRUE(state.NeedsRedraw()); 614 EXPECT_TRUE(state.NeedsRedraw());
615 615
616 // Expect to do nothing until BeginFrame. 616 // Expect to do nothing until BeginFrame.
617 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); 617 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction());
618 618
619 // At BeginFrame, draw. 619 // At BeginFrame, draw.
620 state.DidEnterBeginFrame(); 620 state.DidEnterBeginFrame(BeginFrameArgs::CreateForTesting());
621 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction()); 621 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction());
622 state.UpdateState(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); 622 state.UpdateState(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
623 state.DidDrawIfPossibleCompleted(true); 623 state.DidDrawIfPossibleCompleted(true);
624 state.DidLeaveBeginFrame(); 624 state.DidLeaveBeginFrame();
625 625
626 // Should be synchronized, no draw needed, no action needed. 626 // Should be synchronized, no draw needed, no action needed.
627 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); 627 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState());
628 EXPECT_FALSE(state.NeedsRedraw()); 628 EXPECT_FALSE(state.NeedsRedraw());
629 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); 629 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction());
630 } 630 }
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
664 // Commit. 664 // Commit.
665 state.UpdateState(SchedulerStateMachine::ACTION_COMMIT); 665 state.UpdateState(SchedulerStateMachine::ACTION_COMMIT);
666 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW, 666 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW,
667 state.CommitState()); 667 state.CommitState());
668 EXPECT_TRUE(state.NeedsRedraw()); 668 EXPECT_TRUE(state.NeedsRedraw());
669 669
670 // Expect to do nothing until BeginFrame. 670 // Expect to do nothing until BeginFrame.
671 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); 671 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction());
672 672
673 // At BeginFrame, draw. 673 // At BeginFrame, draw.
674 state.DidEnterBeginFrame(); 674 state.DidEnterBeginFrame(BeginFrameArgs::CreateForTesting());
675 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction()); 675 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction());
676 state.UpdateState(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); 676 state.UpdateState(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
677 state.DidDrawIfPossibleCompleted(true); 677 state.DidDrawIfPossibleCompleted(true);
678 state.DidLeaveBeginFrame(); 678 state.DidLeaveBeginFrame();
679 679
680 // Should be synchronized, no draw needed, no action needed. 680 // Should be synchronized, no draw needed, no action needed.
681 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); 681 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState());
682 EXPECT_FALSE(state.NeedsRedraw()); 682 EXPECT_FALSE(state.NeedsRedraw());
683 EXPECT_EQ(SchedulerStateMachine::ACTION_SEND_BEGIN_FRAME_TO_MAIN_THREAD, 683 EXPECT_EQ(SchedulerStateMachine::ACTION_SEND_BEGIN_FRAME_TO_MAIN_THREAD,
684 state.NextAction()); 684 state.NextAction());
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
818 state.DidCreateAndInitializeOutputSurface(); 818 state.DidCreateAndInitializeOutputSurface();
819 819
820 // When the context is recreated, we should begin a commit 820 // When the context is recreated, we should begin a commit
821 EXPECT_EQ(SchedulerStateMachine::ACTION_SEND_BEGIN_FRAME_TO_MAIN_THREAD, 821 EXPECT_EQ(SchedulerStateMachine::ACTION_SEND_BEGIN_FRAME_TO_MAIN_THREAD,
822 state.NextAction()); 822 state.NextAction());
823 state.UpdateState(state.NextAction()); 823 state.UpdateState(state.NextAction());
824 824
825 // Once the context is recreated, whether we draw should be based on 825 // Once the context is recreated, whether we draw should be based on
826 // SetCanDraw. 826 // SetCanDraw.
827 state.SetNeedsRedraw(true); 827 state.SetNeedsRedraw(true);
828 state.DidEnterBeginFrame(); 828 state.DidEnterBeginFrame(BeginFrameArgs::CreateForTesting());
829 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction()); 829 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction());
830 state.SetCanDraw(false); 830 state.SetCanDraw(false);
831 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); 831 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction());
832 state.SetCanDraw(true); 832 state.SetCanDraw(true);
833 state.DidLeaveBeginFrame(); 833 state.DidLeaveBeginFrame();
834 } 834 }
835 835
836 TEST(SchedulerStateMachineTest, TestContextLostWhileCommitInProgress) { 836 TEST(SchedulerStateMachineTest, TestContextLostWhileCommitInProgress) {
837 SchedulerSettings default_scheduler_settings; 837 SchedulerSettings default_scheduler_settings;
838 StateMachine state(default_scheduler_settings); 838 StateMachine state(default_scheduler_settings);
839 state.SetCanStart(); 839 state.SetCanStart();
840 state.UpdateState(state.NextAction()); 840 state.UpdateState(state.NextAction());
841 state.DidCreateAndInitializeOutputSurface(); 841 state.DidCreateAndInitializeOutputSurface();
842 state.SetVisible(true); 842 state.SetVisible(true);
843 state.SetCanDraw(true); 843 state.SetCanDraw(true);
844 844
845 // Get a commit in flight. 845 // Get a commit in flight.
846 state.SetNeedsCommit(); 846 state.SetNeedsCommit();
847 EXPECT_EQ(SchedulerStateMachine::ACTION_SEND_BEGIN_FRAME_TO_MAIN_THREAD, 847 EXPECT_EQ(SchedulerStateMachine::ACTION_SEND_BEGIN_FRAME_TO_MAIN_THREAD,
848 state.NextAction()); 848 state.NextAction());
849 state.UpdateState(state.NextAction()); 849 state.UpdateState(state.NextAction());
850 850
851 // Set damage and expect a draw. 851 // Set damage and expect a draw.
852 state.SetNeedsRedraw(true); 852 state.SetNeedsRedraw(true);
853 state.DidEnterBeginFrame(); 853 state.DidEnterBeginFrame(BeginFrameArgs::CreateForTesting());
854 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction()); 854 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction());
855 state.UpdateState(state.NextAction()); 855 state.UpdateState(state.NextAction());
856 state.DidLeaveBeginFrame(); 856 state.DidLeaveBeginFrame();
857 857
858 // Cause a lost context while the begin frame is in flight 858 // Cause a lost context while the begin frame is in flight
859 // for the main thread. 859 // for the main thread.
860 state.DidLoseOutputSurface(); 860 state.DidLoseOutputSurface();
861 861
862 // Ask for another draw. Expect nothing happens. 862 // Ask for another draw. Expect nothing happens.
863 state.SetNeedsRedraw(true); 863 state.SetNeedsRedraw(true);
864 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); 864 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction());
865 865
866 // Finish the frame, and commit. 866 // Finish the frame, and commit.
867 state.FinishCommit(); 867 state.FinishCommit();
868 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction()); 868 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction());
869 state.UpdateState(state.NextAction()); 869 state.UpdateState(state.NextAction());
870 870
871 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW, 871 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW,
872 state.CommitState()); 872 state.CommitState());
873 873
874 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction()); 874 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction());
875 state.UpdateState(state.NextAction()); 875 state.UpdateState(state.NextAction());
876 876
877 // Expect to be told to begin context recreation, independent of 877 // Expect to be told to begin context recreation, independent of
878 // BeginFrame state. 878 // BeginFrame state.
879 state.DidEnterBeginFrame(); 879 state.DidEnterBeginFrame(BeginFrameArgs::CreateForTesting());
880 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION, 880 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION,
881 state.NextAction()); 881 state.NextAction());
882 state.DidLeaveBeginFrame(); 882 state.DidLeaveBeginFrame();
883 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION, 883 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION,
884 state.NextAction()); 884 state.NextAction());
885 } 885 }
886 886
887 TEST(SchedulerStateMachineTest, 887 TEST(SchedulerStateMachineTest,
888 TestContextLostWhileCommitInProgressAndAnotherCommitRequested) { 888 TestContextLostWhileCommitInProgressAndAnotherCommitRequested) {
889 SchedulerSettings default_scheduler_settings; 889 SchedulerSettings default_scheduler_settings;
890 StateMachine state(default_scheduler_settings); 890 StateMachine state(default_scheduler_settings);
891 state.SetCanStart(); 891 state.SetCanStart();
892 state.UpdateState(state.NextAction()); 892 state.UpdateState(state.NextAction());
893 state.DidCreateAndInitializeOutputSurface(); 893 state.DidCreateAndInitializeOutputSurface();
894 state.SetVisible(true); 894 state.SetVisible(true);
895 state.SetCanDraw(true); 895 state.SetCanDraw(true);
896 896
897 // Get a commit in flight. 897 // Get a commit in flight.
898 state.SetNeedsCommit(); 898 state.SetNeedsCommit();
899 EXPECT_EQ(SchedulerStateMachine::ACTION_SEND_BEGIN_FRAME_TO_MAIN_THREAD, 899 EXPECT_EQ(SchedulerStateMachine::ACTION_SEND_BEGIN_FRAME_TO_MAIN_THREAD,
900 state.NextAction()); 900 state.NextAction());
901 state.UpdateState(state.NextAction()); 901 state.UpdateState(state.NextAction());
902 902
903 // Set damage and expect a draw. 903 // Set damage and expect a draw.
904 state.SetNeedsRedraw(true); 904 state.SetNeedsRedraw(true);
905 state.DidEnterBeginFrame(); 905 state.DidEnterBeginFrame(BeginFrameArgs::CreateForTesting());
906 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction()); 906 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction());
907 state.UpdateState(state.NextAction()); 907 state.UpdateState(state.NextAction());
908 state.DidLeaveBeginFrame(); 908 state.DidLeaveBeginFrame();
909 909
910 // Cause a lost context while the begin frame is in flight 910 // Cause a lost context while the begin frame is in flight
911 // for the main thread. 911 // for the main thread.
912 state.DidLoseOutputSurface(); 912 state.DidLoseOutputSurface();
913 913
914 // Ask for another draw and also set needs commit. Expect nothing happens. 914 // Ask for another draw and also set needs commit. Expect nothing happens.
915 state.SetNeedsRedraw(true); 915 state.SetNeedsRedraw(true);
916 state.SetNeedsCommit(); 916 state.SetNeedsCommit();
917 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); 917 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction());
918 918
919 // Finish the frame, and commit. 919 // Finish the frame, and commit.
920 state.FinishCommit(); 920 state.FinishCommit();
921 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction()); 921 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction());
922 state.UpdateState(state.NextAction()); 922 state.UpdateState(state.NextAction());
923 923
924 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW, 924 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW,
925 state.CommitState()); 925 state.CommitState());
926 926
927 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction()); 927 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction());
928 state.UpdateState(state.NextAction()); 928 state.UpdateState(state.NextAction());
929 929
930 // Expect to be told to begin context recreation, independent of 930 // Expect to be told to begin context recreation, independent of
931 // BeginFrame state 931 // BeginFrame state
932 state.DidEnterBeginFrame(); 932 state.DidEnterBeginFrame(BeginFrameArgs::CreateForTesting());
933 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION, 933 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION,
934 state.NextAction()); 934 state.NextAction());
935 state.DidLeaveBeginFrame(); 935 state.DidLeaveBeginFrame();
936 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION, 936 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION,
937 state.NextAction()); 937 state.NextAction());
938 } 938 }
939 939
940 TEST(SchedulerStateMachineTest, TestFinishAllRenderingWhileContextLost) { 940 TEST(SchedulerStateMachineTest, TestFinishAllRenderingWhileContextLost) {
941 SchedulerSettings default_scheduler_settings; 941 SchedulerSettings default_scheduler_settings;
942 StateMachine state(default_scheduler_settings); 942 StateMachine state(default_scheduler_settings);
943 state.SetCanStart(); 943 state.SetCanStart();
944 state.UpdateState(state.NextAction()); 944 state.UpdateState(state.NextAction());
945 state.DidCreateAndInitializeOutputSurface(); 945 state.DidCreateAndInitializeOutputSurface();
946 state.SetVisible(true); 946 state.SetVisible(true);
947 state.SetCanDraw(true); 947 state.SetCanDraw(true);
948 948
949 // Cause a lost context lost. 949 // Cause a lost context lost.
950 state.DidLoseOutputSurface(); 950 state.DidLoseOutputSurface();
951 951
952 // Ask a forced redraw and verify it ocurrs. 952 // Ask a forced redraw and verify it ocurrs.
953 state.SetNeedsForcedRedraw(true); 953 state.SetNeedsForcedRedraw(true);
954 state.DidEnterBeginFrame(); 954 state.DidEnterBeginFrame(BeginFrameArgs::CreateForTesting());
955 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_FORCED, state.NextAction()); 955 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_FORCED, state.NextAction());
956 state.DidLeaveBeginFrame(); 956 state.DidLeaveBeginFrame();
957 957
958 // Clear the forced redraw bit. 958 // Clear the forced redraw bit.
959 state.SetNeedsForcedRedraw(false); 959 state.SetNeedsForcedRedraw(false);
960 960
961 // Expect to be told to begin context recreation, independent of 961 // Expect to be told to begin context recreation, independent of
962 // BeginFrame state 962 // BeginFrame state
963 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION, 963 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION,
964 state.NextAction()); 964 state.NextAction());
965 state.UpdateState(state.NextAction()); 965 state.UpdateState(state.NextAction());
966 966
967 // Ask a forced redraw and verify it ocurrs. 967 // Ask a forced redraw and verify it ocurrs.
968 state.SetNeedsForcedRedraw(true); 968 state.SetNeedsForcedRedraw(true);
969 state.DidEnterBeginFrame(); 969 state.DidEnterBeginFrame(BeginFrameArgs::CreateForTesting());
970 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_FORCED, state.NextAction()); 970 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_FORCED, state.NextAction());
971 state.DidLeaveBeginFrame(); 971 state.DidLeaveBeginFrame();
972 } 972 }
973 973
974 TEST(SchedulerStateMachineTest, DontDrawBeforeCommitAfterLostOutputSurface) { 974 TEST(SchedulerStateMachineTest, DontDrawBeforeCommitAfterLostOutputSurface) {
975 SchedulerSettings default_scheduler_settings; 975 SchedulerSettings default_scheduler_settings;
976 StateMachine state(default_scheduler_settings); 976 StateMachine state(default_scheduler_settings);
977 state.SetCanStart(); 977 state.SetCanStart();
978 state.UpdateState(state.NextAction()); 978 state.UpdateState(state.NextAction());
979 state.DidCreateAndInitializeOutputSurface(); 979 state.DidCreateAndInitializeOutputSurface();
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
1093 state.UpdateState(state.NextAction()); 1093 state.UpdateState(state.NextAction());
1094 state.FinishCommit(); 1094 state.FinishCommit();
1095 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction()); 1095 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction());
1096 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT, 1096 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT,
1097 state.CommitState()); 1097 state.CommitState());
1098 state.UpdateState(state.NextAction()); 1098 state.UpdateState(state.NextAction());
1099 1099
1100 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_FORCED_DRAW, 1100 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_FORCED_DRAW,
1101 state.CommitState()); 1101 state.CommitState());
1102 1102
1103 state.DidEnterBeginFrame(); 1103 state.DidEnterBeginFrame(BeginFrameArgs::CreateForTesting());
1104 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); 1104 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction());
1105 state.SetNeedsForcedRedraw(true); 1105 state.SetNeedsForcedRedraw(true);
1106 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_FORCED, state.NextAction()); 1106 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_FORCED, state.NextAction());
1107 state.UpdateState(state.NextAction()); 1107 state.UpdateState(state.NextAction());
1108 state.DidDrawIfPossibleCompleted(true); 1108 state.DidDrawIfPossibleCompleted(true);
1109 state.DidLeaveBeginFrame(); 1109 state.DidLeaveBeginFrame();
1110 1110
1111 // Should be waiting for the normal begin frame from the main thread. 1111 // Should be waiting for the normal begin frame from the main thread.
1112 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS, 1112 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS,
1113 state.CommitState()); 1113 state.CommitState());
(...skipping 18 matching lines...) Expand all
1132 state.UpdateState(state.NextAction()); 1132 state.UpdateState(state.NextAction());
1133 state.FinishCommit(); 1133 state.FinishCommit();
1134 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction()); 1134 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction());
1135 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT, 1135 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT,
1136 state.CommitState()); 1136 state.CommitState());
1137 state.UpdateState(state.NextAction()); 1137 state.UpdateState(state.NextAction());
1138 1138
1139 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_FORCED_DRAW, 1139 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_FORCED_DRAW,
1140 state.CommitState()); 1140 state.CommitState());
1141 1141
1142 state.DidEnterBeginFrame(); 1142 state.DidEnterBeginFrame(BeginFrameArgs::CreateForTesting());
1143 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); 1143 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction());
1144 state.SetNeedsForcedRedraw(true); 1144 state.SetNeedsForcedRedraw(true);
1145 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_FORCED, state.NextAction()); 1145 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_FORCED, state.NextAction());
1146 state.UpdateState(state.NextAction()); 1146 state.UpdateState(state.NextAction());
1147 state.DidDrawIfPossibleCompleted(true); 1147 state.DidDrawIfPossibleCompleted(true);
1148 state.DidLeaveBeginFrame(); 1148 state.DidLeaveBeginFrame();
1149 1149
1150 // Should be waiting for the normal begin frame from the main thread. 1150 // Should be waiting for the normal begin frame from the main thread.
1151 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS, 1151 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS,
1152 state.CommitState()) << state.ToString(); 1152 state.CommitState()) << state.ToString();
(...skipping 18 matching lines...) Expand all
1171 state.FinishCommit(); 1171 state.FinishCommit();
1172 1172
1173 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction()); 1173 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction());
1174 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT, 1174 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT,
1175 state.CommitState()); 1175 state.CommitState());
1176 state.UpdateState(state.NextAction()); 1176 state.UpdateState(state.NextAction());
1177 1177
1178 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_FORCED_DRAW, 1178 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_FORCED_DRAW,
1179 state.CommitState()); 1179 state.CommitState());
1180 1180
1181 state.DidEnterBeginFrame(); 1181 state.DidEnterBeginFrame(BeginFrameArgs::CreateForTesting());
1182 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); 1182 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction());
1183 state.SetNeedsForcedRedraw(true); 1183 state.SetNeedsForcedRedraw(true);
1184 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_FORCED, state.NextAction()); 1184 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_FORCED, state.NextAction());
1185 state.UpdateState(state.NextAction()); 1185 state.UpdateState(state.NextAction());
1186 state.DidDrawIfPossibleCompleted(true); 1186 state.DidDrawIfPossibleCompleted(true);
1187 state.DidLeaveBeginFrame(); 1187 state.DidLeaveBeginFrame();
1188 1188
1189 // Should be waiting for the main thread's begin frame. 1189 // Should be waiting for the main thread's begin frame.
1190 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS, 1190 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS,
1191 state.CommitState()) << state.ToString(); 1191 state.CommitState()) << state.ToString();
(...skipping 25 matching lines...) Expand all
1217 state.FinishCommit(); 1217 state.FinishCommit();
1218 1218
1219 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction()); 1219 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction());
1220 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT, 1220 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT,
1221 state.CommitState()); 1221 state.CommitState());
1222 state.UpdateState(state.NextAction()); 1222 state.UpdateState(state.NextAction());
1223 1223
1224 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_FORCED_DRAW, 1224 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_FORCED_DRAW,
1225 state.CommitState()); 1225 state.CommitState());
1226 1226
1227 state.DidEnterBeginFrame(); 1227 state.DidEnterBeginFrame(BeginFrameArgs::CreateForTesting());
1228 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); 1228 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction());
1229 state.SetNeedsForcedRedraw(true); 1229 state.SetNeedsForcedRedraw(true);
1230 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_FORCED, state.NextAction()); 1230 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_FORCED, state.NextAction());
1231 state.UpdateState(state.NextAction()); 1231 state.UpdateState(state.NextAction());
1232 state.DidDrawIfPossibleCompleted(true); 1232 state.DidDrawIfPossibleCompleted(true);
1233 state.DidLeaveBeginFrame(); 1233 state.DidLeaveBeginFrame();
1234 } 1234 }
1235 1235
1236 TEST(SchedulerStateMachineTest, ReportIfNotDrawing) { 1236 TEST(SchedulerStateMachineTest, ReportIfNotDrawing) {
1237 SchedulerSettings default_scheduler_settings; 1237 SchedulerSettings default_scheduler_settings;
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
1287 EXPECT_TRUE(state.DrawSuspendedUntilCommit()); 1287 EXPECT_TRUE(state.DrawSuspendedUntilCommit());
1288 1288
1289 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction()); 1289 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction());
1290 1290
1291 state.UpdateState(state.NextAction()); 1291 state.UpdateState(state.NextAction());
1292 EXPECT_FALSE(state.DrawSuspendedUntilCommit()); 1292 EXPECT_FALSE(state.DrawSuspendedUntilCommit());
1293 } 1293 }
1294 1294
1295 } // namespace 1295 } // namespace
1296 } // namespace cc 1296 } // namespace cc
OLDNEW
« no previous file with comments | « cc/scheduler/scheduler_state_machine.cc ('k') | cc/scheduler/scheduler_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698