OLD | NEW |
1 // Copyright 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "cc/scheduler/scheduler_state_machine.h" | 5 #include "cc/scheduler/scheduler_state_machine.h" |
6 | 6 |
7 #include "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 17 matching lines...) Expand all Loading... |
28 | 28 |
29 bool NeedsCommit() const { return needs_commit_; } | 29 bool NeedsCommit() const { return needs_commit_; } |
30 | 30 |
31 void SetNeedsRedraw(bool b) { needs_redraw_ = b; } | 31 void SetNeedsRedraw(bool b) { needs_redraw_ = b; } |
32 bool NeedsRedraw() const { return needs_redraw_; } | 32 bool NeedsRedraw() const { return needs_redraw_; } |
33 | 33 |
34 void SetNeedsForcedRedraw(bool b) { needs_forced_redraw_ = b; } | 34 void SetNeedsForcedRedraw(bool b) { needs_forced_redraw_ = b; } |
35 bool NeedsForcedRedraw() const { return needs_forced_redraw_; } | 35 bool NeedsForcedRedraw() const { return needs_forced_redraw_; } |
36 | 36 |
37 bool CanDraw() const { return can_draw_; } | 37 bool CanDraw() const { return can_draw_; } |
38 bool InsideVSync() const { return inside_vsync_; } | 38 bool InsideBeginFrame() const { return inside_begin_frame_; } |
39 bool Visible() const { return visible_; } | 39 bool Visible() const { return visible_; } |
40 }; | 40 }; |
41 | 41 |
42 TEST(SchedulerStateMachineTest, TestNextActionBeginsFrameIfNeeded) { | 42 TEST(SchedulerStateMachineTest, TestNextActionBeginsFrameIfNeeded) { |
43 SchedulerSettings default_scheduler_settings; | 43 SchedulerSettings default_scheduler_settings; |
44 | 44 |
45 // If no commit needed, do nothing. | 45 // If no commit needed, do nothing. |
46 { | 46 { |
47 StateMachine state(default_scheduler_settings); | 47 StateMachine state(default_scheduler_settings); |
48 state.SetCanStart(); | 48 state.SetCanStart(); |
49 state.UpdateState(state.NextAction()); | 49 state.UpdateState(state.NextAction()); |
50 state.DidCreateAndInitializeOutputSurface(); | 50 state.DidCreateAndInitializeOutputSurface(); |
51 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE); | 51 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE); |
52 state.SetNeedsRedraw(false); | 52 state.SetNeedsRedraw(false); |
53 state.SetVisible(true); | 53 state.SetVisible(true); |
54 | 54 |
55 EXPECT_FALSE(state.VSyncCallbackNeeded()); | 55 EXPECT_FALSE(state.BeginFrameCallbackNeeded()); |
56 | 56 |
57 state.DidLeaveVSync(); | 57 state.DidLeaveBeginFrame(); |
58 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); | 58 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); |
59 EXPECT_FALSE(state.VSyncCallbackNeeded()); | 59 EXPECT_FALSE(state.BeginFrameCallbackNeeded()); |
60 state.DidEnterVSync(); | 60 state.DidEnterBeginFrame(); |
61 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); | 61 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); |
62 } | 62 } |
63 | 63 |
64 // If commit requested but can_begin_frame is still false, do nothing. | 64 // If commit requested but can_begin_frame is still false, do nothing. |
65 { | 65 { |
66 StateMachine state(default_scheduler_settings); | 66 StateMachine state(default_scheduler_settings); |
67 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE); | 67 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE); |
68 state.SetNeedsRedraw(false); | 68 state.SetNeedsRedraw(false); |
69 state.SetVisible(true); | 69 state.SetVisible(true); |
70 | 70 |
71 EXPECT_FALSE(state.VSyncCallbackNeeded()); | 71 EXPECT_FALSE(state.BeginFrameCallbackNeeded()); |
72 | 72 |
73 state.DidLeaveVSync(); | 73 state.DidLeaveBeginFrame(); |
74 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); | 74 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); |
75 EXPECT_FALSE(state.VSyncCallbackNeeded()); | 75 EXPECT_FALSE(state.BeginFrameCallbackNeeded()); |
76 state.DidEnterVSync(); | 76 state.DidEnterBeginFrame(); |
77 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); | 77 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); |
78 } | 78 } |
79 | 79 |
80 // If commit requested, begin a frame. | 80 // If commit requested, begin a frame. |
81 { | 81 { |
82 StateMachine state(default_scheduler_settings); | 82 StateMachine state(default_scheduler_settings); |
83 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE); | 83 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE); |
84 state.SetCanStart(); | 84 state.SetCanStart(); |
85 state.SetNeedsRedraw(false); | 85 state.SetNeedsRedraw(false); |
86 state.SetVisible(true); | 86 state.SetVisible(true); |
87 EXPECT_FALSE(state.VSyncCallbackNeeded()); | 87 EXPECT_FALSE(state.BeginFrameCallbackNeeded()); |
88 } | 88 } |
89 | 89 |
90 // Begin the frame, make sure needs_commit and commit_state update correctly. | 90 // Begin the frame, make sure needs_commit and commit_state update correctly. |
91 { | 91 { |
92 StateMachine state(default_scheduler_settings); | 92 StateMachine state(default_scheduler_settings); |
93 state.SetCanStart(); | 93 state.SetCanStart(); |
94 state.UpdateState(state.NextAction()); | 94 state.UpdateState(state.NextAction()); |
95 state.DidCreateAndInitializeOutputSurface(); | 95 state.DidCreateAndInitializeOutputSurface(); |
96 state.SetVisible(true); | 96 state.SetVisible(true); |
97 state.UpdateState(SchedulerStateMachine::ACTION_BEGIN_FRAME); | 97 state.UpdateState(SchedulerStateMachine::ACTION_BEGIN_FRAME); |
98 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS, | 98 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS, |
99 state.CommitState()); | 99 state.CommitState()); |
100 EXPECT_FALSE(state.NeedsCommit()); | 100 EXPECT_FALSE(state.NeedsCommit()); |
101 EXPECT_FALSE(state.VSyncCallbackNeeded()); | 101 EXPECT_FALSE(state.BeginFrameCallbackNeeded()); |
102 } | 102 } |
103 } | 103 } |
104 | 104 |
105 TEST(SchedulerStateMachineTest, TestSetForcedRedrawDoesNotSetsNormalRedraw) { | 105 TEST(SchedulerStateMachineTest, TestSetForcedRedrawDoesNotSetsNormalRedraw) { |
106 SchedulerSettings default_scheduler_settings; | 106 SchedulerSettings default_scheduler_settings; |
107 SchedulerStateMachine state(default_scheduler_settings); | 107 SchedulerStateMachine state(default_scheduler_settings); |
108 state.SetCanDraw(true); | 108 state.SetCanDraw(true); |
109 state.SetNeedsForcedRedraw(); | 109 state.SetNeedsForcedRedraw(); |
110 EXPECT_FALSE(state.RedrawPending()); | 110 EXPECT_FALSE(state.RedrawPending()); |
111 EXPECT_TRUE(state.VSyncCallbackNeeded()); | 111 EXPECT_TRUE(state.BeginFrameCallbackNeeded()); |
112 } | 112 } |
113 | 113 |
114 TEST(SchedulerStateMachineTest, | 114 TEST(SchedulerStateMachineTest, |
115 TestFailedDrawSetsNeedsCommitAndDoesNotDrawAgain) { | 115 TestFailedDrawSetsNeedsCommitAndDoesNotDrawAgain) { |
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.VSyncCallbackNeeded()); | 125 EXPECT_TRUE(state.BeginFrameCallbackNeeded()); |
126 state.DidEnterVSync(); | 126 state.DidEnterBeginFrame(); |
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); |
137 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_FRAME, state.NextAction()); | 137 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_FRAME, state.NextAction()); |
138 state.UpdateState(SchedulerStateMachine::ACTION_BEGIN_FRAME); | 138 state.UpdateState(SchedulerStateMachine::ACTION_BEGIN_FRAME); |
139 EXPECT_TRUE(state.RedrawPending()); | 139 EXPECT_TRUE(state.RedrawPending()); |
140 EXPECT_TRUE(state.CommitPending()); | 140 EXPECT_TRUE(state.CommitPending()); |
141 } | 141 } |
142 | 142 |
143 TEST(SchedulerStateMachineTest, | 143 TEST(SchedulerStateMachineTest, |
144 TestsetNeedsRedrawDuringFailedDrawDoesNotRemoveNeedsRedraw) { | 144 TestsetNeedsRedrawDuringFailedDrawDoesNotRemoveNeedsRedraw) { |
145 SchedulerSettings default_scheduler_settings; | 145 SchedulerSettings default_scheduler_settings; |
146 SchedulerStateMachine state(default_scheduler_settings); | 146 SchedulerStateMachine state(default_scheduler_settings); |
147 state.SetCanStart(); | 147 state.SetCanStart(); |
148 state.UpdateState(state.NextAction()); | 148 state.UpdateState(state.NextAction()); |
149 state.DidCreateAndInitializeOutputSurface(); | 149 state.DidCreateAndInitializeOutputSurface(); |
150 | 150 |
151 state.SetVisible(true); | 151 state.SetVisible(true); |
152 state.SetCanDraw(true); | 152 state.SetCanDraw(true); |
153 state.SetNeedsRedraw(); | 153 state.SetNeedsRedraw(); |
154 EXPECT_TRUE(state.RedrawPending()); | 154 EXPECT_TRUE(state.RedrawPending()); |
155 EXPECT_TRUE(state.VSyncCallbackNeeded()); | 155 EXPECT_TRUE(state.BeginFrameCallbackNeeded()); |
156 state.DidEnterVSync(); | 156 state.DidEnterBeginFrame(); |
157 | 157 |
158 // We're drawing now. | 158 // We're drawing now. |
159 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction()); | 159 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction()); |
160 state.UpdateState(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); | 160 state.UpdateState(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); |
161 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); | 161 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); |
162 EXPECT_FALSE(state.RedrawPending()); | 162 EXPECT_FALSE(state.RedrawPending()); |
163 EXPECT_FALSE(state.CommitPending()); | 163 EXPECT_FALSE(state.CommitPending()); |
164 | 164 |
165 // While still in the same vsync callback, set needs redraw again. | 165 // While still in the same BeginFrame callback, set needs redraw again. |
166 // This should not redraw. | 166 // This should not redraw. |
167 state.SetNeedsRedraw(); | 167 state.SetNeedsRedraw(); |
168 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); | 168 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); |
169 | 169 |
170 // Failing the draw makes us require a commit. | 170 // Failing the draw makes us require a commit. |
171 state.DidDrawIfPossibleCompleted(false); | 171 state.DidDrawIfPossibleCompleted(false); |
172 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_FRAME, state.NextAction()); | 172 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_FRAME, state.NextAction()); |
173 EXPECT_TRUE(state.RedrawPending()); | 173 EXPECT_TRUE(state.RedrawPending()); |
174 } | 174 } |
175 | 175 |
176 TEST(SchedulerStateMachineTest, | 176 TEST(SchedulerStateMachineTest, |
177 TestCommitAfterFailedDrawAllowsDrawInSameFrame) { | 177 TestCommitAfterFailedDrawAllowsDrawInSameFrame) { |
178 SchedulerSettings default_scheduler_settings; | 178 SchedulerSettings default_scheduler_settings; |
179 SchedulerStateMachine state(default_scheduler_settings); | 179 SchedulerStateMachine state(default_scheduler_settings); |
180 state.SetCanStart(); | 180 state.SetCanStart(); |
181 state.UpdateState(state.NextAction()); | 181 state.UpdateState(state.NextAction()); |
182 state.DidCreateAndInitializeOutputSurface(); | 182 state.DidCreateAndInitializeOutputSurface(); |
183 state.SetVisible(true); | 183 state.SetVisible(true); |
184 state.SetCanDraw(true); | 184 state.SetCanDraw(true); |
185 | 185 |
186 // Start a commit. | 186 // Start a commit. |
187 state.SetNeedsCommit(); | 187 state.SetNeedsCommit(); |
188 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_FRAME, state.NextAction()); | 188 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_FRAME, state.NextAction()); |
189 state.UpdateState(SchedulerStateMachine::ACTION_BEGIN_FRAME); | 189 state.UpdateState(SchedulerStateMachine::ACTION_BEGIN_FRAME); |
190 EXPECT_TRUE(state.CommitPending()); | 190 EXPECT_TRUE(state.CommitPending()); |
191 | 191 |
192 // Then initiate a draw. | 192 // Then initiate a draw. |
193 state.SetNeedsRedraw(); | 193 state.SetNeedsRedraw(); |
194 EXPECT_TRUE(state.VSyncCallbackNeeded()); | 194 EXPECT_TRUE(state.BeginFrameCallbackNeeded()); |
195 state.DidEnterVSync(); | 195 state.DidEnterBeginFrame(); |
196 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction()); | 196 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction()); |
197 EXPECT_TRUE(state.RedrawPending()); | 197 EXPECT_TRUE(state.RedrawPending()); |
198 | 198 |
199 // Fail the draw. | 199 // Fail the draw. |
200 state.UpdateState(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); | 200 state.UpdateState(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); |
201 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); | 201 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); |
202 state.DidDrawIfPossibleCompleted(false); | 202 state.DidDrawIfPossibleCompleted(false); |
203 EXPECT_TRUE(state.RedrawPending()); | 203 EXPECT_TRUE(state.RedrawPending()); |
204 // But the commit is ongoing. | 204 // But the commit is ongoing. |
205 EXPECT_TRUE(state.CommitPending()); | 205 EXPECT_TRUE(state.CommitPending()); |
(...skipping 19 matching lines...) Expand all Loading... |
225 state.SetCanDraw(true); | 225 state.SetCanDraw(true); |
226 | 226 |
227 // Start a commit. | 227 // Start a commit. |
228 state.SetNeedsCommit(); | 228 state.SetNeedsCommit(); |
229 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_FRAME, state.NextAction()); | 229 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_FRAME, state.NextAction()); |
230 state.UpdateState(SchedulerStateMachine::ACTION_BEGIN_FRAME); | 230 state.UpdateState(SchedulerStateMachine::ACTION_BEGIN_FRAME); |
231 EXPECT_TRUE(state.CommitPending()); | 231 EXPECT_TRUE(state.CommitPending()); |
232 | 232 |
233 // Then initiate a draw. | 233 // Then initiate a draw. |
234 state.SetNeedsRedraw(); | 234 state.SetNeedsRedraw(); |
235 EXPECT_TRUE(state.VSyncCallbackNeeded()); | 235 EXPECT_TRUE(state.BeginFrameCallbackNeeded()); |
236 state.DidEnterVSync(); | 236 state.DidEnterBeginFrame(); |
237 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction()); | 237 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction()); |
238 EXPECT_TRUE(state.RedrawPending()); | 238 EXPECT_TRUE(state.RedrawPending()); |
239 | 239 |
240 // Fail the draw. | 240 // Fail the draw. |
241 state.UpdateState(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); | 241 state.UpdateState(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); |
242 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); | 242 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); |
243 state.DidDrawIfPossibleCompleted(false); | 243 state.DidDrawIfPossibleCompleted(false); |
244 EXPECT_TRUE(state.RedrawPending()); | 244 EXPECT_TRUE(state.RedrawPending()); |
245 // But the commit is ongoing. | 245 // But the commit is ongoing. |
246 EXPECT_TRUE(state.CommitPending()); | 246 EXPECT_TRUE(state.CommitPending()); |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
278 state.SetMaximumNumberOfFailedDrawsBeforeDrawIsForced(1); | 278 state.SetMaximumNumberOfFailedDrawsBeforeDrawIsForced(1); |
279 | 279 |
280 // Start a commit. | 280 // Start a commit. |
281 state.SetNeedsCommit(); | 281 state.SetNeedsCommit(); |
282 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_FRAME, state.NextAction()); | 282 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_FRAME, state.NextAction()); |
283 state.UpdateState(SchedulerStateMachine::ACTION_BEGIN_FRAME); | 283 state.UpdateState(SchedulerStateMachine::ACTION_BEGIN_FRAME); |
284 EXPECT_TRUE(state.CommitPending()); | 284 EXPECT_TRUE(state.CommitPending()); |
285 | 285 |
286 // Then initiate a draw. | 286 // Then initiate a draw. |
287 state.SetNeedsRedraw(); | 287 state.SetNeedsRedraw(); |
288 EXPECT_TRUE(state.VSyncCallbackNeeded()); | 288 EXPECT_TRUE(state.BeginFrameCallbackNeeded()); |
289 state.DidEnterVSync(); | 289 state.DidEnterBeginFrame(); |
290 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction()); | 290 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction()); |
291 EXPECT_TRUE(state.RedrawPending()); | 291 EXPECT_TRUE(state.RedrawPending()); |
292 | 292 |
293 // Fail the draw. | 293 // Fail the draw. |
294 state.UpdateState(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); | 294 state.UpdateState(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); |
295 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); | 295 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); |
296 state.DidDrawIfPossibleCompleted(false); | 296 state.DidDrawIfPossibleCompleted(false); |
297 EXPECT_TRUE(state.RedrawPending()); | 297 EXPECT_TRUE(state.RedrawPending()); |
298 // But the commit is ongoing. | 298 // But the commit is ongoing. |
299 EXPECT_TRUE(state.CommitPending()); | 299 EXPECT_TRUE(state.CommitPending()); |
300 | 300 |
301 // Finish the commit. Note, we should not yet be forcing a draw, but should | 301 // Finish the commit. Note, we should not yet be forcing a draw, but should |
302 // continue the commit as usual. | 302 // continue the commit as usual. |
303 state.BeginFrameComplete(); | 303 state.BeginFrameComplete(); |
304 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction()); | 304 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction()); |
305 state.UpdateState(SchedulerStateMachine::ACTION_COMMIT); | 305 state.UpdateState(SchedulerStateMachine::ACTION_COMMIT); |
306 EXPECT_TRUE(state.RedrawPending()); | 306 EXPECT_TRUE(state.RedrawPending()); |
307 | 307 |
308 // The redraw should be forced in this case. | 308 // The redraw should be forced in this case. |
309 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_FORCED, state.NextAction()); | 309 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_FORCED, state.NextAction()); |
310 } | 310 } |
311 | 311 |
312 TEST(SchedulerStateMachineTest, TestFailedDrawIsRetriedNextVSync) { | 312 TEST(SchedulerStateMachineTest, TestFailedDrawIsRetriedNextBeginFrame) { |
313 SchedulerSettings default_scheduler_settings; | 313 SchedulerSettings default_scheduler_settings; |
314 SchedulerStateMachine state(default_scheduler_settings); | 314 SchedulerStateMachine state(default_scheduler_settings); |
315 state.SetCanStart(); | 315 state.SetCanStart(); |
316 state.UpdateState(state.NextAction()); | 316 state.UpdateState(state.NextAction()); |
317 state.DidCreateAndInitializeOutputSurface(); | 317 state.DidCreateAndInitializeOutputSurface(); |
318 state.SetVisible(true); | 318 state.SetVisible(true); |
319 state.SetCanDraw(true); | 319 state.SetCanDraw(true); |
320 | 320 |
321 // Start a draw. | 321 // Start a draw. |
322 state.SetNeedsRedraw(); | 322 state.SetNeedsRedraw(); |
323 EXPECT_TRUE(state.VSyncCallbackNeeded()); | 323 EXPECT_TRUE(state.BeginFrameCallbackNeeded()); |
324 state.DidEnterVSync(); | 324 state.DidEnterBeginFrame(); |
325 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction()); | 325 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction()); |
326 EXPECT_TRUE(state.RedrawPending()); | 326 EXPECT_TRUE(state.RedrawPending()); |
327 | 327 |
328 // Fail the draw. | 328 // Fail the draw. |
329 state.UpdateState(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); | 329 state.UpdateState(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); |
330 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); | 330 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); |
331 state.DidDrawIfPossibleCompleted(false); | 331 state.DidDrawIfPossibleCompleted(false); |
332 EXPECT_TRUE(state.RedrawPending()); | 332 EXPECT_TRUE(state.RedrawPending()); |
333 | 333 |
334 // We should not be trying to draw again now, but we have a commit pending. | 334 // We should not be trying to draw again now, but we have a commit pending. |
335 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_FRAME, state.NextAction()); | 335 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_FRAME, state.NextAction()); |
336 | 336 |
337 state.DidLeaveVSync(); | 337 state.DidLeaveBeginFrame(); |
338 EXPECT_TRUE(state.VSyncCallbackNeeded()); | 338 EXPECT_TRUE(state.BeginFrameCallbackNeeded()); |
339 state.DidEnterVSync(); | 339 state.DidEnterBeginFrame(); |
340 | 340 |
341 // We should try draw again in the next vsync. | 341 // We should try draw again in the next BeginFrame. |
342 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction()); | 342 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction()); |
343 } | 343 } |
344 | 344 |
345 TEST(SchedulerStateMachineTest, TestDoestDrawTwiceInSameFrame) { | 345 TEST(SchedulerStateMachineTest, TestDoestDrawTwiceInSameFrame) { |
346 SchedulerSettings default_scheduler_settings; | 346 SchedulerSettings default_scheduler_settings; |
347 SchedulerStateMachine state(default_scheduler_settings); | 347 SchedulerStateMachine state(default_scheduler_settings); |
348 state.SetCanStart(); | 348 state.SetCanStart(); |
349 state.UpdateState(state.NextAction()); | 349 state.UpdateState(state.NextAction()); |
350 state.DidCreateAndInitializeOutputSurface(); | 350 state.DidCreateAndInitializeOutputSurface(); |
351 state.SetVisible(true); | 351 state.SetVisible(true); |
352 state.SetCanDraw(true); | 352 state.SetCanDraw(true); |
353 state.SetNeedsRedraw(); | 353 state.SetNeedsRedraw(); |
354 EXPECT_TRUE(state.VSyncCallbackNeeded()); | 354 EXPECT_TRUE(state.BeginFrameCallbackNeeded()); |
355 state.DidEnterVSync(); | 355 state.DidEnterBeginFrame(); |
356 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction()); | 356 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction()); |
357 state.UpdateState(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); | 357 state.UpdateState(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); |
358 | 358 |
359 // While still in the same vsync callback, set needs redraw again. | 359 // While still in the same BeginFrame callback, set needs redraw again. |
360 // This should not redraw. | 360 // This should not redraw. |
361 state.SetNeedsRedraw(); | 361 state.SetNeedsRedraw(); |
362 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); | 362 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); |
363 | 363 |
364 // Move to another frame. This should now draw. | 364 // Move to another frame. This should now draw. |
365 state.DidDrawIfPossibleCompleted(true); | 365 state.DidDrawIfPossibleCompleted(true); |
366 state.DidLeaveVSync(); | 366 state.DidLeaveBeginFrame(); |
367 EXPECT_TRUE(state.VSyncCallbackNeeded()); | 367 EXPECT_TRUE(state.BeginFrameCallbackNeeded()); |
368 state.DidEnterVSync(); | 368 state.DidEnterBeginFrame(); |
369 | 369 |
370 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction()); | 370 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction()); |
371 state.UpdateState(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); | 371 state.UpdateState(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); |
372 state.DidDrawIfPossibleCompleted(true); | 372 state.DidDrawIfPossibleCompleted(true); |
373 EXPECT_FALSE(state.VSyncCallbackNeeded()); | 373 EXPECT_FALSE(state.BeginFrameCallbackNeeded()); |
374 } | 374 } |
375 | 375 |
376 TEST(SchedulerStateMachineTest, TestNextActionDrawsOnVSync) { | 376 TEST(SchedulerStateMachineTest, TestNextActionDrawsOnBeginFrame) { |
377 SchedulerSettings default_scheduler_settings; | 377 SchedulerSettings default_scheduler_settings; |
378 | 378 |
379 // When not on vsync, or on vsync but not visible, don't draw. | 379 // When not in BeginFrame, or in BeginFrame but not visible, don't draw. |
380 size_t num_commit_states = | 380 size_t num_commit_states = |
381 sizeof(all_commit_states) / sizeof(SchedulerStateMachine::CommitState); | 381 sizeof(all_commit_states) / sizeof(SchedulerStateMachine::CommitState); |
382 for (size_t i = 0; i < num_commit_states; ++i) { | 382 for (size_t i = 0; i < num_commit_states; ++i) { |
383 for (size_t j = 0; j < 2; ++j) { | 383 for (size_t j = 0; j < 2; ++j) { |
384 StateMachine state(default_scheduler_settings); | 384 StateMachine state(default_scheduler_settings); |
385 state.SetCanStart(); | 385 state.SetCanStart(); |
386 state.UpdateState(state.NextAction()); | 386 state.UpdateState(state.NextAction()); |
387 state.DidCreateAndInitializeOutputSurface(); | 387 state.DidCreateAndInitializeOutputSurface(); |
388 state.SetCommitState(all_commit_states[i]); | 388 state.SetCommitState(all_commit_states[i]); |
389 bool visible = j; | 389 bool visible = j; |
390 if (!visible) { | 390 if (!visible) { |
391 state.DidEnterVSync(); | 391 state.DidEnterBeginFrame(); |
392 state.SetVisible(false); | 392 state.SetVisible(false); |
393 } else { | 393 } else { |
394 state.SetVisible(true); | 394 state.SetVisible(true); |
395 } | 395 } |
396 | 396 |
397 // Case 1: needs_commit=false | 397 // Case 1: needs_commit=false |
398 EXPECT_NE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, | 398 EXPECT_NE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, |
399 state.NextAction()); | 399 state.NextAction()); |
400 | 400 |
401 // Case 2: needs_commit=true | 401 // Case 2: needs_commit=true |
402 state.SetNeedsCommit(); | 402 state.SetNeedsCommit(); |
403 EXPECT_NE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, | 403 EXPECT_NE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, |
404 state.NextAction()); | 404 state.NextAction()); |
405 } | 405 } |
406 } | 406 } |
407 | 407 |
408 // When on vsync, or not on vsync but needs_forced_dedraw set, should always | 408 // When in BeginFrame, or not in BeginFrame but needs_forced_dedraw set, |
409 // draw except if you're ready to commit, in which case commit. | 409 // should always draw except if you're ready to commit, in which case commit. |
410 for (size_t i = 0; i < num_commit_states; ++i) { | 410 for (size_t i = 0; i < num_commit_states; ++i) { |
411 for (size_t j = 0; j < 2; ++j) { | 411 for (size_t j = 0; j < 2; ++j) { |
412 StateMachine state(default_scheduler_settings); | 412 StateMachine state(default_scheduler_settings); |
413 state.SetCanStart(); | 413 state.SetCanStart(); |
414 state.UpdateState(state.NextAction()); | 414 state.UpdateState(state.NextAction()); |
415 state.DidCreateAndInitializeOutputSurface(); | 415 state.DidCreateAndInitializeOutputSurface(); |
416 state.SetCanDraw(true); | 416 state.SetCanDraw(true); |
417 state.SetCommitState(all_commit_states[i]); | 417 state.SetCommitState(all_commit_states[i]); |
418 bool forced_draw = j; | 418 bool forced_draw = j; |
419 if (!forced_draw) { | 419 if (!forced_draw) { |
420 state.DidEnterVSync(); | 420 state.DidEnterBeginFrame(); |
421 state.SetNeedsRedraw(true); | 421 state.SetNeedsRedraw(true); |
422 state.SetVisible(true); | 422 state.SetVisible(true); |
423 } else { | 423 } else { |
424 state.SetNeedsForcedRedraw(true); | 424 state.SetNeedsForcedRedraw(true); |
425 } | 425 } |
426 | 426 |
427 SchedulerStateMachine::Action expected_action; | 427 SchedulerStateMachine::Action expected_action; |
428 if (all_commit_states[i] != | 428 if (all_commit_states[i] != |
429 SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT) { | 429 SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT) { |
430 expected_action = | 430 expected_action = |
431 forced_draw ? SchedulerStateMachine::ACTION_DRAW_FORCED | 431 forced_draw ? SchedulerStateMachine::ACTION_DRAW_FORCED |
432 : SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE; | 432 : SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE; |
433 } else { | 433 } else { |
434 expected_action = SchedulerStateMachine::ACTION_COMMIT; | 434 expected_action = SchedulerStateMachine::ACTION_COMMIT; |
435 } | 435 } |
436 | 436 |
437 // Case 1: needs_commit=false. | 437 // Case 1: needs_commit=false. |
438 EXPECT_TRUE(state.VSyncCallbackNeeded()); | 438 EXPECT_TRUE(state.BeginFrameCallbackNeeded()); |
439 EXPECT_EQ(expected_action, state.NextAction()); | 439 EXPECT_EQ(expected_action, state.NextAction()); |
440 | 440 |
441 // Case 2: needs_commit=true. | 441 // Case 2: needs_commit=true. |
442 state.SetNeedsCommit(); | 442 state.SetNeedsCommit(); |
443 EXPECT_TRUE(state.VSyncCallbackNeeded()); | 443 EXPECT_TRUE(state.BeginFrameCallbackNeeded()); |
444 EXPECT_EQ(expected_action, state.NextAction()); | 444 EXPECT_EQ(expected_action, state.NextAction()); |
445 } | 445 } |
446 } | 446 } |
447 } | 447 } |
448 | 448 |
449 TEST(SchedulerStateMachineTest, TestNoCommitStatesRedrawWhenInvisible) { | 449 TEST(SchedulerStateMachineTest, TestNoCommitStatesRedrawWhenInvisible) { |
450 SchedulerSettings default_scheduler_settings; | 450 SchedulerSettings default_scheduler_settings; |
451 | 451 |
452 size_t num_commit_states = | 452 size_t num_commit_states = |
453 sizeof(all_commit_states) / sizeof(SchedulerStateMachine::CommitState); | 453 sizeof(all_commit_states) / sizeof(SchedulerStateMachine::CommitState); |
454 for (size_t i = 0; i < num_commit_states; ++i) { | 454 for (size_t i = 0; i < num_commit_states; ++i) { |
455 // There shouldn't be any drawing regardless of vsync. | 455 // There shouldn't be any drawing regardless of BeginFrame. |
456 for (size_t j = 0; j < 2; ++j) { | 456 for (size_t j = 0; j < 2; ++j) { |
457 StateMachine state(default_scheduler_settings); | 457 StateMachine state(default_scheduler_settings); |
458 state.SetCanStart(); | 458 state.SetCanStart(); |
459 state.UpdateState(state.NextAction()); | 459 state.UpdateState(state.NextAction()); |
460 state.DidCreateAndInitializeOutputSurface(); | 460 state.DidCreateAndInitializeOutputSurface(); |
461 state.SetCommitState(all_commit_states[i]); | 461 state.SetCommitState(all_commit_states[i]); |
462 state.SetVisible(false); | 462 state.SetVisible(false); |
463 state.SetNeedsRedraw(true); | 463 state.SetNeedsRedraw(true); |
464 state.SetNeedsForcedRedraw(false); | 464 state.SetNeedsForcedRedraw(false); |
465 if (j == 1) | 465 if (j == 1) |
466 state.DidEnterVSync(); | 466 state.DidEnterBeginFrame(); |
467 | 467 |
468 // Case 1: needs_commit=false. | 468 // Case 1: needs_commit=false. |
469 EXPECT_NE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, | 469 EXPECT_NE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, |
470 state.NextAction()); | 470 state.NextAction()); |
471 | 471 |
472 // Case 2: needs_commit=true. | 472 // Case 2: needs_commit=true. |
473 state.SetNeedsCommit(); | 473 state.SetNeedsCommit(); |
474 EXPECT_NE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, | 474 EXPECT_NE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, |
475 state.NextAction()); | 475 state.NextAction()); |
476 } | 476 } |
477 } | 477 } |
478 } | 478 } |
479 | 479 |
480 TEST(SchedulerStateMachineTest, TestCanRedraw_StopsDraw) { | 480 TEST(SchedulerStateMachineTest, TestCanRedraw_StopsDraw) { |
481 SchedulerSettings default_scheduler_settings; | 481 SchedulerSettings default_scheduler_settings; |
482 | 482 |
483 size_t num_commit_states = | 483 size_t num_commit_states = |
484 sizeof(all_commit_states) / sizeof(SchedulerStateMachine::CommitState); | 484 sizeof(all_commit_states) / sizeof(SchedulerStateMachine::CommitState); |
485 for (size_t i = 0; i < num_commit_states; ++i) { | 485 for (size_t i = 0; i < num_commit_states; ++i) { |
486 // There shouldn't be any drawing regardless of vsync. | 486 // There shouldn't be any drawing regardless of BeginFrame. |
487 for (size_t j = 0; j < 2; ++j) { | 487 for (size_t j = 0; j < 2; ++j) { |
488 StateMachine state(default_scheduler_settings); | 488 StateMachine state(default_scheduler_settings); |
489 state.SetCanStart(); | 489 state.SetCanStart(); |
490 state.UpdateState(state.NextAction()); | 490 state.UpdateState(state.NextAction()); |
491 state.DidCreateAndInitializeOutputSurface(); | 491 state.DidCreateAndInitializeOutputSurface(); |
492 state.SetCommitState(all_commit_states[i]); | 492 state.SetCommitState(all_commit_states[i]); |
493 state.SetVisible(false); | 493 state.SetVisible(false); |
494 state.SetNeedsRedraw(true); | 494 state.SetNeedsRedraw(true); |
495 state.SetNeedsForcedRedraw(false); | 495 state.SetNeedsForcedRedraw(false); |
496 if (j == 1) | 496 if (j == 1) |
497 state.DidEnterVSync(); | 497 state.DidEnterBeginFrame(); |
498 | 498 |
499 state.SetCanDraw(false); | 499 state.SetCanDraw(false); |
500 EXPECT_NE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, | 500 EXPECT_NE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, |
501 state.NextAction()); | 501 state.NextAction()); |
502 } | 502 } |
503 } | 503 } |
504 } | 504 } |
505 | 505 |
506 TEST(SchedulerStateMachineTest, | 506 TEST(SchedulerStateMachineTest, |
507 TestCanRedrawWithWaitingForFirstDrawMakesProgress) { | 507 TestCanRedrawWithWaitingForFirstDrawMakesProgress) { |
(...skipping 29 matching lines...) Expand all Loading... |
537 | 537 |
538 // Now, while the frame is in progress, set another commit. | 538 // Now, while the frame is in progress, set another commit. |
539 state.SetNeedsCommit(); | 539 state.SetNeedsCommit(); |
540 EXPECT_TRUE(state.NeedsCommit()); | 540 EXPECT_TRUE(state.NeedsCommit()); |
541 | 541 |
542 // Let the frame finish. | 542 // Let the frame finish. |
543 state.BeginFrameComplete(); | 543 state.BeginFrameComplete(); |
544 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT, | 544 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT, |
545 state.CommitState()); | 545 state.CommitState()); |
546 | 546 |
547 // Expect to commit regardless of vsync state. | 547 // Expect to commit regardless of BeginFrame state. |
548 state.DidLeaveVSync(); | 548 state.DidLeaveBeginFrame(); |
549 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction()); | 549 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction()); |
550 state.DidEnterVSync(); | 550 state.DidEnterBeginFrame(); |
551 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction()); | 551 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction()); |
552 | 552 |
553 // Commit and make sure we draw on next vsync | 553 // Commit and make sure we draw on next BeginFrame |
554 state.UpdateState(SchedulerStateMachine::ACTION_COMMIT); | 554 state.UpdateState(SchedulerStateMachine::ACTION_COMMIT); |
555 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction()); | 555 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction()); |
556 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW, | 556 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW, |
557 state.CommitState()); | 557 state.CommitState()); |
558 state.UpdateState(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); | 558 state.UpdateState(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); |
559 state.DidDrawIfPossibleCompleted(true); | 559 state.DidDrawIfPossibleCompleted(true); |
560 | 560 |
561 // Verify that another commit will begin. | 561 // Verify that another commit will begin. |
562 state.DidLeaveVSync(); | 562 state.DidLeaveBeginFrame(); |
563 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_FRAME, state.NextAction()); | 563 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_FRAME, state.NextAction()); |
564 } | 564 } |
565 | 565 |
566 TEST(SchedulerStateMachineTest, TestFullCycle) { | 566 TEST(SchedulerStateMachineTest, TestFullCycle) { |
567 SchedulerSettings default_scheduler_settings; | 567 SchedulerSettings default_scheduler_settings; |
568 StateMachine state(default_scheduler_settings); | 568 StateMachine state(default_scheduler_settings); |
569 state.SetCanStart(); | 569 state.SetCanStart(); |
570 state.UpdateState(state.NextAction()); | 570 state.UpdateState(state.NextAction()); |
571 state.DidCreateAndInitializeOutputSurface(); | 571 state.DidCreateAndInitializeOutputSurface(); |
572 state.SetVisible(true); | 572 state.SetVisible(true); |
(...skipping 15 matching lines...) Expand all Loading... |
588 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT, | 588 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT, |
589 state.CommitState()); | 589 state.CommitState()); |
590 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction()); | 590 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction()); |
591 | 591 |
592 // Commit. | 592 // Commit. |
593 state.UpdateState(SchedulerStateMachine::ACTION_COMMIT); | 593 state.UpdateState(SchedulerStateMachine::ACTION_COMMIT); |
594 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW, | 594 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW, |
595 state.CommitState()); | 595 state.CommitState()); |
596 EXPECT_TRUE(state.NeedsRedraw()); | 596 EXPECT_TRUE(state.NeedsRedraw()); |
597 | 597 |
598 // Expect to do nothing until vsync. | 598 // Expect to do nothing until BeginFrame. |
599 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); | 599 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); |
600 | 600 |
601 // At vsync, draw. | 601 // At BeginFrame, draw. |
602 state.DidEnterVSync(); | 602 state.DidEnterBeginFrame(); |
603 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction()); | 603 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction()); |
604 state.UpdateState(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); | 604 state.UpdateState(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); |
605 state.DidDrawIfPossibleCompleted(true); | 605 state.DidDrawIfPossibleCompleted(true); |
606 state.DidLeaveVSync(); | 606 state.DidLeaveBeginFrame(); |
607 | 607 |
608 // Should be synchronized, no draw needed, no action needed. | 608 // Should be synchronized, no draw needed, no action needed. |
609 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); | 609 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); |
610 EXPECT_FALSE(state.NeedsRedraw()); | 610 EXPECT_FALSE(state.NeedsRedraw()); |
611 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); | 611 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); |
612 } | 612 } |
613 | 613 |
614 TEST(SchedulerStateMachineTest, TestFullCycleWithCommitRequestInbetween) { | 614 TEST(SchedulerStateMachineTest, TestFullCycleWithCommitRequestInbetween) { |
615 SchedulerSettings default_scheduler_settings; | 615 SchedulerSettings default_scheduler_settings; |
616 StateMachine state(default_scheduler_settings); | 616 StateMachine state(default_scheduler_settings); |
(...skipping 23 matching lines...) Expand all Loading... |
640 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT, | 640 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT, |
641 state.CommitState()); | 641 state.CommitState()); |
642 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction()); | 642 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction()); |
643 | 643 |
644 // Commit. | 644 // Commit. |
645 state.UpdateState(SchedulerStateMachine::ACTION_COMMIT); | 645 state.UpdateState(SchedulerStateMachine::ACTION_COMMIT); |
646 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW, | 646 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW, |
647 state.CommitState()); | 647 state.CommitState()); |
648 EXPECT_TRUE(state.NeedsRedraw()); | 648 EXPECT_TRUE(state.NeedsRedraw()); |
649 | 649 |
650 // Expect to do nothing until vsync. | 650 // Expect to do nothing until BeginFrame. |
651 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); | 651 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); |
652 | 652 |
653 // At vsync, draw. | 653 // At BeginFrame, draw. |
654 state.DidEnterVSync(); | 654 state.DidEnterBeginFrame(); |
655 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction()); | 655 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction()); |
656 state.UpdateState(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); | 656 state.UpdateState(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); |
657 state.DidDrawIfPossibleCompleted(true); | 657 state.DidDrawIfPossibleCompleted(true); |
658 state.DidLeaveVSync(); | 658 state.DidLeaveBeginFrame(); |
659 | 659 |
660 // Should be synchronized, no draw needed, no action needed. | 660 // Should be synchronized, no draw needed, no action needed. |
661 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); | 661 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); |
662 EXPECT_FALSE(state.NeedsRedraw()); | 662 EXPECT_FALSE(state.NeedsRedraw()); |
663 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_FRAME, state.NextAction()); | 663 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_FRAME, state.NextAction()); |
664 } | 664 } |
665 | 665 |
666 TEST(SchedulerStateMachineTest, TestRequestCommitInvisible) { | 666 TEST(SchedulerStateMachineTest, TestRequestCommitInvisible) { |
667 SchedulerSettings default_scheduler_settings; | 667 SchedulerSettings default_scheduler_settings; |
668 StateMachine state(default_scheduler_settings); | 668 StateMachine state(default_scheduler_settings); |
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
792 // Recreate the context | 792 // Recreate the context |
793 state.DidCreateAndInitializeOutputSurface(); | 793 state.DidCreateAndInitializeOutputSurface(); |
794 | 794 |
795 // When the context is recreated, we should begin a commit | 795 // When the context is recreated, we should begin a commit |
796 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_FRAME, state.NextAction()); | 796 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_FRAME, state.NextAction()); |
797 state.UpdateState(state.NextAction()); | 797 state.UpdateState(state.NextAction()); |
798 | 798 |
799 // Once the context is recreated, whether we draw should be based on | 799 // Once the context is recreated, whether we draw should be based on |
800 // SetCanDraw. | 800 // SetCanDraw. |
801 state.SetNeedsRedraw(true); | 801 state.SetNeedsRedraw(true); |
802 state.DidEnterVSync(); | 802 state.DidEnterBeginFrame(); |
803 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction()); | 803 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction()); |
804 state.SetCanDraw(false); | 804 state.SetCanDraw(false); |
805 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); | 805 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); |
806 state.SetCanDraw(true); | 806 state.SetCanDraw(true); |
807 state.DidLeaveVSync(); | 807 state.DidLeaveBeginFrame(); |
808 } | 808 } |
809 | 809 |
810 TEST(SchedulerStateMachineTest, TestContextLostWhileCommitInProgress) { | 810 TEST(SchedulerStateMachineTest, TestContextLostWhileCommitInProgress) { |
811 SchedulerSettings default_scheduler_settings; | 811 SchedulerSettings default_scheduler_settings; |
812 StateMachine state(default_scheduler_settings); | 812 StateMachine state(default_scheduler_settings); |
813 state.SetCanStart(); | 813 state.SetCanStart(); |
814 state.UpdateState(state.NextAction()); | 814 state.UpdateState(state.NextAction()); |
815 state.DidCreateAndInitializeOutputSurface(); | 815 state.DidCreateAndInitializeOutputSurface(); |
816 state.SetVisible(true); | 816 state.SetVisible(true); |
817 state.SetCanDraw(true); | 817 state.SetCanDraw(true); |
818 | 818 |
819 // Get a commit in flight. | 819 // Get a commit in flight. |
820 state.SetNeedsCommit(); | 820 state.SetNeedsCommit(); |
821 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_FRAME, state.NextAction()); | 821 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_FRAME, state.NextAction()); |
822 state.UpdateState(state.NextAction()); | 822 state.UpdateState(state.NextAction()); |
823 | 823 |
824 // Set damage and expect a draw. | 824 // Set damage and expect a draw. |
825 state.SetNeedsRedraw(true); | 825 state.SetNeedsRedraw(true); |
826 state.DidEnterVSync(); | 826 state.DidEnterBeginFrame(); |
827 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction()); | 827 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction()); |
828 state.UpdateState(state.NextAction()); | 828 state.UpdateState(state.NextAction()); |
829 state.DidLeaveVSync(); | 829 state.DidLeaveBeginFrame(); |
830 | 830 |
831 // Cause a lost context while the begin frame is in flight. | 831 // Cause a lost context while the begin frame is in flight. |
832 state.DidLoseOutputSurface(); | 832 state.DidLoseOutputSurface(); |
833 | 833 |
834 // Ask for another draw. Expect nothing happens. | 834 // Ask for another draw. Expect nothing happens. |
835 state.SetNeedsRedraw(true); | 835 state.SetNeedsRedraw(true); |
836 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); | 836 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); |
837 | 837 |
838 // Finish the frame, and commit. | 838 // Finish the frame, and commit. |
839 state.BeginFrameComplete(); | 839 state.BeginFrameComplete(); |
840 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction()); | 840 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction()); |
841 state.UpdateState(state.NextAction()); | 841 state.UpdateState(state.NextAction()); |
842 | 842 |
843 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW, | 843 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW, |
844 state.CommitState()); | 844 state.CommitState()); |
845 | 845 |
846 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction()); | 846 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction()); |
847 state.UpdateState(state.NextAction()); | 847 state.UpdateState(state.NextAction()); |
848 | 848 |
849 // Expect to be told to begin context recreation, independent of vsync state. | 849 // Expect to be told to begin context recreation, independent of BeginFrame |
850 state.DidEnterVSync(); | 850 // state. |
| 851 state.DidEnterBeginFrame(); |
851 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION, | 852 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION, |
852 state.NextAction()); | 853 state.NextAction()); |
853 state.DidLeaveVSync(); | 854 state.DidLeaveBeginFrame(); |
854 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION, | 855 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION, |
855 state.NextAction()); | 856 state.NextAction()); |
856 } | 857 } |
857 | 858 |
858 TEST(SchedulerStateMachineTest, | 859 TEST(SchedulerStateMachineTest, |
859 TestContextLostWhileCommitInProgressAndAnotherCommitRequested) { | 860 TestContextLostWhileCommitInProgressAndAnotherCommitRequested) { |
860 SchedulerSettings default_scheduler_settings; | 861 SchedulerSettings default_scheduler_settings; |
861 StateMachine state(default_scheduler_settings); | 862 StateMachine state(default_scheduler_settings); |
862 state.SetCanStart(); | 863 state.SetCanStart(); |
863 state.UpdateState(state.NextAction()); | 864 state.UpdateState(state.NextAction()); |
864 state.DidCreateAndInitializeOutputSurface(); | 865 state.DidCreateAndInitializeOutputSurface(); |
865 state.SetVisible(true); | 866 state.SetVisible(true); |
866 state.SetCanDraw(true); | 867 state.SetCanDraw(true); |
867 | 868 |
868 // Get a commit in flight. | 869 // Get a commit in flight. |
869 state.SetNeedsCommit(); | 870 state.SetNeedsCommit(); |
870 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_FRAME, state.NextAction()); | 871 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_FRAME, state.NextAction()); |
871 state.UpdateState(state.NextAction()); | 872 state.UpdateState(state.NextAction()); |
872 | 873 |
873 // Set damage and expect a draw. | 874 // Set damage and expect a draw. |
874 state.SetNeedsRedraw(true); | 875 state.SetNeedsRedraw(true); |
875 state.DidEnterVSync(); | 876 state.DidEnterBeginFrame(); |
876 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction()); | 877 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction()); |
877 state.UpdateState(state.NextAction()); | 878 state.UpdateState(state.NextAction()); |
878 state.DidLeaveVSync(); | 879 state.DidLeaveBeginFrame(); |
879 | 880 |
880 // Cause a lost context while the begin frame is in flight. | 881 // Cause a lost context while the begin frame is in flight. |
881 state.DidLoseOutputSurface(); | 882 state.DidLoseOutputSurface(); |
882 | 883 |
883 // Ask for another draw and also set needs commit. Expect nothing happens. | 884 // Ask for another draw and also set needs commit. Expect nothing happens. |
884 state.SetNeedsRedraw(true); | 885 state.SetNeedsRedraw(true); |
885 state.SetNeedsCommit(); | 886 state.SetNeedsCommit(); |
886 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); | 887 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); |
887 | 888 |
888 // Finish the frame, and commit. | 889 // Finish the frame, and commit. |
889 state.BeginFrameComplete(); | 890 state.BeginFrameComplete(); |
890 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction()); | 891 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction()); |
891 state.UpdateState(state.NextAction()); | 892 state.UpdateState(state.NextAction()); |
892 | 893 |
893 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW, | 894 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW, |
894 state.CommitState()); | 895 state.CommitState()); |
895 | 896 |
896 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction()); | 897 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction()); |
897 state.UpdateState(state.NextAction()); | 898 state.UpdateState(state.NextAction()); |
898 | 899 |
899 // Expect to be told to begin context recreation, independent of vsync state | 900 // Expect to be told to begin context recreation, independent of BeginFrame |
900 state.DidEnterVSync(); | 901 // state |
| 902 state.DidEnterBeginFrame(); |
901 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION, | 903 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION, |
902 state.NextAction()); | 904 state.NextAction()); |
903 state.DidLeaveVSync(); | 905 state.DidLeaveBeginFrame(); |
904 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION, | 906 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION, |
905 state.NextAction()); | 907 state.NextAction()); |
906 } | 908 } |
907 | 909 |
908 TEST(SchedulerStateMachineTest, TestFinishAllRenderingWhileContextLost) { | 910 TEST(SchedulerStateMachineTest, TestFinishAllRenderingWhileContextLost) { |
909 SchedulerSettings default_scheduler_settings; | 911 SchedulerSettings default_scheduler_settings; |
910 StateMachine state(default_scheduler_settings); | 912 StateMachine state(default_scheduler_settings); |
911 state.SetCanStart(); | 913 state.SetCanStart(); |
912 state.UpdateState(state.NextAction()); | 914 state.UpdateState(state.NextAction()); |
913 state.DidCreateAndInitializeOutputSurface(); | 915 state.DidCreateAndInitializeOutputSurface(); |
914 state.SetVisible(true); | 916 state.SetVisible(true); |
915 state.SetCanDraw(true); | 917 state.SetCanDraw(true); |
916 | 918 |
917 // Cause a lost context lost. | 919 // Cause a lost context lost. |
918 state.DidLoseOutputSurface(); | 920 state.DidLoseOutputSurface(); |
919 | 921 |
920 // Ask a forced redraw and verify it ocurrs. | 922 // Ask a forced redraw and verify it ocurrs. |
921 state.SetNeedsForcedRedraw(true); | 923 state.SetNeedsForcedRedraw(true); |
922 state.DidEnterVSync(); | 924 state.DidEnterBeginFrame(); |
923 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_FORCED, state.NextAction()); | 925 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_FORCED, state.NextAction()); |
924 state.DidLeaveVSync(); | 926 state.DidLeaveBeginFrame(); |
925 | 927 |
926 // Clear the forced redraw bit. | 928 // Clear the forced redraw bit. |
927 state.SetNeedsForcedRedraw(false); | 929 state.SetNeedsForcedRedraw(false); |
928 | 930 |
929 // Expect to be told to begin context recreation, independent of vsync state | 931 // Expect to be told to begin context recreation, independent of BeginFrame |
| 932 // state |
930 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION, | 933 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION, |
931 state.NextAction()); | 934 state.NextAction()); |
932 state.UpdateState(state.NextAction()); | 935 state.UpdateState(state.NextAction()); |
933 | 936 |
934 // Ask a forced redraw and verify it ocurrs. | 937 // Ask a forced redraw and verify it ocurrs. |
935 state.SetNeedsForcedRedraw(true); | 938 state.SetNeedsForcedRedraw(true); |
936 state.DidEnterVSync(); | 939 state.DidEnterBeginFrame(); |
937 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_FORCED, state.NextAction()); | 940 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_FORCED, state.NextAction()); |
938 state.DidLeaveVSync(); | 941 state.DidLeaveBeginFrame(); |
939 } | 942 } |
940 | 943 |
941 TEST(SchedulerStateMachineTest, DontDrawBeforeCommitAfterLostOutputSurface) { | 944 TEST(SchedulerStateMachineTest, DontDrawBeforeCommitAfterLostOutputSurface) { |
942 SchedulerSettings default_scheduler_settings; | 945 SchedulerSettings default_scheduler_settings; |
943 StateMachine state(default_scheduler_settings); | 946 StateMachine state(default_scheduler_settings); |
944 state.SetCanStart(); | 947 state.SetCanStart(); |
945 state.UpdateState(state.NextAction()); | 948 state.UpdateState(state.NextAction()); |
946 state.DidCreateAndInitializeOutputSurface(); | 949 state.DidCreateAndInitializeOutputSurface(); |
947 state.SetVisible(true); | 950 state.SetVisible(true); |
948 state.SetCanDraw(true); | 951 state.SetCanDraw(true); |
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1058 state.UpdateState(state.NextAction()); | 1061 state.UpdateState(state.NextAction()); |
1059 state.BeginFrameComplete(); | 1062 state.BeginFrameComplete(); |
1060 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction()); | 1063 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction()); |
1061 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT, | 1064 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT, |
1062 state.CommitState()); | 1065 state.CommitState()); |
1063 state.UpdateState(state.NextAction()); | 1066 state.UpdateState(state.NextAction()); |
1064 | 1067 |
1065 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_FORCED_DRAW, | 1068 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_FORCED_DRAW, |
1066 state.CommitState()); | 1069 state.CommitState()); |
1067 | 1070 |
1068 state.DidEnterVSync(); | 1071 state.DidEnterBeginFrame(); |
1069 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); | 1072 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); |
1070 state.SetNeedsForcedRedraw(true); | 1073 state.SetNeedsForcedRedraw(true); |
1071 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_FORCED, state.NextAction()); | 1074 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_FORCED, state.NextAction()); |
1072 state.UpdateState(state.NextAction()); | 1075 state.UpdateState(state.NextAction()); |
1073 state.DidDrawIfPossibleCompleted(true); | 1076 state.DidDrawIfPossibleCompleted(true); |
1074 state.DidLeaveVSync(); | 1077 state.DidLeaveBeginFrame(); |
1075 | 1078 |
1076 // Should be waiting for the normal begin frame. | 1079 // Should be waiting for the normal begin frame. |
1077 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS, | 1080 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS, |
1078 state.CommitState()); | 1081 state.CommitState()); |
1079 } | 1082 } |
1080 | 1083 |
1081 TEST(SchedulerStateMachineTest, TestImmediateBeginFrameDuringCommit) { | 1084 TEST(SchedulerStateMachineTest, TestImmediateBeginFrameDuringCommit) { |
1082 SchedulerSettings default_scheduler_settings; | 1085 SchedulerSettings default_scheduler_settings; |
1083 StateMachine state(default_scheduler_settings); | 1086 StateMachine state(default_scheduler_settings); |
1084 state.SetCanStart(); | 1087 state.SetCanStart(); |
(...skipping 12 matching lines...) Expand all Loading... |
1097 state.UpdateState(state.NextAction()); | 1100 state.UpdateState(state.NextAction()); |
1098 state.BeginFrameComplete(); | 1101 state.BeginFrameComplete(); |
1099 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction()); | 1102 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction()); |
1100 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT, | 1103 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT, |
1101 state.CommitState()); | 1104 state.CommitState()); |
1102 state.UpdateState(state.NextAction()); | 1105 state.UpdateState(state.NextAction()); |
1103 | 1106 |
1104 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_FORCED_DRAW, | 1107 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_FORCED_DRAW, |
1105 state.CommitState()); | 1108 state.CommitState()); |
1106 | 1109 |
1107 state.DidEnterVSync(); | 1110 state.DidEnterBeginFrame(); |
1108 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); | 1111 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); |
1109 state.SetNeedsForcedRedraw(true); | 1112 state.SetNeedsForcedRedraw(true); |
1110 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_FORCED, state.NextAction()); | 1113 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_FORCED, state.NextAction()); |
1111 state.UpdateState(state.NextAction()); | 1114 state.UpdateState(state.NextAction()); |
1112 state.DidDrawIfPossibleCompleted(true); | 1115 state.DidDrawIfPossibleCompleted(true); |
1113 state.DidLeaveVSync(); | 1116 state.DidLeaveBeginFrame(); |
1114 | 1117 |
1115 // Should be waiting for the normal begin frame. | 1118 // Should be waiting for the normal begin frame. |
1116 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS, | 1119 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS, |
1117 state.CommitState()) << state.ToString(); | 1120 state.CommitState()) << state.ToString(); |
1118 } | 1121 } |
1119 | 1122 |
1120 TEST(SchedulerStateMachineTest, ImmediateBeginFrameWhileInvisible) { | 1123 TEST(SchedulerStateMachineTest, ImmediateBeginFrameWhileInvisible) { |
1121 SchedulerSettings default_scheduler_settings; | 1124 SchedulerSettings default_scheduler_settings; |
1122 StateMachine state(default_scheduler_settings); | 1125 StateMachine state(default_scheduler_settings); |
1123 state.SetCanStart(); | 1126 state.SetCanStart(); |
(...skipping 11 matching lines...) Expand all Loading... |
1135 state.BeginFrameComplete(); | 1138 state.BeginFrameComplete(); |
1136 | 1139 |
1137 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction()); | 1140 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction()); |
1138 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT, | 1141 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT, |
1139 state.CommitState()); | 1142 state.CommitState()); |
1140 state.UpdateState(state.NextAction()); | 1143 state.UpdateState(state.NextAction()); |
1141 | 1144 |
1142 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_FORCED_DRAW, | 1145 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_FORCED_DRAW, |
1143 state.CommitState()); | 1146 state.CommitState()); |
1144 | 1147 |
1145 state.DidEnterVSync(); | 1148 state.DidEnterBeginFrame(); |
1146 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); | 1149 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); |
1147 state.SetNeedsForcedRedraw(true); | 1150 state.SetNeedsForcedRedraw(true); |
1148 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_FORCED, state.NextAction()); | 1151 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_FORCED, state.NextAction()); |
1149 state.UpdateState(state.NextAction()); | 1152 state.UpdateState(state.NextAction()); |
1150 state.DidDrawIfPossibleCompleted(true); | 1153 state.DidDrawIfPossibleCompleted(true); |
1151 state.DidLeaveVSync(); | 1154 state.DidLeaveBeginFrame(); |
1152 | 1155 |
1153 // Should be waiting for the normal begin frame. | 1156 // Should be waiting for the normal begin frame. |
1154 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS, | 1157 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS, |
1155 state.CommitState()) << state.ToString(); | 1158 state.CommitState()) << state.ToString(); |
1156 | 1159 |
1157 // Become invisible and abort the "normal" begin frame. | 1160 // Become invisible and abort the "normal" begin frame. |
1158 state.SetVisible(false); | 1161 state.SetVisible(false); |
1159 state.BeginFrameAborted(); | 1162 state.BeginFrameAborted(); |
1160 | 1163 |
1161 // Should be back in the idle state, but needing a commit. | 1164 // Should be back in the idle state, but needing a commit. |
(...skipping 19 matching lines...) Expand all Loading... |
1181 state.BeginFrameComplete(); | 1184 state.BeginFrameComplete(); |
1182 | 1185 |
1183 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction()); | 1186 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction()); |
1184 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT, | 1187 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT, |
1185 state.CommitState()); | 1188 state.CommitState()); |
1186 state.UpdateState(state.NextAction()); | 1189 state.UpdateState(state.NextAction()); |
1187 | 1190 |
1188 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_FORCED_DRAW, | 1191 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_FORCED_DRAW, |
1189 state.CommitState()); | 1192 state.CommitState()); |
1190 | 1193 |
1191 state.DidEnterVSync(); | 1194 state.DidEnterBeginFrame(); |
1192 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); | 1195 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); |
1193 state.SetNeedsForcedRedraw(true); | 1196 state.SetNeedsForcedRedraw(true); |
1194 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_FORCED, state.NextAction()); | 1197 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_FORCED, state.NextAction()); |
1195 state.UpdateState(state.NextAction()); | 1198 state.UpdateState(state.NextAction()); |
1196 state.DidDrawIfPossibleCompleted(true); | 1199 state.DidDrawIfPossibleCompleted(true); |
1197 state.DidLeaveVSync(); | 1200 state.DidLeaveBeginFrame(); |
1198 } | 1201 } |
1199 | 1202 |
1200 TEST(SchedulerStateMachineTest, ReportIfNotDrawing) { | 1203 TEST(SchedulerStateMachineTest, ReportIfNotDrawing) { |
1201 SchedulerSettings default_scheduler_settings; | 1204 SchedulerSettings default_scheduler_settings; |
1202 SchedulerStateMachine state(default_scheduler_settings); | 1205 SchedulerStateMachine state(default_scheduler_settings); |
1203 | 1206 |
1204 state.SetCanDraw(true); | 1207 state.SetCanDraw(true); |
1205 state.SetVisible(true); | 1208 state.SetVisible(true); |
1206 EXPECT_FALSE(state.DrawSuspendedUntilCommit()); | 1209 EXPECT_FALSE(state.DrawSuspendedUntilCommit()); |
1207 | 1210 |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1250 EXPECT_TRUE(state.DrawSuspendedUntilCommit()); | 1253 EXPECT_TRUE(state.DrawSuspendedUntilCommit()); |
1251 | 1254 |
1252 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction()); | 1255 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction()); |
1253 | 1256 |
1254 state.UpdateState(state.NextAction()); | 1257 state.UpdateState(state.NextAction()); |
1255 EXPECT_FALSE(state.DrawSuspendedUntilCommit()); | 1258 EXPECT_FALSE(state.DrawSuspendedUntilCommit()); |
1256 } | 1259 } |
1257 | 1260 |
1258 } // namespace | 1261 } // namespace |
1259 } // namespace cc | 1262 } // namespace cc |
OLD | NEW |