OLD | NEW |
1 // Copyright 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "config.h" | 5 #include "config.h" |
6 | 6 |
7 #include "CCSchedulerStateMachine.h" | 7 #include "CCSchedulerStateMachine.h" |
8 | 8 |
9 #include <gtest/gtest.h> | 9 #include <gtest/gtest.h> |
10 #include <wtf/text/CString.h> | 10 #include <wtf/text/CString.h> |
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
109 state.updateState(CCSchedulerStateMachine::ACTION_BEGIN_FRAME); | 109 state.updateState(CCSchedulerStateMachine::ACTION_BEGIN_FRAME); |
110 EXPECT_EQ(CCSchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS, state
.commitState()); | 110 EXPECT_EQ(CCSchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS, state
.commitState()); |
111 EXPECT_FALSE(state.needsCommit()); | 111 EXPECT_FALSE(state.needsCommit()); |
112 EXPECT_FALSE(state.vsyncCallbackNeeded()); | 112 EXPECT_FALSE(state.vsyncCallbackNeeded()); |
113 } | 113 } |
114 } | 114 } |
115 | 115 |
116 TEST(CCSchedulerStateMachineTest, TestSetForcedRedrawDoesNotSetsNormalRedraw) | 116 TEST(CCSchedulerStateMachineTest, TestSetForcedRedrawDoesNotSetsNormalRedraw) |
117 { | 117 { |
118 CCSchedulerStateMachine state; | 118 CCSchedulerStateMachine state; |
| 119 state.setCanDraw(true); |
119 state.setNeedsForcedRedraw(); | 120 state.setNeedsForcedRedraw(); |
120 EXPECT_FALSE(state.redrawPending()); | 121 EXPECT_FALSE(state.redrawPending()); |
121 EXPECT_TRUE(state.vsyncCallbackNeeded()); | 122 EXPECT_TRUE(state.vsyncCallbackNeeded()); |
122 } | 123 } |
123 | 124 |
124 TEST(CCSchedulerStateMachineTest, TestFailedDrawSetsNeedsCommitAndDoesNotDrawAga
in) | 125 TEST(CCSchedulerStateMachineTest, TestFailedDrawSetsNeedsCommitAndDoesNotDrawAga
in) |
125 { | 126 { |
126 CCSchedulerStateMachine state; | 127 CCSchedulerStateMachine state; |
127 state.setCanBeginFrame(true); | 128 state.setCanBeginFrame(true); |
128 state.setVisible(true); | 129 state.setVisible(true); |
| 130 state.setCanDraw(true); |
129 state.setNeedsRedraw(); | 131 state.setNeedsRedraw(); |
130 EXPECT_TRUE(state.redrawPending()); | 132 EXPECT_TRUE(state.redrawPending()); |
131 EXPECT_TRUE(state.vsyncCallbackNeeded()); | 133 EXPECT_TRUE(state.vsyncCallbackNeeded()); |
132 state.didEnterVSync(); | 134 state.didEnterVSync(); |
133 | 135 |
134 // We're drawing now. | 136 // We're drawing now. |
135 EXPECT_EQ(CCSchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.nextAction
()); | 137 EXPECT_EQ(CCSchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.nextAction
()); |
136 state.updateState(CCSchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); | 138 state.updateState(CCSchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); |
137 EXPECT_EQ(CCSchedulerStateMachine::ACTION_NONE, state.nextAction()); | 139 EXPECT_EQ(CCSchedulerStateMachine::ACTION_NONE, state.nextAction()); |
138 EXPECT_FALSE(state.redrawPending()); | 140 EXPECT_FALSE(state.redrawPending()); |
139 EXPECT_FALSE(state.commitPending()); | 141 EXPECT_FALSE(state.commitPending()); |
140 | 142 |
141 // Failing the draw makes us require a commit. | 143 // Failing the draw makes us require a commit. |
142 state.didDrawIfPossibleCompleted(false); | 144 state.didDrawIfPossibleCompleted(false); |
143 EXPECT_EQ(CCSchedulerStateMachine::ACTION_BEGIN_FRAME, state.nextAction()); | 145 EXPECT_EQ(CCSchedulerStateMachine::ACTION_BEGIN_FRAME, state.nextAction()); |
144 state.updateState(CCSchedulerStateMachine::ACTION_BEGIN_FRAME); | 146 state.updateState(CCSchedulerStateMachine::ACTION_BEGIN_FRAME); |
145 EXPECT_TRUE(state.redrawPending()); | 147 EXPECT_TRUE(state.redrawPending()); |
146 EXPECT_TRUE(state.commitPending()); | 148 EXPECT_TRUE(state.commitPending()); |
147 } | 149 } |
148 | 150 |
149 TEST(CCSchedulerStateMachineTest, TestSetNeedsRedrawDuringFailedDrawDoesNotRemov
eNeedsRedraw) | 151 TEST(CCSchedulerStateMachineTest, TestSetNeedsRedrawDuringFailedDrawDoesNotRemov
eNeedsRedraw) |
150 { | 152 { |
151 CCSchedulerStateMachine state; | 153 CCSchedulerStateMachine state; |
152 state.setCanBeginFrame(true); | 154 state.setCanBeginFrame(true); |
153 state.setVisible(true); | 155 state.setVisible(true); |
| 156 state.setCanDraw(true); |
154 state.setNeedsRedraw(); | 157 state.setNeedsRedraw(); |
155 EXPECT_TRUE(state.redrawPending()); | 158 EXPECT_TRUE(state.redrawPending()); |
156 EXPECT_TRUE(state.vsyncCallbackNeeded()); | 159 EXPECT_TRUE(state.vsyncCallbackNeeded()); |
157 state.didEnterVSync(); | 160 state.didEnterVSync(); |
158 | 161 |
159 // We're drawing now. | 162 // We're drawing now. |
160 EXPECT_EQ(CCSchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.nextAction
()); | 163 EXPECT_EQ(CCSchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.nextAction
()); |
161 state.updateState(CCSchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); | 164 state.updateState(CCSchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); |
162 EXPECT_EQ(CCSchedulerStateMachine::ACTION_NONE, state.nextAction()); | 165 EXPECT_EQ(CCSchedulerStateMachine::ACTION_NONE, state.nextAction()); |
163 EXPECT_FALSE(state.redrawPending()); | 166 EXPECT_FALSE(state.redrawPending()); |
164 EXPECT_FALSE(state.commitPending()); | 167 EXPECT_FALSE(state.commitPending()); |
165 | 168 |
166 // While still in the same vsync callback, set needs redraw again. | 169 // While still in the same vsync callback, set needs redraw again. |
167 // This should not redraw. | 170 // This should not redraw. |
168 state.setNeedsRedraw(); | 171 state.setNeedsRedraw(); |
169 EXPECT_EQ(CCSchedulerStateMachine::ACTION_NONE, state.nextAction()); | 172 EXPECT_EQ(CCSchedulerStateMachine::ACTION_NONE, state.nextAction()); |
170 | 173 |
171 // Failing the draw makes us require a commit. | 174 // Failing the draw makes us require a commit. |
172 state.didDrawIfPossibleCompleted(false); | 175 state.didDrawIfPossibleCompleted(false); |
173 EXPECT_EQ(CCSchedulerStateMachine::ACTION_BEGIN_FRAME, state.nextAction()); | 176 EXPECT_EQ(CCSchedulerStateMachine::ACTION_BEGIN_FRAME, state.nextAction()); |
174 EXPECT_TRUE(state.redrawPending()); | 177 EXPECT_TRUE(state.redrawPending()); |
175 } | 178 } |
176 | 179 |
177 TEST(CCSchedulerStateMachineTest, TestCommitAfterFailedDrawAllowsDrawInSameFrame
) | 180 TEST(CCSchedulerStateMachineTest, TestCommitAfterFailedDrawAllowsDrawInSameFrame
) |
178 { | 181 { |
179 CCSchedulerStateMachine state; | 182 CCSchedulerStateMachine state; |
180 state.setCanBeginFrame(true); | 183 state.setCanBeginFrame(true); |
181 state.setVisible(true); | 184 state.setVisible(true); |
| 185 state.setCanDraw(true); |
182 | 186 |
183 // Start a commit. | 187 // Start a commit. |
184 state.setNeedsCommit(); | 188 state.setNeedsCommit(); |
185 EXPECT_EQ(CCSchedulerStateMachine::ACTION_BEGIN_FRAME, state.nextAction()); | 189 EXPECT_EQ(CCSchedulerStateMachine::ACTION_BEGIN_FRAME, state.nextAction()); |
186 state.updateState(CCSchedulerStateMachine::ACTION_BEGIN_FRAME); | 190 state.updateState(CCSchedulerStateMachine::ACTION_BEGIN_FRAME); |
187 EXPECT_TRUE(state.commitPending()); | 191 EXPECT_TRUE(state.commitPending()); |
188 | 192 |
189 // Then initiate a draw. | 193 // Then initiate a draw. |
190 state.setNeedsRedraw(); | 194 state.setNeedsRedraw(); |
191 EXPECT_TRUE(state.vsyncCallbackNeeded()); | 195 EXPECT_TRUE(state.vsyncCallbackNeeded()); |
(...skipping 20 matching lines...) Expand all Loading... |
212 | 216 |
213 // And we should be allowed to draw again. | 217 // And we should be allowed to draw again. |
214 EXPECT_EQ(CCSchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.nextAction
()); | 218 EXPECT_EQ(CCSchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.nextAction
()); |
215 } | 219 } |
216 | 220 |
217 TEST(CCSchedulerStateMachineTest, TestCommitAfterFailedAndSuccessfulDrawDoesNotA
llowDrawInSameFrame) | 221 TEST(CCSchedulerStateMachineTest, TestCommitAfterFailedAndSuccessfulDrawDoesNotA
llowDrawInSameFrame) |
218 { | 222 { |
219 CCSchedulerStateMachine state; | 223 CCSchedulerStateMachine state; |
220 state.setCanBeginFrame(true); | 224 state.setCanBeginFrame(true); |
221 state.setVisible(true); | 225 state.setVisible(true); |
| 226 state.setCanDraw(true); |
222 | 227 |
223 // Start a commit. | 228 // Start a commit. |
224 state.setNeedsCommit(); | 229 state.setNeedsCommit(); |
225 EXPECT_EQ(CCSchedulerStateMachine::ACTION_BEGIN_FRAME, state.nextAction()); | 230 EXPECT_EQ(CCSchedulerStateMachine::ACTION_BEGIN_FRAME, state.nextAction()); |
226 state.updateState(CCSchedulerStateMachine::ACTION_BEGIN_FRAME); | 231 state.updateState(CCSchedulerStateMachine::ACTION_BEGIN_FRAME); |
227 EXPECT_TRUE(state.commitPending()); | 232 EXPECT_TRUE(state.commitPending()); |
228 | 233 |
229 // Then initiate a draw. | 234 // Then initiate a draw. |
230 state.setNeedsRedraw(); | 235 state.setNeedsRedraw(); |
231 EXPECT_TRUE(state.vsyncCallbackNeeded()); | 236 EXPECT_TRUE(state.vsyncCallbackNeeded()); |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
263 | 268 |
264 // And we should not be allowed to draw again in the same frame.. | 269 // And we should not be allowed to draw again in the same frame.. |
265 EXPECT_EQ(CCSchedulerStateMachine::ACTION_NONE, state.nextAction()); | 270 EXPECT_EQ(CCSchedulerStateMachine::ACTION_NONE, state.nextAction()); |
266 } | 271 } |
267 | 272 |
268 TEST(CCSchedulerStateMachineTest, TestFailedDrawsWillEventuallyForceADrawAfterTh
eNextCommit) | 273 TEST(CCSchedulerStateMachineTest, TestFailedDrawsWillEventuallyForceADrawAfterTh
eNextCommit) |
269 { | 274 { |
270 CCSchedulerStateMachine state; | 275 CCSchedulerStateMachine state; |
271 state.setCanBeginFrame(true); | 276 state.setCanBeginFrame(true); |
272 state.setVisible(true); | 277 state.setVisible(true); |
| 278 state.setCanDraw(true); |
273 state.setMaximumNumberOfFailedDrawsBeforeDrawIsForced(1); | 279 state.setMaximumNumberOfFailedDrawsBeforeDrawIsForced(1); |
274 | 280 |
275 // Start a commit. | 281 // Start a commit. |
276 state.setNeedsCommit(); | 282 state.setNeedsCommit(); |
277 EXPECT_EQ(CCSchedulerStateMachine::ACTION_BEGIN_FRAME, state.nextAction()); | 283 EXPECT_EQ(CCSchedulerStateMachine::ACTION_BEGIN_FRAME, state.nextAction()); |
278 state.updateState(CCSchedulerStateMachine::ACTION_BEGIN_FRAME); | 284 state.updateState(CCSchedulerStateMachine::ACTION_BEGIN_FRAME); |
279 EXPECT_TRUE(state.commitPending()); | 285 EXPECT_TRUE(state.commitPending()); |
280 | 286 |
281 // Then initiate a draw. | 287 // Then initiate a draw. |
282 state.setNeedsRedraw(); | 288 state.setNeedsRedraw(); |
(...skipping 22 matching lines...) Expand all Loading... |
305 | 311 |
306 // The redraw should be forced in this case. | 312 // The redraw should be forced in this case. |
307 EXPECT_EQ(CCSchedulerStateMachine::ACTION_DRAW_FORCED, state.nextAction()); | 313 EXPECT_EQ(CCSchedulerStateMachine::ACTION_DRAW_FORCED, state.nextAction()); |
308 } | 314 } |
309 | 315 |
310 TEST(CCSchedulerStateMachineTest, TestFailedDrawIsRetriedNextVSync) | 316 TEST(CCSchedulerStateMachineTest, TestFailedDrawIsRetriedNextVSync) |
311 { | 317 { |
312 CCSchedulerStateMachine state; | 318 CCSchedulerStateMachine state; |
313 state.setCanBeginFrame(true); | 319 state.setCanBeginFrame(true); |
314 state.setVisible(true); | 320 state.setVisible(true); |
| 321 state.setCanDraw(true); |
315 | 322 |
316 // Start a draw. | 323 // Start a draw. |
317 state.setNeedsRedraw(); | 324 state.setNeedsRedraw(); |
318 EXPECT_TRUE(state.vsyncCallbackNeeded()); | 325 EXPECT_TRUE(state.vsyncCallbackNeeded()); |
319 state.didEnterVSync(); | 326 state.didEnterVSync(); |
320 EXPECT_EQ(CCSchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.nextAction
()); | 327 EXPECT_EQ(CCSchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.nextAction
()); |
321 EXPECT_TRUE(state.redrawPending()); | 328 EXPECT_TRUE(state.redrawPending()); |
322 | 329 |
323 // Fail the draw. | 330 // Fail the draw. |
324 state.updateState(CCSchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); | 331 state.updateState(CCSchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); |
325 EXPECT_EQ(CCSchedulerStateMachine::ACTION_NONE, state.nextAction()); | 332 EXPECT_EQ(CCSchedulerStateMachine::ACTION_NONE, state.nextAction()); |
326 state.didDrawIfPossibleCompleted(false); | 333 state.didDrawIfPossibleCompleted(false); |
327 EXPECT_TRUE(state.redrawPending()); | 334 EXPECT_TRUE(state.redrawPending()); |
328 | 335 |
329 // We should not be trying to draw again now, but we have a commit pending. | 336 // We should not be trying to draw again now, but we have a commit pending. |
330 EXPECT_EQ(CCSchedulerStateMachine::ACTION_BEGIN_FRAME, state.nextAction()); | 337 EXPECT_EQ(CCSchedulerStateMachine::ACTION_BEGIN_FRAME, state.nextAction()); |
331 | 338 |
332 state.didLeaveVSync(); | 339 state.didLeaveVSync(); |
333 EXPECT_TRUE(state.vsyncCallbackNeeded()); | 340 EXPECT_TRUE(state.vsyncCallbackNeeded()); |
334 state.didEnterVSync(); | 341 state.didEnterVSync(); |
335 | 342 |
336 // We should try draw again in the next vsync. | 343 // We should try draw again in the next vsync. |
337 EXPECT_EQ(CCSchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.nextAction
()); | 344 EXPECT_EQ(CCSchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.nextAction
()); |
338 } | 345 } |
339 | 346 |
340 TEST(CCSchedulerStateMachineTest, TestDoestDrawTwiceInSameFrame) | 347 TEST(CCSchedulerStateMachineTest, TestDoestDrawTwiceInSameFrame) |
341 { | 348 { |
342 CCSchedulerStateMachine state; | 349 CCSchedulerStateMachine state; |
343 state.setVisible(true); | 350 state.setVisible(true); |
| 351 state.setCanDraw(true); |
344 state.setNeedsRedraw(); | 352 state.setNeedsRedraw(); |
345 EXPECT_TRUE(state.vsyncCallbackNeeded()); | 353 EXPECT_TRUE(state.vsyncCallbackNeeded()); |
346 state.didEnterVSync(); | 354 state.didEnterVSync(); |
347 EXPECT_EQ(CCSchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.nextAction
()); | 355 EXPECT_EQ(CCSchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.nextAction
()); |
348 state.updateState(CCSchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); | 356 state.updateState(CCSchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); |
349 | 357 |
350 // While still in the same vsync callback, set needs redraw again. | 358 // While still in the same vsync callback, set needs redraw again. |
351 // This should not redraw. | 359 // This should not redraw. |
352 state.setNeedsRedraw(); | 360 state.setNeedsRedraw(); |
353 EXPECT_EQ(CCSchedulerStateMachine::ACTION_NONE, state.nextAction()); | 361 EXPECT_EQ(CCSchedulerStateMachine::ACTION_NONE, state.nextAction()); |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
386 // Case 2: needsCommit=true | 394 // Case 2: needsCommit=true |
387 state.setNeedsCommit(true); | 395 state.setNeedsCommit(true); |
388 EXPECT_NE(CCSchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.ne
xtAction()); | 396 EXPECT_NE(CCSchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.ne
xtAction()); |
389 } | 397 } |
390 } | 398 } |
391 | 399 |
392 // When on vsync, or not on vsync but needsForcedRedraw set, should always d
raw except if you're ready to commit, in which case commit. | 400 // When on vsync, or not on vsync but needsForcedRedraw set, should always d
raw except if you're ready to commit, in which case commit. |
393 for (size_t i = 0; i < numCommitStates; ++i) { | 401 for (size_t i = 0; i < numCommitStates; ++i) { |
394 for (unsigned j = 0; j < 2; ++j) { | 402 for (unsigned j = 0; j < 2; ++j) { |
395 StateMachine state; | 403 StateMachine state; |
| 404 state.setCanDraw(true); |
396 state.setCommitState(allCommitStates[i]); | 405 state.setCommitState(allCommitStates[i]); |
397 bool forcedDraw = j; | 406 bool forcedDraw = j; |
398 if (!forcedDraw) { | 407 if (!forcedDraw) { |
399 state.didEnterVSync(); | 408 state.didEnterVSync(); |
400 state.setNeedsRedraw(true); | 409 state.setNeedsRedraw(true); |
401 state.setVisible(true); | 410 state.setVisible(true); |
402 } else | 411 } else |
403 state.setNeedsForcedRedraw(true); | 412 state.setNeedsForcedRedraw(true); |
404 | 413 |
405 CCSchedulerStateMachine::Action expectedAction; | 414 CCSchedulerStateMachine::Action expectedAction; |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
498 state.setCommitState(CCSchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST
_DRAW); | 507 state.setCommitState(CCSchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST
_DRAW); |
499 state.setCanBeginFrame(true); | 508 state.setCanBeginFrame(true); |
500 state.setNeedsCommit(true); | 509 state.setNeedsCommit(true); |
501 state.setNeedsRedraw(true); | 510 state.setNeedsRedraw(true); |
502 state.setUpdateMoreResourcesPending(false); | 511 state.setUpdateMoreResourcesPending(false); |
503 state.setVisible(true); | 512 state.setVisible(true); |
504 state.setCanDraw(false); | 513 state.setCanDraw(false); |
505 EXPECT_EQ(CCSchedulerStateMachine::ACTION_BEGIN_FRAME, state.nextAction()); | 514 EXPECT_EQ(CCSchedulerStateMachine::ACTION_BEGIN_FRAME, state.nextAction()); |
506 } | 515 } |
507 | 516 |
| 517 TEST(CCSchedulerStateMachineTest, TestVsyncCallbackNeededOnCanDrawAndResourceUpd
ates) |
| 518 { |
| 519 StateMachine state; |
| 520 state.setCommitState(CCSchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST
_DRAW); |
| 521 state.setCanBeginFrame(true); |
| 522 state.setNeedsCommit(true); |
| 523 state.setNeedsRedraw(true); |
| 524 state.setUpdateMoreResourcesPending(false); |
| 525 state.setVisible(true); |
| 526 state.setCanDraw(false); |
| 527 EXPECT_FALSE(state.vsyncCallbackNeeded()); |
| 528 |
| 529 state.setUpdateMoreResourcesPending(true); |
| 530 EXPECT_TRUE(state.vsyncCallbackNeeded()); |
| 531 |
| 532 state.setUpdateMoreResourcesPending(false); |
| 533 EXPECT_FALSE(state.vsyncCallbackNeeded()); |
| 534 |
| 535 state.setCanDraw(true); |
| 536 EXPECT_TRUE(state.vsyncCallbackNeeded()); |
| 537 } |
| 538 |
508 TEST(CCSchedulerStateMachineTest, TestUpdates_NoRedraw_OneRoundOfUpdates) | 539 TEST(CCSchedulerStateMachineTest, TestUpdates_NoRedraw_OneRoundOfUpdates) |
509 { | 540 { |
510 StateMachine state; | 541 StateMachine state; |
511 state.setCommitState(CCSchedulerStateMachine::COMMIT_STATE_UPDATING_RESOURCE
S); | 542 state.setCommitState(CCSchedulerStateMachine::COMMIT_STATE_UPDATING_RESOURCE
S); |
512 state.setNeedsRedraw(false); | 543 state.setNeedsRedraw(false); |
513 state.setUpdateMoreResourcesPending(false); | 544 state.setUpdateMoreResourcesPending(false); |
514 state.setVisible(true); | 545 state.setVisible(true); |
| 546 state.setCanDraw(true); |
515 | 547 |
516 // Verify we begin update, both for vsync and not vsync. | 548 // Verify we begin update, both for vsync and not vsync. |
517 EXPECT_EQ(CCSchedulerStateMachine::ACTION_BEGIN_UPDATE_MORE_RESOURCES, state
.nextAction()); | 549 EXPECT_EQ(CCSchedulerStateMachine::ACTION_BEGIN_UPDATE_MORE_RESOURCES, state
.nextAction()); |
518 state.didEnterVSync(); | 550 state.didEnterVSync(); |
519 EXPECT_EQ(CCSchedulerStateMachine::ACTION_BEGIN_UPDATE_MORE_RESOURCES, state
.nextAction()); | 551 EXPECT_EQ(CCSchedulerStateMachine::ACTION_BEGIN_UPDATE_MORE_RESOURCES, state
.nextAction()); |
520 | 552 |
521 // Begin an update. | 553 // Begin an update. |
522 state.updateState(CCSchedulerStateMachine::ACTION_BEGIN_UPDATE_MORE_RESOURCE
S); | 554 state.updateState(CCSchedulerStateMachine::ACTION_BEGIN_UPDATE_MORE_RESOURCE
S); |
523 | 555 |
524 // Verify we don't do anything, both for vsync and not vsync. | 556 // Verify we don't do anything, both for vsync and not vsync. |
525 state.didLeaveVSync(); | 557 state.didLeaveVSync(); |
526 EXPECT_EQ(CCSchedulerStateMachine::ACTION_NONE, state.nextAction()); | 558 EXPECT_EQ(CCSchedulerStateMachine::ACTION_NONE, state.nextAction()); |
527 state.didEnterVSync(); | 559 state.didEnterVSync(); |
528 EXPECT_EQ(CCSchedulerStateMachine::ACTION_NONE, state.nextAction()); | 560 EXPECT_EQ(CCSchedulerStateMachine::ACTION_NONE, state.nextAction()); |
529 | 561 |
530 // End update with no more updates pending. | 562 // End update with no more updates pending. |
531 state.beginUpdateMoreResourcesComplete(false); | 563 state.beginUpdateMoreResourcesComplete(false); |
532 state.didLeaveVSync(); | 564 state.didLeaveVSync(); |
533 EXPECT_EQ(CCSchedulerStateMachine::ACTION_COMMIT, state.nextAction()); | 565 EXPECT_EQ(CCSchedulerStateMachine::ACTION_COMMIT, state.nextAction()); |
534 } | 566 } |
535 | 567 |
536 TEST(CCSchedulerStateMachineTest, TestUpdates_NoRedraw_TwoRoundsOfUpdates) | 568 TEST(CCSchedulerStateMachineTest, TestUpdates_NoRedraw_TwoRoundsOfUpdates) |
537 { | 569 { |
538 StateMachine state; | 570 StateMachine state; |
539 state.setCommitState(CCSchedulerStateMachine::COMMIT_STATE_UPDATING_RESOURCE
S); | 571 state.setCommitState(CCSchedulerStateMachine::COMMIT_STATE_UPDATING_RESOURCE
S); |
540 state.setNeedsRedraw(false); | 572 state.setNeedsRedraw(false); |
541 state.setUpdateMoreResourcesPending(false); | 573 state.setUpdateMoreResourcesPending(false); |
542 state.setVisible(true); | 574 state.setVisible(true); |
| 575 state.setCanDraw(true); |
543 | 576 |
544 // Verify the update begins, both for vsync and not vsync. | 577 // Verify the update begins, both for vsync and not vsync. |
545 state.didEnterVSync(); | 578 state.didEnterVSync(); |
546 EXPECT_EQ(CCSchedulerStateMachine::ACTION_BEGIN_UPDATE_MORE_RESOURCES, state
.nextAction()); | 579 EXPECT_EQ(CCSchedulerStateMachine::ACTION_BEGIN_UPDATE_MORE_RESOURCES, state
.nextAction()); |
547 state.didLeaveVSync(); | 580 state.didLeaveVSync(); |
548 EXPECT_EQ(CCSchedulerStateMachine::ACTION_BEGIN_UPDATE_MORE_RESOURCES, state
.nextAction()); | 581 EXPECT_EQ(CCSchedulerStateMachine::ACTION_BEGIN_UPDATE_MORE_RESOURCES, state
.nextAction()); |
549 | 582 |
550 // Begin an update. | 583 // Begin an update. |
551 state.updateState(CCSchedulerStateMachine::ACTION_BEGIN_UPDATE_MORE_RESOURCE
S); | 584 state.updateState(CCSchedulerStateMachine::ACTION_BEGIN_UPDATE_MORE_RESOURCE
S); |
552 | 585 |
(...skipping 19 matching lines...) Expand all Loading... |
572 state.didLeaveVSync(); | 605 state.didLeaveVSync(); |
573 EXPECT_EQ(CCSchedulerStateMachine::ACTION_COMMIT, state.nextAction()); | 606 EXPECT_EQ(CCSchedulerStateMachine::ACTION_COMMIT, state.nextAction()); |
574 state.didEnterVSync(); | 607 state.didEnterVSync(); |
575 EXPECT_EQ(CCSchedulerStateMachine::ACTION_COMMIT, state.nextAction()); | 608 EXPECT_EQ(CCSchedulerStateMachine::ACTION_COMMIT, state.nextAction()); |
576 } | 609 } |
577 | 610 |
578 | 611 |
579 TEST(CCSchedulerStateMachineTest, TestVSyncNeededWhenUpdatesPendingButInvisible) | 612 TEST(CCSchedulerStateMachineTest, TestVSyncNeededWhenUpdatesPendingButInvisible) |
580 { | 613 { |
581 StateMachine state; | 614 StateMachine state; |
| 615 state.setCanDraw(true); |
582 state.setCommitState(CCSchedulerStateMachine::COMMIT_STATE_UPDATING_RESOURCE
S); | 616 state.setCommitState(CCSchedulerStateMachine::COMMIT_STATE_UPDATING_RESOURCE
S); |
583 state.setNeedsRedraw(false); | 617 state.setNeedsRedraw(false); |
584 state.setVisible(false); | 618 state.setVisible(false); |
585 state.setUpdateMoreResourcesPending(true); | 619 state.setUpdateMoreResourcesPending(true); |
586 EXPECT_TRUE(state.vsyncCallbackNeeded()); | 620 EXPECT_TRUE(state.vsyncCallbackNeeded()); |
587 | 621 |
588 state.setUpdateMoreResourcesPending(false); | 622 state.setUpdateMoreResourcesPending(false); |
589 EXPECT_TRUE(state.vsyncCallbackNeeded()); | 623 EXPECT_TRUE(state.vsyncCallbackNeeded()); |
590 } | 624 } |
591 | 625 |
592 TEST(CCSchedulerStateMachineTest, TestUpdates_WithRedraw_OneRoundOfUpdates) | 626 TEST(CCSchedulerStateMachineTest, TestUpdates_WithRedraw_OneRoundOfUpdates) |
593 { | 627 { |
594 StateMachine state; | 628 StateMachine state; |
595 state.setCommitState(CCSchedulerStateMachine::COMMIT_STATE_UPDATING_RESOURCE
S); | 629 state.setCommitState(CCSchedulerStateMachine::COMMIT_STATE_UPDATING_RESOURCE
S); |
596 state.setNeedsRedraw(true); | 630 state.setNeedsRedraw(true); |
597 state.setUpdateMoreResourcesPending(false); | 631 state.setUpdateMoreResourcesPending(false); |
598 state.setVisible(true); | 632 state.setVisible(true); |
| 633 state.setCanDraw(true); |
599 EXPECT_EQ(CCSchedulerStateMachine::ACTION_BEGIN_UPDATE_MORE_RESOURCES, state
.nextAction()); | 634 EXPECT_EQ(CCSchedulerStateMachine::ACTION_BEGIN_UPDATE_MORE_RESOURCES, state
.nextAction()); |
600 | 635 |
601 // Begin an update. | 636 // Begin an update. |
602 state.updateState(CCSchedulerStateMachine::ACTION_BEGIN_UPDATE_MORE_RESOURCE
S); | 637 state.updateState(CCSchedulerStateMachine::ACTION_BEGIN_UPDATE_MORE_RESOURCE
S); |
603 | 638 |
604 // Ensure we draw on the next vsync even though an update is in-progress. | 639 // Ensure we draw on the next vsync even though an update is in-progress. |
605 state.didEnterVSync(); | 640 state.didEnterVSync(); |
606 EXPECT_EQ(CCSchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.nextAction
()); | 641 EXPECT_EQ(CCSchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.nextAction
()); |
607 state.updateState(CCSchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); | 642 state.updateState(CCSchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); |
608 state.didDrawIfPossibleCompleted(true); | 643 state.didDrawIfPossibleCompleted(true); |
(...skipping 27 matching lines...) Expand all Loading... |
636 state.didEnterVSync(); | 671 state.didEnterVSync(); |
637 EXPECT_EQ(CCSchedulerStateMachine::ACTION_COMMIT, state.nextAction()); | 672 EXPECT_EQ(CCSchedulerStateMachine::ACTION_COMMIT, state.nextAction()); |
638 } | 673 } |
639 | 674 |
640 TEST(CCSchedulerStateMachineTest, TestSetNeedsCommitIsNotLost) | 675 TEST(CCSchedulerStateMachineTest, TestSetNeedsCommitIsNotLost) |
641 { | 676 { |
642 StateMachine state; | 677 StateMachine state; |
643 state.setCanBeginFrame(true); | 678 state.setCanBeginFrame(true); |
644 state.setNeedsCommit(true); | 679 state.setNeedsCommit(true); |
645 state.setVisible(true); | 680 state.setVisible(true); |
| 681 state.setCanDraw(true); |
646 | 682 |
647 // Begin the frame. | 683 // Begin the frame. |
648 EXPECT_EQ(CCSchedulerStateMachine::ACTION_BEGIN_FRAME, state.nextAction()); | 684 EXPECT_EQ(CCSchedulerStateMachine::ACTION_BEGIN_FRAME, state.nextAction()); |
649 state.updateState(state.nextAction()); | 685 state.updateState(state.nextAction()); |
650 EXPECT_EQ(CCSchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS, state.com
mitState()); | 686 EXPECT_EQ(CCSchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS, state.com
mitState()); |
651 | 687 |
652 // Now, while the frame is in progress, set another commit. | 688 // Now, while the frame is in progress, set another commit. |
653 state.setNeedsCommit(true); | 689 state.setNeedsCommit(true); |
654 EXPECT_TRUE(state.needsCommit()); | 690 EXPECT_TRUE(state.needsCommit()); |
655 | 691 |
(...skipping 22 matching lines...) Expand all Loading... |
678 // Verify that another commit will begin. | 714 // Verify that another commit will begin. |
679 state.didLeaveVSync(); | 715 state.didLeaveVSync(); |
680 EXPECT_EQ(CCSchedulerStateMachine::ACTION_BEGIN_FRAME, state.nextAction()); | 716 EXPECT_EQ(CCSchedulerStateMachine::ACTION_BEGIN_FRAME, state.nextAction()); |
681 } | 717 } |
682 | 718 |
683 TEST(CCSchedulerStateMachineTest, TestFullCycle) | 719 TEST(CCSchedulerStateMachineTest, TestFullCycle) |
684 { | 720 { |
685 StateMachine state; | 721 StateMachine state; |
686 state.setCanBeginFrame(true); | 722 state.setCanBeginFrame(true); |
687 state.setVisible(true); | 723 state.setVisible(true); |
| 724 state.setCanDraw(true); |
688 | 725 |
689 // Start clean and set commit. | 726 // Start clean and set commit. |
690 state.setNeedsCommit(true); | 727 state.setNeedsCommit(true); |
691 EXPECT_EQ(CCSchedulerStateMachine::ACTION_BEGIN_FRAME, state.nextAction()); | 728 EXPECT_EQ(CCSchedulerStateMachine::ACTION_BEGIN_FRAME, state.nextAction()); |
692 | 729 |
693 // Begin the frame. | 730 // Begin the frame. |
694 state.updateState(CCSchedulerStateMachine::ACTION_BEGIN_FRAME); | 731 state.updateState(CCSchedulerStateMachine::ACTION_BEGIN_FRAME); |
695 EXPECT_EQ(CCSchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS, state.com
mitState()); | 732 EXPECT_EQ(CCSchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS, state.com
mitState()); |
696 EXPECT_FALSE(state.needsCommit()); | 733 EXPECT_FALSE(state.needsCommit()); |
697 EXPECT_EQ(CCSchedulerStateMachine::ACTION_NONE, state.nextAction()); | 734 EXPECT_EQ(CCSchedulerStateMachine::ACTION_NONE, state.nextAction()); |
(...skipping 28 matching lines...) Expand all Loading... |
726 EXPECT_EQ(CCSchedulerStateMachine::COMMIT_STATE_IDLE, state.commitState()); | 763 EXPECT_EQ(CCSchedulerStateMachine::COMMIT_STATE_IDLE, state.commitState()); |
727 EXPECT_FALSE(state.needsRedraw()); | 764 EXPECT_FALSE(state.needsRedraw()); |
728 EXPECT_EQ(CCSchedulerStateMachine::ACTION_NONE, state.nextAction()); | 765 EXPECT_EQ(CCSchedulerStateMachine::ACTION_NONE, state.nextAction()); |
729 } | 766 } |
730 | 767 |
731 TEST(CCSchedulerStateMachineTest, TestFullCycleWithCommitRequestInbetween) | 768 TEST(CCSchedulerStateMachineTest, TestFullCycleWithCommitRequestInbetween) |
732 { | 769 { |
733 StateMachine state; | 770 StateMachine state; |
734 state.setCanBeginFrame(true); | 771 state.setCanBeginFrame(true); |
735 state.setVisible(true); | 772 state.setVisible(true); |
| 773 state.setCanDraw(true); |
736 | 774 |
737 // Start clean and set commit. | 775 // Start clean and set commit. |
738 state.setNeedsCommit(true); | 776 state.setNeedsCommit(true); |
739 EXPECT_EQ(CCSchedulerStateMachine::ACTION_BEGIN_FRAME, state.nextAction()); | 777 EXPECT_EQ(CCSchedulerStateMachine::ACTION_BEGIN_FRAME, state.nextAction()); |
740 | 778 |
741 // Begin the frame. | 779 // Begin the frame. |
742 state.updateState(CCSchedulerStateMachine::ACTION_BEGIN_FRAME); | 780 state.updateState(CCSchedulerStateMachine::ACTION_BEGIN_FRAME); |
743 EXPECT_EQ(CCSchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS, state.com
mitState()); | 781 EXPECT_EQ(CCSchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS, state.com
mitState()); |
744 EXPECT_FALSE(state.needsCommit()); | 782 EXPECT_FALSE(state.needsCommit()); |
745 EXPECT_EQ(CCSchedulerStateMachine::ACTION_NONE, state.nextAction()); | 783 EXPECT_EQ(CCSchedulerStateMachine::ACTION_NONE, state.nextAction()); |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
785 StateMachine state; | 823 StateMachine state; |
786 state.setNeedsCommit(true); | 824 state.setNeedsCommit(true); |
787 EXPECT_EQ(CCSchedulerStateMachine::ACTION_NONE, state.nextAction()); | 825 EXPECT_EQ(CCSchedulerStateMachine::ACTION_NONE, state.nextAction()); |
788 } | 826 } |
789 | 827 |
790 TEST(CCSchedulerStateMachineTest, TestGoesInvisibleBeforeBeginFrameCompletes) | 828 TEST(CCSchedulerStateMachineTest, TestGoesInvisibleBeforeBeginFrameCompletes) |
791 { | 829 { |
792 StateMachine state; | 830 StateMachine state; |
793 state.setCanBeginFrame(true); | 831 state.setCanBeginFrame(true); |
794 state.setVisible(true); | 832 state.setVisible(true); |
| 833 state.setCanDraw(true); |
795 | 834 |
796 // Start clean and set commit. | 835 // Start clean and set commit. |
797 state.setNeedsCommit(true); | 836 state.setNeedsCommit(true); |
798 EXPECT_EQ(CCSchedulerStateMachine::ACTION_BEGIN_FRAME, state.nextAction()); | 837 EXPECT_EQ(CCSchedulerStateMachine::ACTION_BEGIN_FRAME, state.nextAction()); |
799 | 838 |
800 // Begin the frame while visible. | 839 // Begin the frame while visible. |
801 state.updateState(CCSchedulerStateMachine::ACTION_BEGIN_FRAME); | 840 state.updateState(CCSchedulerStateMachine::ACTION_BEGIN_FRAME); |
802 EXPECT_EQ(CCSchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS, state.com
mitState()); | 841 EXPECT_EQ(CCSchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS, state.com
mitState()); |
803 EXPECT_FALSE(state.needsCommit()); | 842 EXPECT_FALSE(state.needsCommit()); |
804 EXPECT_EQ(CCSchedulerStateMachine::ACTION_NONE, state.nextAction()); | 843 EXPECT_EQ(CCSchedulerStateMachine::ACTION_NONE, state.nextAction()); |
(...skipping 18 matching lines...) Expand all Loading... |
823 | 862 |
824 // We should be starting the commit now | 863 // We should be starting the commit now |
825 EXPECT_EQ(CCSchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS, state.com
mitState()); | 864 EXPECT_EQ(CCSchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS, state.com
mitState()); |
826 } | 865 } |
827 | 866 |
828 TEST(CCSchedulerStateMachineTest, TestContextLostWhenCompletelyIdle) | 867 TEST(CCSchedulerStateMachineTest, TestContextLostWhenCompletelyIdle) |
829 { | 868 { |
830 StateMachine state; | 869 StateMachine state; |
831 state.setCanBeginFrame(true); | 870 state.setCanBeginFrame(true); |
832 state.setVisible(true); | 871 state.setVisible(true); |
| 872 state.setCanDraw(true); |
833 | 873 |
834 state.didLoseContext(); | 874 state.didLoseContext(); |
835 | 875 |
836 EXPECT_EQ(CCSchedulerStateMachine::ACTION_BEGIN_CONTEXT_RECREATION, state.ne
xtAction()); | 876 EXPECT_EQ(CCSchedulerStateMachine::ACTION_BEGIN_CONTEXT_RECREATION, state.ne
xtAction()); |
837 state.updateState(state.nextAction()); | 877 state.updateState(state.nextAction()); |
838 | 878 |
839 // Once context recreation begins, nothing should happen. | 879 // Once context recreation begins, nothing should happen. |
840 EXPECT_EQ(CCSchedulerStateMachine::ACTION_NONE, state.nextAction()); | 880 EXPECT_EQ(CCSchedulerStateMachine::ACTION_NONE, state.nextAction()); |
841 | 881 |
842 // Recreate the context | 882 // Recreate the context |
843 state.didRecreateContext(); | 883 state.didRecreateContext(); |
844 | 884 |
845 // When the context is recreated, we should begin a commit | 885 // When the context is recreated, we should begin a commit |
846 EXPECT_EQ(CCSchedulerStateMachine::ACTION_BEGIN_FRAME, state.nextAction()); | 886 EXPECT_EQ(CCSchedulerStateMachine::ACTION_BEGIN_FRAME, state.nextAction()); |
847 state.updateState(state.nextAction()); | 887 state.updateState(state.nextAction()); |
848 } | 888 } |
849 | 889 |
850 TEST(CCSchedulerStateMachineTest, TestContextLostWhenIdleAndCommitRequestedWhile
Recreating) | 890 TEST(CCSchedulerStateMachineTest, TestContextLostWhenIdleAndCommitRequestedWhile
Recreating) |
851 { | 891 { |
852 StateMachine state; | 892 StateMachine state; |
853 state.setCanBeginFrame(true); | 893 state.setCanBeginFrame(true); |
854 state.setVisible(true); | 894 state.setVisible(true); |
| 895 state.setCanDraw(true); |
855 | 896 |
856 state.didLoseContext(); | 897 state.didLoseContext(); |
857 | 898 |
858 EXPECT_EQ(CCSchedulerStateMachine::ACTION_BEGIN_CONTEXT_RECREATION, state.ne
xtAction()); | 899 EXPECT_EQ(CCSchedulerStateMachine::ACTION_BEGIN_CONTEXT_RECREATION, state.ne
xtAction()); |
859 state.updateState(state.nextAction()); | 900 state.updateState(state.nextAction()); |
860 | 901 |
861 // Once context recreation begins, nothing should happen. | 902 // Once context recreation begins, nothing should happen. |
862 EXPECT_EQ(CCSchedulerStateMachine::ACTION_NONE, state.nextAction()); | 903 EXPECT_EQ(CCSchedulerStateMachine::ACTION_NONE, state.nextAction()); |
863 | 904 |
864 // While context is recreating, commits shouldn't begin. | 905 // While context is recreating, commits shouldn't begin. |
(...skipping 16 matching lines...) Expand all Loading... |
881 EXPECT_EQ(CCSchedulerStateMachine::ACTION_NONE, state.nextAction()); | 922 EXPECT_EQ(CCSchedulerStateMachine::ACTION_NONE, state.nextAction()); |
882 state.setCanDraw(true); | 923 state.setCanDraw(true); |
883 state.didLeaveVSync(); | 924 state.didLeaveVSync(); |
884 } | 925 } |
885 | 926 |
886 TEST(CCSchedulerStateMachineTest, TestContextLostWhileCommitInProgress) | 927 TEST(CCSchedulerStateMachineTest, TestContextLostWhileCommitInProgress) |
887 { | 928 { |
888 StateMachine state; | 929 StateMachine state; |
889 state.setCanBeginFrame(true); | 930 state.setCanBeginFrame(true); |
890 state.setVisible(true); | 931 state.setVisible(true); |
| 932 state.setCanDraw(true); |
891 | 933 |
892 // Get a commit in flight. | 934 // Get a commit in flight. |
893 state.setNeedsCommit(true); | 935 state.setNeedsCommit(true); |
894 EXPECT_EQ(CCSchedulerStateMachine::ACTION_BEGIN_FRAME, state.nextAction()); | 936 EXPECT_EQ(CCSchedulerStateMachine::ACTION_BEGIN_FRAME, state.nextAction()); |
895 state.updateState(state.nextAction()); | 937 state.updateState(state.nextAction()); |
896 | 938 |
897 // Set damage and expect a draw. | 939 // Set damage and expect a draw. |
898 state.setNeedsRedraw(true); | 940 state.setNeedsRedraw(true); |
899 state.didEnterVSync(); | 941 state.didEnterVSync(); |
900 EXPECT_EQ(CCSchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.nextAction
()); | 942 EXPECT_EQ(CCSchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.nextAction
()); |
(...skipping 21 matching lines...) Expand all Loading... |
922 EXPECT_EQ(CCSchedulerStateMachine::ACTION_BEGIN_CONTEXT_RECREATION, state.ne
xtAction()); | 964 EXPECT_EQ(CCSchedulerStateMachine::ACTION_BEGIN_CONTEXT_RECREATION, state.ne
xtAction()); |
923 state.didLeaveVSync(); | 965 state.didLeaveVSync(); |
924 EXPECT_EQ(CCSchedulerStateMachine::ACTION_BEGIN_CONTEXT_RECREATION, state.ne
xtAction()); | 966 EXPECT_EQ(CCSchedulerStateMachine::ACTION_BEGIN_CONTEXT_RECREATION, state.ne
xtAction()); |
925 } | 967 } |
926 | 968 |
927 TEST(CCSchedulerStateMachineTest, TestContextLostWhileCommitInProgressAndAnother
CommitRequested) | 969 TEST(CCSchedulerStateMachineTest, TestContextLostWhileCommitInProgressAndAnother
CommitRequested) |
928 { | 970 { |
929 StateMachine state; | 971 StateMachine state; |
930 state.setCanBeginFrame(true); | 972 state.setCanBeginFrame(true); |
931 state.setVisible(true); | 973 state.setVisible(true); |
| 974 state.setCanDraw(true); |
932 | 975 |
933 // Get a commit in flight. | 976 // Get a commit in flight. |
934 state.setNeedsCommit(true); | 977 state.setNeedsCommit(true); |
935 EXPECT_EQ(CCSchedulerStateMachine::ACTION_BEGIN_FRAME, state.nextAction()); | 978 EXPECT_EQ(CCSchedulerStateMachine::ACTION_BEGIN_FRAME, state.nextAction()); |
936 state.updateState(state.nextAction()); | 979 state.updateState(state.nextAction()); |
937 | 980 |
938 // Set damage and expect a draw. | 981 // Set damage and expect a draw. |
939 state.setNeedsRedraw(true); | 982 state.setNeedsRedraw(true); |
940 state.didEnterVSync(); | 983 state.didEnterVSync(); |
941 EXPECT_EQ(CCSchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.nextAction
()); | 984 EXPECT_EQ(CCSchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.nextAction
()); |
(...skipping 30 matching lines...) Expand all Loading... |
972 EXPECT_EQ(CCSchedulerStateMachine::ACTION_BEGIN_CONTEXT_RECREATION, state.ne
xtAction()); | 1015 EXPECT_EQ(CCSchedulerStateMachine::ACTION_BEGIN_CONTEXT_RECREATION, state.ne
xtAction()); |
973 state.didLeaveVSync(); | 1016 state.didLeaveVSync(); |
974 EXPECT_EQ(CCSchedulerStateMachine::ACTION_BEGIN_CONTEXT_RECREATION, state.ne
xtAction()); | 1017 EXPECT_EQ(CCSchedulerStateMachine::ACTION_BEGIN_CONTEXT_RECREATION, state.ne
xtAction()); |
975 } | 1018 } |
976 | 1019 |
977 | 1020 |
978 TEST(CCSchedulerStateMachineTest, TestFinishAllRenderingWhileContextLost) | 1021 TEST(CCSchedulerStateMachineTest, TestFinishAllRenderingWhileContextLost) |
979 { | 1022 { |
980 StateMachine state; | 1023 StateMachine state; |
981 state.setVisible(true); | 1024 state.setVisible(true); |
| 1025 state.setCanDraw(true); |
982 | 1026 |
983 // Cause a lost context lost. | 1027 // Cause a lost context lost. |
984 state.didLoseContext(); | 1028 state.didLoseContext(); |
985 | 1029 |
986 // Ask a forced redraw and verify it ocurrs. | 1030 // Ask a forced redraw and verify it ocurrs. |
987 state.setNeedsForcedRedraw(true); | 1031 state.setNeedsForcedRedraw(true); |
988 state.didEnterVSync(); | 1032 state.didEnterVSync(); |
989 EXPECT_EQ(CCSchedulerStateMachine::ACTION_DRAW_FORCED, state.nextAction()); | 1033 EXPECT_EQ(CCSchedulerStateMachine::ACTION_DRAW_FORCED, state.nextAction()); |
990 state.didLeaveVSync(); | 1034 state.didLeaveVSync(); |
991 | 1035 |
(...skipping 18 matching lines...) Expand all Loading... |
1010 state.setVisible(false); | 1054 state.setVisible(false); |
1011 state.setNeedsCommit(true); | 1055 state.setNeedsCommit(true); |
1012 state.setNeedsForcedCommit(true); | 1056 state.setNeedsForcedCommit(true); |
1013 EXPECT_EQ(CCSchedulerStateMachine::ACTION_BEGIN_FRAME, state.nextAction()); | 1057 EXPECT_EQ(CCSchedulerStateMachine::ACTION_BEGIN_FRAME, state.nextAction()); |
1014 } | 1058 } |
1015 | 1059 |
1016 TEST(CCSchedulerStateMachineTest, TestBeginFrameWhenCanBeginFrameFalseAndForceCo
mmit) | 1060 TEST(CCSchedulerStateMachineTest, TestBeginFrameWhenCanBeginFrameFalseAndForceCo
mmit) |
1017 { | 1061 { |
1018 StateMachine state; | 1062 StateMachine state; |
1019 state.setVisible(true); | 1063 state.setVisible(true); |
| 1064 state.setCanDraw(true); |
1020 state.setNeedsCommit(true); | 1065 state.setNeedsCommit(true); |
1021 state.setNeedsForcedCommit(true); | 1066 state.setNeedsForcedCommit(true); |
1022 EXPECT_EQ(CCSchedulerStateMachine::ACTION_BEGIN_FRAME, state.nextAction()); | 1067 EXPECT_EQ(CCSchedulerStateMachine::ACTION_BEGIN_FRAME, state.nextAction()); |
1023 } | 1068 } |
1024 | 1069 |
1025 TEST(CCSchedulerStateMachineTest, TestBeginFrameWhenCommitInProgress) | 1070 TEST(CCSchedulerStateMachineTest, TestBeginFrameWhenCommitInProgress) |
1026 { | 1071 { |
1027 StateMachine state; | 1072 StateMachine state; |
1028 state.setCanBeginFrame(true); | 1073 state.setCanBeginFrame(true); |
1029 state.setVisible(false); | 1074 state.setVisible(false); |
(...skipping 12 matching lines...) Expand all Loading... |
1042 EXPECT_EQ(CCSchedulerStateMachine::COMMIT_STATE_IDLE, state.commitState()); | 1087 EXPECT_EQ(CCSchedulerStateMachine::COMMIT_STATE_IDLE, state.commitState()); |
1043 | 1088 |
1044 EXPECT_EQ(CCSchedulerStateMachine::ACTION_BEGIN_FRAME, state.nextAction()); | 1089 EXPECT_EQ(CCSchedulerStateMachine::ACTION_BEGIN_FRAME, state.nextAction()); |
1045 } | 1090 } |
1046 | 1091 |
1047 TEST(CCSchedulerStateMachineTest, TestBeginFrameWhenContextLost) | 1092 TEST(CCSchedulerStateMachineTest, TestBeginFrameWhenContextLost) |
1048 { | 1093 { |
1049 StateMachine state; | 1094 StateMachine state; |
1050 state.setCanBeginFrame(true); | 1095 state.setCanBeginFrame(true); |
1051 state.setVisible(true); | 1096 state.setVisible(true); |
| 1097 state.setCanDraw(true); |
1052 state.setNeedsCommit(true); | 1098 state.setNeedsCommit(true); |
1053 state.setNeedsForcedCommit(true); | 1099 state.setNeedsForcedCommit(true); |
1054 state.didLoseContext(); | 1100 state.didLoseContext(); |
1055 EXPECT_EQ(CCSchedulerStateMachine::ACTION_BEGIN_FRAME, state.nextAction()); | 1101 EXPECT_EQ(CCSchedulerStateMachine::ACTION_BEGIN_FRAME, state.nextAction()); |
1056 } | 1102 } |
1057 | 1103 |
1058 } | 1104 } |
OLD | NEW |