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

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

Issue 15058004: cc: Rename VSync to BeginFrame (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Fix Android Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2011 The Chromium Authors. All rights reserved. 1 // Copyright 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/scheduler/scheduler_state_machine.h" 5 #include "cc/scheduler/scheduler_state_machine.h"
6 6
7 #include "cc/scheduler/scheduler.h" 7 #include "cc/scheduler/scheduler.h"
8 #include "testing/gtest/include/gtest/gtest.h" 8 #include "testing/gtest/include/gtest/gtest.h"
9 9
10 namespace cc { 10 namespace cc {
(...skipping 17 matching lines...) Expand all
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_; }
39 bool Visible() const { return visible_; } 38 bool Visible() const { return visible_; }
40 }; 39 };
41 40
42 TEST(SchedulerStateMachineTest, TestNextActionBeginsFrameIfNeeded) { 41 TEST(SchedulerStateMachineTest, TestNextActionBeginsMainFrameIfNeeded) {
43 SchedulerSettings default_scheduler_settings; 42 SchedulerSettings default_scheduler_settings;
44 43
45 // If no commit needed, do nothing. 44 // If no commit needed, do nothing.
46 { 45 {
47 StateMachine state(default_scheduler_settings); 46 StateMachine state(default_scheduler_settings);
48 state.SetCanStart(); 47 state.SetCanStart();
49 state.UpdateState(state.NextAction()); 48 state.UpdateState(state.NextAction());
50 state.DidCreateAndInitializeOutputSurface(); 49 state.DidCreateAndInitializeOutputSurface();
51 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE); 50 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE);
52 state.SetNeedsRedraw(false); 51 state.SetNeedsRedraw(false);
53 state.SetVisible(true); 52 state.SetVisible(true);
54 53
55 EXPECT_FALSE(state.VSyncCallbackNeeded()); 54 EXPECT_FALSE(state.BeginMainFrameCallbackNeeded());
56 55
57 state.DidLeaveVSync(); 56 state.DidLeaveBeginImplFrame();
58 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); 57 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction());
59 EXPECT_FALSE(state.VSyncCallbackNeeded()); 58 EXPECT_FALSE(state.BeginMainFrameCallbackNeeded());
60 state.DidEnterVSync(); 59 state.DidEnterBeginImplFrame();
61 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); 60 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction());
62 } 61 }
63 62
64 // If commit requested but can_begin_frame is still false, do nothing. 63 // If commit requested but can_start is still false, do nothing.
65 { 64 {
66 StateMachine state(default_scheduler_settings); 65 StateMachine state(default_scheduler_settings);
67 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE); 66 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE);
68 state.SetNeedsRedraw(false); 67 state.SetNeedsRedraw(false);
69 state.SetVisible(true); 68 state.SetVisible(true);
70 69
71 EXPECT_FALSE(state.VSyncCallbackNeeded()); 70 EXPECT_FALSE(state.BeginMainFrameCallbackNeeded());
72 71
73 state.DidLeaveVSync(); 72 state.DidLeaveBeginImplFrame();
74 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); 73 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction());
75 EXPECT_FALSE(state.VSyncCallbackNeeded()); 74 EXPECT_FALSE(state.BeginMainFrameCallbackNeeded());
76 state.DidEnterVSync(); 75 state.DidEnterBeginImplFrame();
77 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); 76 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction());
78 } 77 }
79 78
80 // If commit requested, begin a frame. 79 // If commit requested, begin a main frame.
81 { 80 {
82 StateMachine state(default_scheduler_settings); 81 StateMachine state(default_scheduler_settings);
83 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE); 82 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE);
84 state.SetCanStart(); 83 state.SetCanStart();
85 state.SetNeedsRedraw(false); 84 state.SetNeedsRedraw(false);
86 state.SetVisible(true); 85 state.SetVisible(true);
87 EXPECT_FALSE(state.VSyncCallbackNeeded()); 86 EXPECT_FALSE(state.BeginMainFrameCallbackNeeded());
88 } 87 }
89 88
90 // Begin the frame, make sure needs_commit and commit_state update correctly. 89 // Begin the frame, make sure needs_commit and commit_state update correctly.
91 { 90 {
92 StateMachine state(default_scheduler_settings); 91 StateMachine state(default_scheduler_settings);
93 state.SetCanStart(); 92 state.SetCanStart();
94 state.UpdateState(state.NextAction()); 93 state.UpdateState(state.NextAction());
95 state.DidCreateAndInitializeOutputSurface(); 94 state.DidCreateAndInitializeOutputSurface();
96 state.SetVisible(true); 95 state.SetVisible(true);
97 state.UpdateState(SchedulerStateMachine::ACTION_BEGIN_FRAME); 96 state.UpdateState(SchedulerStateMachine::ACTION_BEGIN_MAIN_FRAME);
98 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS, 97 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS,
99 state.CommitState()); 98 state.CommitState());
100 EXPECT_FALSE(state.NeedsCommit()); 99 EXPECT_FALSE(state.NeedsCommit());
101 EXPECT_FALSE(state.VSyncCallbackNeeded()); 100 EXPECT_FALSE(state.BeginMainFrameCallbackNeeded());
102 } 101 }
103 } 102 }
104 103
105 TEST(SchedulerStateMachineTest, TestSetForcedRedrawDoesNotSetsNormalRedraw) { 104 TEST(SchedulerStateMachineTest, TestSetForcedRedrawDoesNotSetsNormalRedraw) {
106 SchedulerSettings default_scheduler_settings; 105 SchedulerSettings default_scheduler_settings;
107 SchedulerStateMachine state(default_scheduler_settings); 106 SchedulerStateMachine state(default_scheduler_settings);
108 state.SetCanDraw(true); 107 state.SetCanDraw(true);
109 state.SetNeedsForcedRedraw(); 108 state.SetNeedsForcedRedraw();
110 EXPECT_FALSE(state.RedrawPending()); 109 EXPECT_FALSE(state.RedrawPending());
111 EXPECT_TRUE(state.VSyncCallbackNeeded()); 110 EXPECT_TRUE(state.BeginMainFrameCallbackNeeded());
112 } 111 }
113 112
114 TEST(SchedulerStateMachineTest, 113 TEST(SchedulerStateMachineTest,
115 TestFailedDrawSetsNeedsCommitAndDoesNotDrawAgain) { 114 TestFailedDrawSetsNeedsCommitAndDoesNotDrawAgain) {
116 SchedulerSettings default_scheduler_settings; 115 SchedulerSettings default_scheduler_settings;
117 SchedulerStateMachine state(default_scheduler_settings); 116 SchedulerStateMachine state(default_scheduler_settings);
118 state.SetCanStart(); 117 state.SetCanStart();
119 state.UpdateState(state.NextAction()); 118 state.UpdateState(state.NextAction());
120 state.DidCreateAndInitializeOutputSurface(); 119 state.DidCreateAndInitializeOutputSurface();
121 state.SetVisible(true); 120 state.SetVisible(true);
122 state.SetCanDraw(true); 121 state.SetCanDraw(true);
123 state.SetNeedsRedraw(); 122 state.SetNeedsRedraw();
124 EXPECT_TRUE(state.RedrawPending()); 123 EXPECT_TRUE(state.RedrawPending());
125 EXPECT_TRUE(state.VSyncCallbackNeeded()); 124 EXPECT_TRUE(state.BeginMainFrameCallbackNeeded());
126 state.DidEnterVSync(); 125 state.DidEnterBeginImplFrame();
127 126
128 // We're drawing now. 127 // We're drawing now.
129 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction()); 128 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction());
130 state.UpdateState(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); 129 state.UpdateState(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
131 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); 130 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction());
132 EXPECT_FALSE(state.RedrawPending()); 131 EXPECT_FALSE(state.RedrawPending());
133 EXPECT_FALSE(state.CommitPending()); 132 EXPECT_FALSE(state.CommitPending());
134 133
135 // Failing the draw makes us require a commit. 134 // Failing the draw makes us require a commit.
136 state.DidDrawIfPossibleCompleted(false); 135 state.DidDrawIfPossibleCompleted(false);
137 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_FRAME, state.NextAction()); 136 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_MAIN_FRAME, state.NextAction());
138 state.UpdateState(SchedulerStateMachine::ACTION_BEGIN_FRAME); 137 state.UpdateState(SchedulerStateMachine::ACTION_BEGIN_MAIN_FRAME);
139 EXPECT_TRUE(state.RedrawPending()); 138 EXPECT_TRUE(state.RedrawPending());
140 EXPECT_TRUE(state.CommitPending()); 139 EXPECT_TRUE(state.CommitPending());
141 } 140 }
142 141
143 TEST(SchedulerStateMachineTest, 142 TEST(SchedulerStateMachineTest,
144 TestsetNeedsRedrawDuringFailedDrawDoesNotRemoveNeedsRedraw) { 143 TestsetNeedsRedrawDuringFailedDrawDoesNotRemoveNeedsRedraw) {
145 SchedulerSettings default_scheduler_settings; 144 SchedulerSettings default_scheduler_settings;
146 SchedulerStateMachine state(default_scheduler_settings); 145 SchedulerStateMachine state(default_scheduler_settings);
147 state.SetCanStart(); 146 state.SetCanStart();
148 state.UpdateState(state.NextAction()); 147 state.UpdateState(state.NextAction());
149 state.DidCreateAndInitializeOutputSurface(); 148 state.DidCreateAndInitializeOutputSurface();
150 149
151 state.SetVisible(true); 150 state.SetVisible(true);
152 state.SetCanDraw(true); 151 state.SetCanDraw(true);
153 state.SetNeedsRedraw(); 152 state.SetNeedsRedraw();
154 EXPECT_TRUE(state.RedrawPending()); 153 EXPECT_TRUE(state.RedrawPending());
155 EXPECT_TRUE(state.VSyncCallbackNeeded()); 154 EXPECT_TRUE(state.BeginMainFrameCallbackNeeded());
156 state.DidEnterVSync(); 155 state.DidEnterBeginImplFrame();
157 156
158 // We're drawing now. 157 // We're drawing now.
159 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction()); 158 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction());
160 state.UpdateState(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); 159 state.UpdateState(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
161 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); 160 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction());
162 EXPECT_FALSE(state.RedrawPending()); 161 EXPECT_FALSE(state.RedrawPending());
163 EXPECT_FALSE(state.CommitPending()); 162 EXPECT_FALSE(state.CommitPending());
164 163
165 // While still in the same vsync callback, set needs redraw again. 164 // While still in the same BeginMainFrame callback, set needs redraw again.
166 // This should not redraw. 165 // This should not redraw.
167 state.SetNeedsRedraw(); 166 state.SetNeedsRedraw();
168 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); 167 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction());
169 168
170 // Failing the draw makes us require a commit. 169 // Failing the draw makes us require a commit.
171 state.DidDrawIfPossibleCompleted(false); 170 state.DidDrawIfPossibleCompleted(false);
172 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_FRAME, state.NextAction()); 171 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_MAIN_FRAME, state.NextAction());
173 EXPECT_TRUE(state.RedrawPending()); 172 EXPECT_TRUE(state.RedrawPending());
174 } 173 }
175 174
176 TEST(SchedulerStateMachineTest, 175 TEST(SchedulerStateMachineTest,
177 TestCommitAfterFailedDrawAllowsDrawInSameFrame) { 176 TestCommitAfterFailedDrawAllowsDrawInSameFrame) {
178 SchedulerSettings default_scheduler_settings; 177 SchedulerSettings default_scheduler_settings;
179 SchedulerStateMachine state(default_scheduler_settings); 178 SchedulerStateMachine state(default_scheduler_settings);
180 state.SetCanStart(); 179 state.SetCanStart();
181 state.UpdateState(state.NextAction()); 180 state.UpdateState(state.NextAction());
182 state.DidCreateAndInitializeOutputSurface(); 181 state.DidCreateAndInitializeOutputSurface();
183 state.SetVisible(true); 182 state.SetVisible(true);
184 state.SetCanDraw(true); 183 state.SetCanDraw(true);
185 184
186 // Start a commit. 185 // Start a commit.
187 state.SetNeedsCommit(); 186 state.SetNeedsCommit();
188 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_FRAME, state.NextAction()); 187 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_MAIN_FRAME, state.NextAction());
189 state.UpdateState(SchedulerStateMachine::ACTION_BEGIN_FRAME); 188 state.UpdateState(SchedulerStateMachine::ACTION_BEGIN_MAIN_FRAME);
190 EXPECT_TRUE(state.CommitPending()); 189 EXPECT_TRUE(state.CommitPending());
191 190
192 // Then initiate a draw. 191 // Then initiate a draw.
193 state.SetNeedsRedraw(); 192 state.SetNeedsRedraw();
194 EXPECT_TRUE(state.VSyncCallbackNeeded()); 193 EXPECT_TRUE(state.BeginMainFrameCallbackNeeded());
195 state.DidEnterVSync(); 194 state.DidEnterBeginImplFrame();
196 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction()); 195 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction());
197 EXPECT_TRUE(state.RedrawPending()); 196 EXPECT_TRUE(state.RedrawPending());
198 197
199 // Fail the draw. 198 // Fail the draw.
200 state.UpdateState(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); 199 state.UpdateState(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
201 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); 200 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction());
202 state.DidDrawIfPossibleCompleted(false); 201 state.DidDrawIfPossibleCompleted(false);
203 EXPECT_TRUE(state.RedrawPending()); 202 EXPECT_TRUE(state.RedrawPending());
204 // But the commit is ongoing. 203 // But the commit is ongoing.
205 EXPECT_TRUE(state.CommitPending()); 204 EXPECT_TRUE(state.CommitPending());
206 205
207 // Finish the commit. 206 // Finish the commit.
208 state.BeginFrameComplete(); 207 state.BeginMainFrameComplete();
209 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction()); 208 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction());
210 state.UpdateState(SchedulerStateMachine::ACTION_COMMIT); 209 state.UpdateState(SchedulerStateMachine::ACTION_COMMIT);
211 EXPECT_TRUE(state.RedrawPending()); 210 EXPECT_TRUE(state.RedrawPending());
212 211
213 // And we should be allowed to draw again. 212 // And we should be allowed to draw again.
214 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction()); 213 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction());
215 } 214 }
216 215
217 TEST(SchedulerStateMachineTest, 216 TEST(SchedulerStateMachineTest,
218 TestCommitAfterFailedAndSuccessfulDrawDoesNotAllowDrawInSameFrame) { 217 TestCommitAfterFailedAndSuccessfulDrawDoesNotAllowDrawInSameFrame) {
219 SchedulerSettings default_scheduler_settings; 218 SchedulerSettings default_scheduler_settings;
220 SchedulerStateMachine state(default_scheduler_settings); 219 SchedulerStateMachine state(default_scheduler_settings);
221 state.SetCanStart(); 220 state.SetCanStart();
222 state.UpdateState(state.NextAction()); 221 state.UpdateState(state.NextAction());
223 state.DidCreateAndInitializeOutputSurface(); 222 state.DidCreateAndInitializeOutputSurface();
224 state.SetVisible(true); 223 state.SetVisible(true);
225 state.SetCanDraw(true); 224 state.SetCanDraw(true);
226 225
227 // Start a commit. 226 // Start a commit.
228 state.SetNeedsCommit(); 227 state.SetNeedsCommit();
229 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_FRAME, state.NextAction()); 228 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_MAIN_FRAME, state.NextAction());
230 state.UpdateState(SchedulerStateMachine::ACTION_BEGIN_FRAME); 229 state.UpdateState(SchedulerStateMachine::ACTION_BEGIN_MAIN_FRAME);
231 EXPECT_TRUE(state.CommitPending()); 230 EXPECT_TRUE(state.CommitPending());
232 231
233 // Then initiate a draw. 232 // Then initiate a draw.
234 state.SetNeedsRedraw(); 233 state.SetNeedsRedraw();
235 EXPECT_TRUE(state.VSyncCallbackNeeded()); 234 EXPECT_TRUE(state.BeginMainFrameCallbackNeeded());
236 state.DidEnterVSync(); 235 state.DidEnterBeginImplFrame();
237 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction()); 236 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction());
238 EXPECT_TRUE(state.RedrawPending()); 237 EXPECT_TRUE(state.RedrawPending());
239 238
240 // Fail the draw. 239 // Fail the draw.
241 state.UpdateState(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); 240 state.UpdateState(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
242 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); 241 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction());
243 state.DidDrawIfPossibleCompleted(false); 242 state.DidDrawIfPossibleCompleted(false);
244 EXPECT_TRUE(state.RedrawPending()); 243 EXPECT_TRUE(state.RedrawPending());
245 // But the commit is ongoing. 244 // But the commit is ongoing.
246 EXPECT_TRUE(state.CommitPending()); 245 EXPECT_TRUE(state.CommitPending());
247 246
248 // Force a draw. 247 // Force a draw.
249 state.SetNeedsForcedRedraw(); 248 state.SetNeedsForcedRedraw();
250 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_FORCED, state.NextAction()); 249 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_FORCED, state.NextAction());
251 250
252 // Do the forced draw. 251 // Do the forced draw.
253 state.UpdateState(SchedulerStateMachine::ACTION_DRAW_FORCED); 252 state.UpdateState(SchedulerStateMachine::ACTION_DRAW_FORCED);
254 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); 253 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction());
255 EXPECT_FALSE(state.RedrawPending()); 254 EXPECT_FALSE(state.RedrawPending());
256 // And the commit is still ongoing. 255 // And the commit is still ongoing.
257 EXPECT_TRUE(state.CommitPending()); 256 EXPECT_TRUE(state.CommitPending());
258 257
259 // Finish the commit. 258 // Finish the commit.
260 state.BeginFrameComplete(); 259 state.BeginMainFrameComplete();
261 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction()); 260 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction());
262 state.UpdateState(SchedulerStateMachine::ACTION_COMMIT); 261 state.UpdateState(SchedulerStateMachine::ACTION_COMMIT);
263 EXPECT_TRUE(state.RedrawPending()); 262 EXPECT_TRUE(state.RedrawPending());
264 263
265 // And we should not be allowed to draw again in the same frame.. 264 // And we should not be allowed to draw again in the same frame..
266 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); 265 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction());
267 } 266 }
268 267
269 TEST(SchedulerStateMachineTest, 268 TEST(SchedulerStateMachineTest,
270 TestFailedDrawsWillEventuallyForceADrawAfterTheNextCommit) { 269 TestFailedDrawsWillEventuallyForceADrawAfterTheNextCommit) {
271 SchedulerSettings default_scheduler_settings; 270 SchedulerSettings default_scheduler_settings;
272 SchedulerStateMachine state(default_scheduler_settings); 271 SchedulerStateMachine state(default_scheduler_settings);
273 state.SetCanStart(); 272 state.SetCanStart();
274 state.UpdateState(state.NextAction()); 273 state.UpdateState(state.NextAction());
275 state.DidCreateAndInitializeOutputSurface(); 274 state.DidCreateAndInitializeOutputSurface();
276 state.SetVisible(true); 275 state.SetVisible(true);
277 state.SetCanDraw(true); 276 state.SetCanDraw(true);
278 state.SetMaximumNumberOfFailedDrawsBeforeDrawIsForced(1); 277 state.SetMaximumNumberOfFailedDrawsBeforeDrawIsForced(1);
279 278
280 // Start a commit. 279 // Start a commit.
281 state.SetNeedsCommit(); 280 state.SetNeedsCommit();
282 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_FRAME, state.NextAction()); 281 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_MAIN_FRAME, state.NextAction());
283 state.UpdateState(SchedulerStateMachine::ACTION_BEGIN_FRAME); 282 state.UpdateState(SchedulerStateMachine::ACTION_BEGIN_MAIN_FRAME);
284 EXPECT_TRUE(state.CommitPending()); 283 EXPECT_TRUE(state.CommitPending());
285 284
286 // Then initiate a draw. 285 // Then initiate a draw.
287 state.SetNeedsRedraw(); 286 state.SetNeedsRedraw();
288 EXPECT_TRUE(state.VSyncCallbackNeeded()); 287 EXPECT_TRUE(state.BeginMainFrameCallbackNeeded());
289 state.DidEnterVSync(); 288 state.DidEnterBeginImplFrame();
290 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction()); 289 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction());
291 EXPECT_TRUE(state.RedrawPending()); 290 EXPECT_TRUE(state.RedrawPending());
292 291
293 // Fail the draw. 292 // Fail the draw.
294 state.UpdateState(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); 293 state.UpdateState(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
295 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); 294 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction());
296 state.DidDrawIfPossibleCompleted(false); 295 state.DidDrawIfPossibleCompleted(false);
297 EXPECT_TRUE(state.RedrawPending()); 296 EXPECT_TRUE(state.RedrawPending());
298 // But the commit is ongoing. 297 // But the commit is ongoing.
299 EXPECT_TRUE(state.CommitPending()); 298 EXPECT_TRUE(state.CommitPending());
300 299
301 // Finish the commit. Note, we should not yet be forcing a draw, but should 300 // Finish the commit. Note, we should not yet be forcing a draw, but should
302 // continue the commit as usual. 301 // continue the commit as usual.
303 state.BeginFrameComplete(); 302 state.BeginMainFrameComplete();
304 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction()); 303 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction());
305 state.UpdateState(SchedulerStateMachine::ACTION_COMMIT); 304 state.UpdateState(SchedulerStateMachine::ACTION_COMMIT);
306 EXPECT_TRUE(state.RedrawPending()); 305 EXPECT_TRUE(state.RedrawPending());
307 306
308 // The redraw should be forced in this case. 307 // The redraw should be forced in this case.
309 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_FORCED, state.NextAction()); 308 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_FORCED, state.NextAction());
310 } 309 }
311 310
312 TEST(SchedulerStateMachineTest, TestFailedDrawIsRetriedNextVSync) { 311 TEST(SchedulerStateMachineTest, TestFailedDrawIsRetriedNextBeginMainFrame) {
313 SchedulerSettings default_scheduler_settings; 312 SchedulerSettings default_scheduler_settings;
314 SchedulerStateMachine state(default_scheduler_settings); 313 SchedulerStateMachine state(default_scheduler_settings);
315 state.SetCanStart(); 314 state.SetCanStart();
316 state.UpdateState(state.NextAction()); 315 state.UpdateState(state.NextAction());
317 state.DidCreateAndInitializeOutputSurface(); 316 state.DidCreateAndInitializeOutputSurface();
318 state.SetVisible(true); 317 state.SetVisible(true);
319 state.SetCanDraw(true); 318 state.SetCanDraw(true);
320 319
321 // Start a draw. 320 // Start a draw.
322 state.SetNeedsRedraw(); 321 state.SetNeedsRedraw();
323 EXPECT_TRUE(state.VSyncCallbackNeeded()); 322 EXPECT_TRUE(state.BeginMainFrameCallbackNeeded());
324 state.DidEnterVSync(); 323 state.DidEnterBeginImplFrame();
325 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction()); 324 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction());
326 EXPECT_TRUE(state.RedrawPending()); 325 EXPECT_TRUE(state.RedrawPending());
327 326
328 // Fail the draw. 327 // Fail the draw.
329 state.UpdateState(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); 328 state.UpdateState(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
330 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); 329 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction());
331 state.DidDrawIfPossibleCompleted(false); 330 state.DidDrawIfPossibleCompleted(false);
332 EXPECT_TRUE(state.RedrawPending()); 331 EXPECT_TRUE(state.RedrawPending());
333 332
334 // We should not be trying to draw again now, but we have a commit pending. 333 // We should not be trying to draw again now, but we have a commit pending.
335 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_FRAME, state.NextAction()); 334 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_MAIN_FRAME, state.NextAction());
336 335
337 state.DidLeaveVSync(); 336 state.DidLeaveBeginImplFrame();
338 EXPECT_TRUE(state.VSyncCallbackNeeded()); 337 EXPECT_TRUE(state.BeginMainFrameCallbackNeeded());
339 state.DidEnterVSync(); 338 state.DidEnterBeginImplFrame();
340 339
341 // We should try draw again in the next vsync. 340 // We should try draw again in the next BeginMainFrame.
342 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction()); 341 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction());
343 } 342 }
344 343
345 TEST(SchedulerStateMachineTest, TestDoestDrawTwiceInSameFrame) { 344 TEST(SchedulerStateMachineTest, TestDoestDrawTwiceInSameFrame) {
346 SchedulerSettings default_scheduler_settings; 345 SchedulerSettings default_scheduler_settings;
347 SchedulerStateMachine state(default_scheduler_settings); 346 SchedulerStateMachine state(default_scheduler_settings);
348 state.SetCanStart(); 347 state.SetCanStart();
349 state.UpdateState(state.NextAction()); 348 state.UpdateState(state.NextAction());
350 state.DidCreateAndInitializeOutputSurface(); 349 state.DidCreateAndInitializeOutputSurface();
351 state.SetVisible(true); 350 state.SetVisible(true);
352 state.SetCanDraw(true); 351 state.SetCanDraw(true);
353 state.SetNeedsRedraw(); 352 state.SetNeedsRedraw();
354 EXPECT_TRUE(state.VSyncCallbackNeeded()); 353 EXPECT_TRUE(state.BeginMainFrameCallbackNeeded());
355 state.DidEnterVSync(); 354 state.DidEnterBeginImplFrame();
356 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction()); 355 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction());
357 state.UpdateState(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); 356 state.UpdateState(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
358 357
359 // While still in the same vsync callback, set needs redraw again. 358 // While still in the same BeginMainFrame callback, set needs redraw again.
360 // This should not redraw. 359 // This should not redraw.
361 state.SetNeedsRedraw(); 360 state.SetNeedsRedraw();
362 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); 361 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction());
363 362
364 // Move to another frame. This should now draw. 363 // Move to another frame. This should now draw.
365 state.DidDrawIfPossibleCompleted(true); 364 state.DidDrawIfPossibleCompleted(true);
366 state.DidLeaveVSync(); 365 state.DidLeaveBeginImplFrame();
367 EXPECT_TRUE(state.VSyncCallbackNeeded()); 366 EXPECT_TRUE(state.BeginMainFrameCallbackNeeded());
368 state.DidEnterVSync(); 367 state.DidEnterBeginImplFrame();
369 368
370 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction()); 369 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction());
371 state.UpdateState(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); 370 state.UpdateState(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
372 state.DidDrawIfPossibleCompleted(true); 371 state.DidDrawIfPossibleCompleted(true);
373 EXPECT_FALSE(state.VSyncCallbackNeeded()); 372 EXPECT_FALSE(state.BeginMainFrameCallbackNeeded());
374 } 373 }
375 374
376 TEST(SchedulerStateMachineTest, TestNextActionDrawsOnVSync) { 375 TEST(SchedulerStateMachineTest, TestNextActionDrawsOnBeginImplFrame) {
377 SchedulerSettings default_scheduler_settings; 376 SchedulerSettings default_scheduler_settings;
378 377
379 // When not on vsync, or on vsync but not visible, don't draw. 378 // When not in BeginImplFrame, or in BeginImplFrame but not visible,
379 // 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.DidEnterBeginImplFrame();
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 BeginImplFrame, or not in BeginImplFrame but needs_forced_dedraw
409 // draw except if you're ready to commit, in which case commit. 409 // set, should always draw except if you're ready to commit, in which case
410 // commit.
410 for (size_t i = 0; i < num_commit_states; ++i) { 411 for (size_t i = 0; i < num_commit_states; ++i) {
411 for (size_t j = 0; j < 2; ++j) { 412 for (size_t j = 0; j < 2; ++j) {
412 StateMachine state(default_scheduler_settings); 413 StateMachine state(default_scheduler_settings);
413 state.SetCanStart(); 414 state.SetCanStart();
414 state.UpdateState(state.NextAction()); 415 state.UpdateState(state.NextAction());
415 state.DidCreateAndInitializeOutputSurface(); 416 state.DidCreateAndInitializeOutputSurface();
416 state.SetCanDraw(true); 417 state.SetCanDraw(true);
417 state.SetCommitState(all_commit_states[i]); 418 state.SetCommitState(all_commit_states[i]);
418 bool forced_draw = j; 419 bool forced_draw = j;
419 if (!forced_draw) { 420 if (!forced_draw) {
420 state.DidEnterVSync(); 421 state.DidEnterBeginImplFrame();
421 state.SetNeedsRedraw(true); 422 state.SetNeedsRedraw(true);
422 state.SetVisible(true); 423 state.SetVisible(true);
423 } else { 424 } else {
424 state.SetNeedsForcedRedraw(true); 425 state.SetNeedsForcedRedraw(true);
425 } 426 }
426 427
427 SchedulerStateMachine::Action expected_action; 428 SchedulerStateMachine::Action expected_action;
428 if (all_commit_states[i] != 429 if (all_commit_states[i] !=
429 SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT) { 430 SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT) {
430 expected_action = 431 expected_action =
431 forced_draw ? SchedulerStateMachine::ACTION_DRAW_FORCED 432 forced_draw ? SchedulerStateMachine::ACTION_DRAW_FORCED
432 : SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE; 433 : SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE;
433 } else { 434 } else {
434 expected_action = SchedulerStateMachine::ACTION_COMMIT; 435 expected_action = SchedulerStateMachine::ACTION_COMMIT;
435 } 436 }
436 437
437 // Case 1: needs_commit=false. 438 // Case 1: needs_commit=false.
438 EXPECT_TRUE(state.VSyncCallbackNeeded()); 439 EXPECT_TRUE(state.BeginMainFrameCallbackNeeded());
439 EXPECT_EQ(expected_action, state.NextAction()); 440 EXPECT_EQ(expected_action, state.NextAction());
440 441
441 // Case 2: needs_commit=true. 442 // Case 2: needs_commit=true.
442 state.SetNeedsCommit(); 443 state.SetNeedsCommit();
443 EXPECT_TRUE(state.VSyncCallbackNeeded()); 444 EXPECT_TRUE(state.BeginMainFrameCallbackNeeded());
444 EXPECT_EQ(expected_action, state.NextAction()); 445 EXPECT_EQ(expected_action, state.NextAction());
445 } 446 }
446 } 447 }
447 } 448 }
448 449
449 TEST(SchedulerStateMachineTest, TestNoCommitStatesRedrawWhenInvisible) { 450 TEST(SchedulerStateMachineTest, TestNoCommitStatesRedrawWhenInvisible) {
450 SchedulerSettings default_scheduler_settings; 451 SchedulerSettings default_scheduler_settings;
451 452
452 size_t num_commit_states = 453 size_t num_commit_states =
453 sizeof(all_commit_states) / sizeof(SchedulerStateMachine::CommitState); 454 sizeof(all_commit_states) / sizeof(SchedulerStateMachine::CommitState);
454 for (size_t i = 0; i < num_commit_states; ++i) { 455 for (size_t i = 0; i < num_commit_states; ++i) {
455 // There shouldn't be any drawing regardless of vsync. 456 // There shouldn't be any drawing regardless of BeginImplFrame.
456 for (size_t j = 0; j < 2; ++j) { 457 for (size_t j = 0; j < 2; ++j) {
457 StateMachine state(default_scheduler_settings); 458 StateMachine state(default_scheduler_settings);
458 state.SetCanStart(); 459 state.SetCanStart();
459 state.UpdateState(state.NextAction()); 460 state.UpdateState(state.NextAction());
460 state.DidCreateAndInitializeOutputSurface(); 461 state.DidCreateAndInitializeOutputSurface();
461 state.SetCommitState(all_commit_states[i]); 462 state.SetCommitState(all_commit_states[i]);
462 state.SetVisible(false); 463 state.SetVisible(false);
463 state.SetNeedsRedraw(true); 464 state.SetNeedsRedraw(true);
464 state.SetNeedsForcedRedraw(false); 465 state.SetNeedsForcedRedraw(false);
465 if (j == 1) 466 if (j == 1)
466 state.DidEnterVSync(); 467 state.DidEnterBeginImplFrame();
467 468
468 // Case 1: needs_commit=false. 469 // Case 1: needs_commit=false.
469 EXPECT_NE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, 470 EXPECT_NE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE,
470 state.NextAction()); 471 state.NextAction());
471 472
472 // Case 2: needs_commit=true. 473 // Case 2: needs_commit=true.
473 state.SetNeedsCommit(); 474 state.SetNeedsCommit();
474 EXPECT_NE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, 475 EXPECT_NE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE,
475 state.NextAction()); 476 state.NextAction());
476 } 477 }
477 } 478 }
478 } 479 }
479 480
480 TEST(SchedulerStateMachineTest, TestCanRedraw_StopsDraw) { 481 TEST(SchedulerStateMachineTest, TestCanRedraw_StopsDraw) {
481 SchedulerSettings default_scheduler_settings; 482 SchedulerSettings default_scheduler_settings;
482 483
483 size_t num_commit_states = 484 size_t num_commit_states =
484 sizeof(all_commit_states) / sizeof(SchedulerStateMachine::CommitState); 485 sizeof(all_commit_states) / sizeof(SchedulerStateMachine::CommitState);
485 for (size_t i = 0; i < num_commit_states; ++i) { 486 for (size_t i = 0; i < num_commit_states; ++i) {
486 // There shouldn't be any drawing regardless of vsync. 487 // There shouldn't be any drawing regardless of BeginImplFrame.
487 for (size_t j = 0; j < 2; ++j) { 488 for (size_t j = 0; j < 2; ++j) {
488 StateMachine state(default_scheduler_settings); 489 StateMachine state(default_scheduler_settings);
489 state.SetCanStart(); 490 state.SetCanStart();
490 state.UpdateState(state.NextAction()); 491 state.UpdateState(state.NextAction());
491 state.DidCreateAndInitializeOutputSurface(); 492 state.DidCreateAndInitializeOutputSurface();
492 state.SetCommitState(all_commit_states[i]); 493 state.SetCommitState(all_commit_states[i]);
493 state.SetVisible(false); 494 state.SetVisible(false);
494 state.SetNeedsRedraw(true); 495 state.SetNeedsRedraw(true);
495 state.SetNeedsForcedRedraw(false); 496 state.SetNeedsForcedRedraw(false);
496 if (j == 1) 497 if (j == 1)
497 state.DidEnterVSync(); 498 state.DidEnterBeginImplFrame();
498 499
499 state.SetCanDraw(false); 500 state.SetCanDraw(false);
500 EXPECT_NE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, 501 EXPECT_NE(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE,
501 state.NextAction()); 502 state.NextAction());
502 } 503 }
503 } 504 }
504 } 505 }
505 506
506 TEST(SchedulerStateMachineTest, 507 TEST(SchedulerStateMachineTest,
507 TestCanRedrawWithWaitingForFirstDrawMakesProgress) { 508 TestCanRedrawWithWaitingForFirstDrawMakesProgress) {
508 SchedulerSettings default_scheduler_settings; 509 SchedulerSettings default_scheduler_settings;
509 StateMachine state(default_scheduler_settings); 510 StateMachine state(default_scheduler_settings);
510 state.SetCanStart(); 511 state.SetCanStart();
511 state.UpdateState(state.NextAction()); 512 state.UpdateState(state.NextAction());
512 state.DidCreateAndInitializeOutputSurface(); 513 state.DidCreateAndInitializeOutputSurface();
513 state.SetCommitState( 514 state.SetCommitState(
514 SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW); 515 SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW);
515 state.SetNeedsCommit(); 516 state.SetNeedsCommit();
516 state.SetNeedsRedraw(true); 517 state.SetNeedsRedraw(true);
517 state.SetVisible(true); 518 state.SetVisible(true);
518 state.SetCanDraw(false); 519 state.SetCanDraw(false);
519 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_FRAME, state.NextAction()); 520 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_MAIN_FRAME, state.NextAction());
520 } 521 }
521 522
522 TEST(SchedulerStateMachineTest, TestsetNeedsCommitIsNotLost) { 523 TEST(SchedulerStateMachineTest, TestsetNeedsCommitIsNotLost) {
523 SchedulerSettings default_scheduler_settings; 524 SchedulerSettings default_scheduler_settings;
524 StateMachine state(default_scheduler_settings); 525 StateMachine state(default_scheduler_settings);
525 state.SetCanStart(); 526 state.SetCanStart();
526 state.UpdateState(state.NextAction()); 527 state.UpdateState(state.NextAction());
527 state.DidCreateAndInitializeOutputSurface(); 528 state.DidCreateAndInitializeOutputSurface();
528 state.SetNeedsCommit(); 529 state.SetNeedsCommit();
529 state.SetVisible(true); 530 state.SetVisible(true);
530 state.SetCanDraw(true); 531 state.SetCanDraw(true);
531 532
532 // Begin the frame. 533 // Begin the frame.
533 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_FRAME, state.NextAction()); 534 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_MAIN_FRAME, state.NextAction());
534 state.UpdateState(state.NextAction()); 535 state.UpdateState(state.NextAction());
535 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS, 536 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS,
536 state.CommitState()); 537 state.CommitState());
537 538
538 // Now, while the frame is in progress, set another commit. 539 // Now, while the frame is in progress, set another commit.
539 state.SetNeedsCommit(); 540 state.SetNeedsCommit();
540 EXPECT_TRUE(state.NeedsCommit()); 541 EXPECT_TRUE(state.NeedsCommit());
541 542
542 // Let the frame finish. 543 // Let the frame finish.
543 state.BeginFrameComplete(); 544 state.BeginMainFrameComplete();
544 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT, 545 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT,
545 state.CommitState()); 546 state.CommitState());
546 547
547 // Expect to commit regardless of vsync state. 548 // Expect to commit regardless of BeginImplFrame state.
548 state.DidLeaveVSync(); 549 state.DidLeaveBeginImplFrame();
549 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction()); 550 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction());
550 state.DidEnterVSync(); 551 state.DidEnterBeginImplFrame();
551 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction()); 552 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction());
552 553
553 // Commit and make sure we draw on next vsync 554 // Commit and make sure we draw on next BeginImplFrame
554 state.UpdateState(SchedulerStateMachine::ACTION_COMMIT); 555 state.UpdateState(SchedulerStateMachine::ACTION_COMMIT);
555 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction()); 556 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction());
556 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW, 557 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW,
557 state.CommitState()); 558 state.CommitState());
558 state.UpdateState(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); 559 state.UpdateState(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
559 state.DidDrawIfPossibleCompleted(true); 560 state.DidDrawIfPossibleCompleted(true);
560 561
561 // Verify that another commit will begin. 562 // Verify that another commit will begin.
562 state.DidLeaveVSync(); 563 state.DidLeaveBeginImplFrame();
563 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_FRAME, state.NextAction()); 564 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_MAIN_FRAME, state.NextAction());
564 } 565 }
565 566
566 TEST(SchedulerStateMachineTest, TestFullCycle) { 567 TEST(SchedulerStateMachineTest, TestFullCycle) {
567 SchedulerSettings default_scheduler_settings; 568 SchedulerSettings default_scheduler_settings;
568 StateMachine state(default_scheduler_settings); 569 StateMachine state(default_scheduler_settings);
569 state.SetCanStart(); 570 state.SetCanStart();
570 state.UpdateState(state.NextAction()); 571 state.UpdateState(state.NextAction());
571 state.DidCreateAndInitializeOutputSurface(); 572 state.DidCreateAndInitializeOutputSurface();
572 state.SetVisible(true); 573 state.SetVisible(true);
573 state.SetCanDraw(true); 574 state.SetCanDraw(true);
574 575
575 // Start clean and set commit. 576 // Start clean and set commit.
576 state.SetNeedsCommit(); 577 state.SetNeedsCommit();
577 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_FRAME, state.NextAction()); 578 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_MAIN_FRAME, state.NextAction());
578 579
579 // Begin the frame. 580 // Begin the frame.
580 state.UpdateState(SchedulerStateMachine::ACTION_BEGIN_FRAME); 581 state.UpdateState(SchedulerStateMachine::ACTION_BEGIN_MAIN_FRAME);
581 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS, 582 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS,
582 state.CommitState()); 583 state.CommitState());
583 EXPECT_FALSE(state.NeedsCommit()); 584 EXPECT_FALSE(state.NeedsCommit());
584 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); 585 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction());
585 586
586 // Tell the scheduler the frame finished. 587 // Tell the scheduler the frame finished.
587 state.BeginFrameComplete(); 588 state.BeginMainFrameComplete();
588 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT, 589 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT,
589 state.CommitState()); 590 state.CommitState());
590 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction()); 591 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction());
591 592
592 // Commit. 593 // Commit.
593 state.UpdateState(SchedulerStateMachine::ACTION_COMMIT); 594 state.UpdateState(SchedulerStateMachine::ACTION_COMMIT);
594 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW, 595 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW,
595 state.CommitState()); 596 state.CommitState());
596 EXPECT_TRUE(state.NeedsRedraw()); 597 EXPECT_TRUE(state.NeedsRedraw());
597 598
598 // Expect to do nothing until vsync. 599 // Expect to do nothing until BeginImplFrame.
599 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); 600 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction());
600 601
601 // At vsync, draw. 602 // At BeginImplFrame, draw.
602 state.DidEnterVSync(); 603 state.DidEnterBeginImplFrame();
603 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction()); 604 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction());
604 state.UpdateState(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); 605 state.UpdateState(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
605 state.DidDrawIfPossibleCompleted(true); 606 state.DidDrawIfPossibleCompleted(true);
606 state.DidLeaveVSync(); 607 state.DidLeaveBeginImplFrame();
607 608
608 // Should be synchronized, no draw needed, no action needed. 609 // Should be synchronized, no draw needed, no action needed.
609 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); 610 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState());
610 EXPECT_FALSE(state.NeedsRedraw()); 611 EXPECT_FALSE(state.NeedsRedraw());
611 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); 612 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction());
612 } 613 }
613 614
614 TEST(SchedulerStateMachineTest, TestFullCycleWithCommitRequestInbetween) { 615 TEST(SchedulerStateMachineTest, TestFullCycleWithCommitRequestInbetween) {
615 SchedulerSettings default_scheduler_settings; 616 SchedulerSettings default_scheduler_settings;
616 StateMachine state(default_scheduler_settings); 617 StateMachine state(default_scheduler_settings);
617 state.SetCanStart(); 618 state.SetCanStart();
618 state.UpdateState(state.NextAction()); 619 state.UpdateState(state.NextAction());
619 state.DidCreateAndInitializeOutputSurface(); 620 state.DidCreateAndInitializeOutputSurface();
620 state.SetVisible(true); 621 state.SetVisible(true);
621 state.SetCanDraw(true); 622 state.SetCanDraw(true);
622 623
623 // Start clean and set commit. 624 // Start clean and set commit.
624 state.SetNeedsCommit(); 625 state.SetNeedsCommit();
625 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_FRAME, state.NextAction()); 626 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_MAIN_FRAME, state.NextAction());
626 627
627 // Begin the frame. 628 // Begin the frame.
628 state.UpdateState(SchedulerStateMachine::ACTION_BEGIN_FRAME); 629 state.UpdateState(SchedulerStateMachine::ACTION_BEGIN_MAIN_FRAME);
629 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS, 630 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS,
630 state.CommitState()); 631 state.CommitState());
631 EXPECT_FALSE(state.NeedsCommit()); 632 EXPECT_FALSE(state.NeedsCommit());
632 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); 633 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction());
633 634
634 // Request another commit while the commit is in flight. 635 // Request another commit while the commit is in flight.
635 state.SetNeedsCommit(); 636 state.SetNeedsCommit();
636 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); 637 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction());
637 638
638 // Tell the scheduler the frame finished. 639 // Tell the scheduler the frame finished.
639 state.BeginFrameComplete(); 640 state.BeginMainFrameComplete();
640 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT, 641 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT,
641 state.CommitState()); 642 state.CommitState());
642 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction()); 643 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction());
643 644
644 // Commit. 645 // Commit.
645 state.UpdateState(SchedulerStateMachine::ACTION_COMMIT); 646 state.UpdateState(SchedulerStateMachine::ACTION_COMMIT);
646 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW, 647 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW,
647 state.CommitState()); 648 state.CommitState());
648 EXPECT_TRUE(state.NeedsRedraw()); 649 EXPECT_TRUE(state.NeedsRedraw());
649 650
650 // Expect to do nothing until vsync. 651 // Expect to do nothing until BeginImplFrame.
651 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); 652 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction());
652 653
653 // At vsync, draw. 654 // At BeginImplFrame, draw.
654 state.DidEnterVSync(); 655 state.DidEnterBeginImplFrame();
655 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction()); 656 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction());
656 state.UpdateState(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE); 657 state.UpdateState(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE);
657 state.DidDrawIfPossibleCompleted(true); 658 state.DidDrawIfPossibleCompleted(true);
658 state.DidLeaveVSync(); 659 state.DidLeaveBeginImplFrame();
659 660
660 // Should be synchronized, no draw needed, no action needed. 661 // Should be synchronized, no draw needed, no action needed.
661 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); 662 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState());
662 EXPECT_FALSE(state.NeedsRedraw()); 663 EXPECT_FALSE(state.NeedsRedraw());
663 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_FRAME, state.NextAction()); 664 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_MAIN_FRAME, state.NextAction());
664 } 665 }
665 666
666 TEST(SchedulerStateMachineTest, TestRequestCommitInvisible) { 667 TEST(SchedulerStateMachineTest, TestRequestCommitInvisible) {
667 SchedulerSettings default_scheduler_settings; 668 SchedulerSettings default_scheduler_settings;
668 StateMachine state(default_scheduler_settings); 669 StateMachine state(default_scheduler_settings);
669 state.SetCanStart(); 670 state.SetCanStart();
670 state.UpdateState(state.NextAction()); 671 state.UpdateState(state.NextAction());
671 state.DidCreateAndInitializeOutputSurface(); 672 state.DidCreateAndInitializeOutputSurface();
672 state.SetNeedsCommit(); 673 state.SetNeedsCommit();
673 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); 674 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction());
674 } 675 }
675 676
676 TEST(SchedulerStateMachineTest, TestGoesInvisibleBeforeBeginFrameCompletes) { 677 TEST(SchedulerStateMachineTest,
678 TestGoesInvisibleBeforeBeginMainFrameCompletes) {
677 SchedulerSettings default_scheduler_settings; 679 SchedulerSettings default_scheduler_settings;
678 StateMachine state(default_scheduler_settings); 680 StateMachine state(default_scheduler_settings);
679 state.SetCanStart(); 681 state.SetCanStart();
680 state.UpdateState(state.NextAction()); 682 state.UpdateState(state.NextAction());
681 state.DidCreateAndInitializeOutputSurface(); 683 state.DidCreateAndInitializeOutputSurface();
682 state.SetVisible(true); 684 state.SetVisible(true);
683 state.SetCanDraw(true); 685 state.SetCanDraw(true);
684 686
685 // Start clean and set commit. 687 // Start clean and set commit.
686 state.SetNeedsCommit(); 688 state.SetNeedsCommit();
687 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_FRAME, state.NextAction()); 689 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_MAIN_FRAME, state.NextAction());
688 690
689 // Begin the frame while visible. 691 // Begin the frame while visible.
690 state.UpdateState(SchedulerStateMachine::ACTION_BEGIN_FRAME); 692 state.UpdateState(SchedulerStateMachine::ACTION_BEGIN_MAIN_FRAME);
691 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS, 693 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS,
692 state.CommitState()); 694 state.CommitState());
693 EXPECT_FALSE(state.NeedsCommit()); 695 EXPECT_FALSE(state.NeedsCommit());
694 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); 696 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction());
695 697
696 // Become invisible and abort the BeginFrame. 698 // Become invisible and abort the BeginMainFrame.
697 state.SetVisible(false); 699 state.SetVisible(false);
698 state.BeginFrameAborted(); 700 state.BeginMainFrameAborted();
699 701
700 // We should now be back in the idle state as if we didn't start a frame at 702 // We should now be back in the idle state as if we didn't start a frame at
701 // all. 703 // all.
702 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); 704 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState());
703 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); 705 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction());
704 706
705 // Become visible again. 707 // Become visible again.
706 state.SetVisible(true); 708 state.SetVisible(true);
707 709
708 // We should be beginning a frame now. 710 // We should be beginning a frame now.
709 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); 711 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState());
710 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_FRAME, state.NextAction()); 712 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_MAIN_FRAME, state.NextAction());
711 713
712 // Begin the frame. 714 // Begin the frame.
713 state.UpdateState(state.NextAction()); 715 state.UpdateState(state.NextAction());
714 716
715 // We should be starting the commit now. 717 // We should be starting the commit now.
716 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS, 718 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS,
717 state.CommitState()); 719 state.CommitState());
718 } 720 }
719 721
720 TEST(SchedulerStateMachineTest, TestFirstContextCreation) { 722 TEST(SchedulerStateMachineTest, TestFirstContextCreation) {
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
753 state.NextAction()); 755 state.NextAction());
754 state.UpdateState(state.NextAction()); 756 state.UpdateState(state.NextAction());
755 757
756 // Once context recreation begins, nothing should happen. 758 // Once context recreation begins, nothing should happen.
757 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); 759 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction());
758 760
759 // Recreate the context. 761 // Recreate the context.
760 state.DidCreateAndInitializeOutputSurface(); 762 state.DidCreateAndInitializeOutputSurface();
761 763
762 // When the context is recreated, we should begin a commit. 764 // When the context is recreated, we should begin a commit.
763 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_FRAME, state.NextAction()); 765 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_MAIN_FRAME, state.NextAction());
764 state.UpdateState(state.NextAction()); 766 state.UpdateState(state.NextAction());
765 } 767 }
766 768
767 TEST(SchedulerStateMachineTest, 769 TEST(SchedulerStateMachineTest,
768 TestContextLostWhenIdleAndCommitRequestedWhileRecreating) { 770 TestContextLostWhenIdleAndCommitRequestedWhileRecreating) {
769 SchedulerSettings default_scheduler_settings; 771 SchedulerSettings default_scheduler_settings;
770 StateMachine state(default_scheduler_settings); 772 StateMachine state(default_scheduler_settings);
771 state.SetCanStart(); 773 state.SetCanStart();
772 state.UpdateState(state.NextAction()); 774 state.UpdateState(state.NextAction());
773 state.DidCreateAndInitializeOutputSurface(); 775 state.DidCreateAndInitializeOutputSurface();
(...skipping 12 matching lines...) Expand all
786 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); 788 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction());
787 789
788 // While context is recreating, commits shouldn't begin. 790 // While context is recreating, commits shouldn't begin.
789 state.SetNeedsCommit(); 791 state.SetNeedsCommit();
790 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); 792 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction());
791 793
792 // Recreate the context 794 // Recreate the context
793 state.DidCreateAndInitializeOutputSurface(); 795 state.DidCreateAndInitializeOutputSurface();
794 796
795 // When the context is recreated, we should begin a commit 797 // When the context is recreated, we should begin a commit
796 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_FRAME, state.NextAction()); 798 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_MAIN_FRAME, state.NextAction());
797 state.UpdateState(state.NextAction()); 799 state.UpdateState(state.NextAction());
798 800
799 // Once the context is recreated, whether we draw should be based on 801 // Once the context is recreated, whether we draw should be based on
800 // SetCanDraw. 802 // SetCanDraw.
801 state.SetNeedsRedraw(true); 803 state.SetNeedsRedraw(true);
802 state.DidEnterVSync(); 804 state.DidEnterBeginImplFrame();
803 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction()); 805 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction());
804 state.SetCanDraw(false); 806 state.SetCanDraw(false);
805 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); 807 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction());
806 state.SetCanDraw(true); 808 state.SetCanDraw(true);
807 state.DidLeaveVSync(); 809 state.DidLeaveBeginImplFrame();
808 } 810 }
809 811
810 TEST(SchedulerStateMachineTest, TestContextLostWhileCommitInProgress) { 812 TEST(SchedulerStateMachineTest, TestContextLostWhileCommitInProgress) {
811 SchedulerSettings default_scheduler_settings; 813 SchedulerSettings default_scheduler_settings;
812 StateMachine state(default_scheduler_settings); 814 StateMachine state(default_scheduler_settings);
813 state.SetCanStart(); 815 state.SetCanStart();
814 state.UpdateState(state.NextAction()); 816 state.UpdateState(state.NextAction());
815 state.DidCreateAndInitializeOutputSurface(); 817 state.DidCreateAndInitializeOutputSurface();
816 state.SetVisible(true); 818 state.SetVisible(true);
817 state.SetCanDraw(true); 819 state.SetCanDraw(true);
818 820
819 // Get a commit in flight. 821 // Get a commit in flight.
820 state.SetNeedsCommit(); 822 state.SetNeedsCommit();
821 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_FRAME, state.NextAction()); 823 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_MAIN_FRAME, state.NextAction());
822 state.UpdateState(state.NextAction()); 824 state.UpdateState(state.NextAction());
823 825
824 // Set damage and expect a draw. 826 // Set damage and expect a draw.
825 state.SetNeedsRedraw(true); 827 state.SetNeedsRedraw(true);
826 state.DidEnterVSync(); 828 state.DidEnterBeginImplFrame();
827 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction()); 829 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction());
828 state.UpdateState(state.NextAction()); 830 state.UpdateState(state.NextAction());
829 state.DidLeaveVSync(); 831 state.DidLeaveBeginImplFrame();
830 832
831 // Cause a lost context while the begin frame is in flight. 833 // Cause a lost context while the BeginMainFrame is in flight.
832 state.DidLoseOutputSurface(); 834 state.DidLoseOutputSurface();
833 835
834 // Ask for another draw. Expect nothing happens. 836 // Ask for another draw. Expect nothing happens.
835 state.SetNeedsRedraw(true); 837 state.SetNeedsRedraw(true);
836 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); 838 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction());
837 839
838 // Finish the frame, and commit. 840 // Finish the frame, and commit.
839 state.BeginFrameComplete(); 841 state.BeginMainFrameComplete();
840 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction()); 842 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction());
841 state.UpdateState(state.NextAction()); 843 state.UpdateState(state.NextAction());
842 844
843 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW, 845 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW,
844 state.CommitState()); 846 state.CommitState());
845 847
846 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction()); 848 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction());
847 state.UpdateState(state.NextAction()); 849 state.UpdateState(state.NextAction());
848 850
849 // Expect to be told to begin context recreation, independent of vsync state. 851 // Expect to be told to begin context recreation, independent of
850 state.DidEnterVSync(); 852 // BeginImplFrame state.
853 state.DidEnterBeginImplFrame();
851 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION, 854 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION,
852 state.NextAction()); 855 state.NextAction());
853 state.DidLeaveVSync(); 856 state.DidLeaveBeginImplFrame();
854 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION, 857 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION,
855 state.NextAction()); 858 state.NextAction());
856 } 859 }
857 860
858 TEST(SchedulerStateMachineTest, 861 TEST(SchedulerStateMachineTest,
859 TestContextLostWhileCommitInProgressAndAnotherCommitRequested) { 862 TestContextLostWhileCommitInProgressAndAnotherCommitRequested) {
860 SchedulerSettings default_scheduler_settings; 863 SchedulerSettings default_scheduler_settings;
861 StateMachine state(default_scheduler_settings); 864 StateMachine state(default_scheduler_settings);
862 state.SetCanStart(); 865 state.SetCanStart();
863 state.UpdateState(state.NextAction()); 866 state.UpdateState(state.NextAction());
864 state.DidCreateAndInitializeOutputSurface(); 867 state.DidCreateAndInitializeOutputSurface();
865 state.SetVisible(true); 868 state.SetVisible(true);
866 state.SetCanDraw(true); 869 state.SetCanDraw(true);
867 870
868 // Get a commit in flight. 871 // Get a commit in flight.
869 state.SetNeedsCommit(); 872 state.SetNeedsCommit();
870 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_FRAME, state.NextAction()); 873 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_MAIN_FRAME, state.NextAction());
871 state.UpdateState(state.NextAction()); 874 state.UpdateState(state.NextAction());
872 875
873 // Set damage and expect a draw. 876 // Set damage and expect a draw.
874 state.SetNeedsRedraw(true); 877 state.SetNeedsRedraw(true);
875 state.DidEnterVSync(); 878 state.DidEnterBeginImplFrame();
876 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction()); 879 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction());
877 state.UpdateState(state.NextAction()); 880 state.UpdateState(state.NextAction());
878 state.DidLeaveVSync(); 881 state.DidLeaveBeginImplFrame();
879 882
880 // Cause a lost context while the begin frame is in flight. 883 // Cause a lost context while the BeginMainFrame is in flight.
881 state.DidLoseOutputSurface(); 884 state.DidLoseOutputSurface();
882 885
883 // Ask for another draw and also set needs commit. Expect nothing happens. 886 // Ask for another draw and also set needs commit. Expect nothing happens.
884 state.SetNeedsRedraw(true); 887 state.SetNeedsRedraw(true);
885 state.SetNeedsCommit(); 888 state.SetNeedsCommit();
886 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); 889 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction());
887 890
888 // Finish the frame, and commit. 891 // Finish the frame, and commit.
889 state.BeginFrameComplete(); 892 state.BeginMainFrameComplete();
890 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction()); 893 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction());
891 state.UpdateState(state.NextAction()); 894 state.UpdateState(state.NextAction());
892 895
893 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW, 896 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW,
894 state.CommitState()); 897 state.CommitState());
895 898
896 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction()); 899 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.NextAction());
897 state.UpdateState(state.NextAction()); 900 state.UpdateState(state.NextAction());
898 901
899 // Expect to be told to begin context recreation, independent of vsync state 902 // Expect to be told to begin context recreation, independent of
900 state.DidEnterVSync(); 903 // BeginImplFrame state
904 state.DidEnterBeginImplFrame();
901 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION, 905 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION,
902 state.NextAction()); 906 state.NextAction());
903 state.DidLeaveVSync(); 907 state.DidLeaveBeginImplFrame();
904 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION, 908 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION,
905 state.NextAction()); 909 state.NextAction());
906 } 910 }
907 911
908 TEST(SchedulerStateMachineTest, TestFinishAllRenderingWhileContextLost) { 912 TEST(SchedulerStateMachineTest, TestFinishAllRenderingWhileContextLost) {
909 SchedulerSettings default_scheduler_settings; 913 SchedulerSettings default_scheduler_settings;
910 StateMachine state(default_scheduler_settings); 914 StateMachine state(default_scheduler_settings);
911 state.SetCanStart(); 915 state.SetCanStart();
912 state.UpdateState(state.NextAction()); 916 state.UpdateState(state.NextAction());
913 state.DidCreateAndInitializeOutputSurface(); 917 state.DidCreateAndInitializeOutputSurface();
914 state.SetVisible(true); 918 state.SetVisible(true);
915 state.SetCanDraw(true); 919 state.SetCanDraw(true);
916 920
917 // Cause a lost context lost. 921 // Cause a lost context lost.
918 state.DidLoseOutputSurface(); 922 state.DidLoseOutputSurface();
919 923
920 // Ask a forced redraw and verify it ocurrs. 924 // Ask a forced redraw and verify it ocurrs.
921 state.SetNeedsForcedRedraw(true); 925 state.SetNeedsForcedRedraw(true);
922 state.DidEnterVSync(); 926 state.DidEnterBeginImplFrame();
923 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_FORCED, state.NextAction()); 927 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_FORCED, state.NextAction());
924 state.DidLeaveVSync(); 928 state.DidLeaveBeginImplFrame();
925 929
926 // Clear the forced redraw bit. 930 // Clear the forced redraw bit.
927 state.SetNeedsForcedRedraw(false); 931 state.SetNeedsForcedRedraw(false);
928 932
929 // Expect to be told to begin context recreation, independent of vsync state 933 // Expect to be told to begin context recreation, independent of
934 // BeginImplFrame state
930 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION, 935 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION,
931 state.NextAction()); 936 state.NextAction());
932 state.UpdateState(state.NextAction()); 937 state.UpdateState(state.NextAction());
933 938
934 // Ask a forced redraw and verify it ocurrs. 939 // Ask a forced redraw and verify it ocurrs.
935 state.SetNeedsForcedRedraw(true); 940 state.SetNeedsForcedRedraw(true);
936 state.DidEnterVSync(); 941 state.DidEnterBeginImplFrame();
937 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_FORCED, state.NextAction()); 942 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_FORCED, state.NextAction());
938 state.DidLeaveVSync(); 943 state.DidLeaveBeginImplFrame();
939 } 944 }
940 945
941 TEST(SchedulerStateMachineTest, DontDrawBeforeCommitAfterLostOutputSurface) { 946 TEST(SchedulerStateMachineTest, DontDrawBeforeCommitAfterLostOutputSurface) {
942 SchedulerSettings default_scheduler_settings; 947 SchedulerSettings default_scheduler_settings;
943 StateMachine state(default_scheduler_settings); 948 StateMachine state(default_scheduler_settings);
944 state.SetCanStart(); 949 state.SetCanStart();
945 state.UpdateState(state.NextAction()); 950 state.UpdateState(state.NextAction());
946 state.DidCreateAndInitializeOutputSurface(); 951 state.DidCreateAndInitializeOutputSurface();
947 state.SetVisible(true); 952 state.SetVisible(true);
948 state.SetCanDraw(true); 953 state.SetCanDraw(true);
949 954
950 state.SetNeedsRedraw(true); 955 state.SetNeedsRedraw(true);
951 956
952 // Cause a lost output surface, and restore it. 957 // Cause a lost output surface, and restore it.
953 state.DidLoseOutputSurface(); 958 state.DidLoseOutputSurface();
954 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION, 959 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION,
955 state.NextAction()); 960 state.NextAction());
956 state.UpdateState(state.NextAction()); 961 state.UpdateState(state.NextAction());
957 state.DidCreateAndInitializeOutputSurface(); 962 state.DidCreateAndInitializeOutputSurface();
958 963
959 EXPECT_FALSE(state.RedrawPending()); 964 EXPECT_FALSE(state.RedrawPending());
960 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_FRAME, state.NextAction()); 965 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_MAIN_FRAME, state.NextAction());
961 } 966 }
962 967
963 TEST(SchedulerStateMachineTest, TestBeginFrameWhenInvisibleAndForceCommit) { 968 TEST(SchedulerStateMachineTest, TestBeginMainFrameWhenInvisibleAndForceCommit) {
964 SchedulerSettings default_scheduler_settings; 969 SchedulerSettings default_scheduler_settings;
965 StateMachine state(default_scheduler_settings); 970 StateMachine state(default_scheduler_settings);
966 state.SetCanStart(); 971 state.SetCanStart();
967 state.UpdateState(state.NextAction()); 972 state.UpdateState(state.NextAction());
968 state.DidCreateAndInitializeOutputSurface(); 973 state.DidCreateAndInitializeOutputSurface();
969 state.SetVisible(false); 974 state.SetVisible(false);
970 state.SetNeedsCommit(); 975 state.SetNeedsCommit();
971 state.SetNeedsForcedCommit(); 976 state.SetNeedsForcedCommit();
972 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_FRAME, state.NextAction()); 977 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_MAIN_FRAME, state.NextAction());
973 } 978 }
974 979
975 TEST(SchedulerStateMachineTest, 980 TEST(SchedulerStateMachineTest,
976 TestBeginFrameWhenCanBeginFrameFalseAndForceCommit) { 981 TestBeginMainFrameWhenCanStartFalseAndForceCommit) {
977 SchedulerSettings default_scheduler_settings; 982 SchedulerSettings default_scheduler_settings;
978 StateMachine state(default_scheduler_settings); 983 StateMachine state(default_scheduler_settings);
979 state.SetCanStart();
980 state.UpdateState(state.NextAction());
981 state.DidCreateAndInitializeOutputSurface();
982 state.SetVisible(true); 984 state.SetVisible(true);
983 state.SetCanDraw(true); 985 state.SetCanDraw(true);
984 state.SetNeedsCommit(); 986 state.SetNeedsCommit();
985 state.SetNeedsForcedCommit(); 987 state.SetNeedsForcedCommit();
986 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_FRAME, state.NextAction()); 988 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_MAIN_FRAME, state.NextAction());
987 } 989 }
988 990
989 TEST(SchedulerStateMachineTest, TestBeginFrameWhenCommitInProgress) { 991 TEST(SchedulerStateMachineTest, TestBeginMainFrameWhenCommitInProgress) {
990 SchedulerSettings default_scheduler_settings; 992 SchedulerSettings default_scheduler_settings;
991 StateMachine state(default_scheduler_settings); 993 StateMachine state(default_scheduler_settings);
992 state.SetCanStart(); 994 state.SetCanStart();
993 state.UpdateState(state.NextAction()); 995 state.UpdateState(state.NextAction());
994 state.DidCreateAndInitializeOutputSurface(); 996 state.DidCreateAndInitializeOutputSurface();
995 state.SetVisible(false); 997 state.SetVisible(false);
996 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS); 998 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS);
997 state.SetNeedsCommit(); 999 state.SetNeedsCommit();
998 1000
999 state.BeginFrameComplete(); 1001 state.BeginMainFrameComplete();
1000 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction()); 1002 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction());
1001 state.UpdateState(state.NextAction()); 1003 state.UpdateState(state.NextAction());
1002 1004
1003 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW, 1005 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW,
1004 state.CommitState()); 1006 state.CommitState());
1005 1007
1006 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); 1008 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction());
1007 } 1009 }
1008 1010
1009 TEST(SchedulerStateMachineTest, TestBeginFrameWhenForcedCommitInProgress) { 1011 TEST(SchedulerStateMachineTest, TestBeginMainFrameWhenForcedCommitInProgress) {
1010 SchedulerSettings default_scheduler_settings; 1012 SchedulerSettings default_scheduler_settings;
1011 StateMachine state(default_scheduler_settings); 1013 StateMachine state(default_scheduler_settings);
1012 state.SetCanStart(); 1014 state.SetCanStart();
1013 state.UpdateState(state.NextAction()); 1015 state.UpdateState(state.NextAction());
1014 state.DidCreateAndInitializeOutputSurface(); 1016 state.DidCreateAndInitializeOutputSurface();
1015 state.SetVisible(false); 1017 state.SetVisible(false);
1016 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS); 1018 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS);
1017 state.SetNeedsCommit(); 1019 state.SetNeedsCommit();
1018 state.SetNeedsForcedCommit(); 1020 state.SetNeedsForcedCommit();
1019 1021
1020 state.BeginFrameComplete(); 1022 state.BeginMainFrameComplete();
1021 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction()); 1023 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction());
1022 state.UpdateState(state.NextAction()); 1024 state.UpdateState(state.NextAction());
1023 1025
1024 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_FORCED_DRAW, 1026 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_FORCED_DRAW,
1025 state.CommitState()); 1027 state.CommitState());
1026 1028
1027 // If we are waiting for forced draw then we know a begin frame is already in 1029 // If we are waiting for forced draw then we know a BeginMainFrame is already
1028 // flight. 1030 // in flight.
1029 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); 1031 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction());
1030 } 1032 }
1031 1033
1032 TEST(SchedulerStateMachineTest, TestBeginFrameWhenContextLost) { 1034 TEST(SchedulerStateMachineTest, TestBeginMainFrameWhenContextLost) {
1033 SchedulerSettings default_scheduler_settings; 1035 SchedulerSettings default_scheduler_settings;
1034 StateMachine state(default_scheduler_settings); 1036 StateMachine state(default_scheduler_settings);
1035 state.SetCanStart(); 1037 state.SetCanStart();
1036 state.UpdateState(state.NextAction()); 1038 state.UpdateState(state.NextAction());
1037 state.DidCreateAndInitializeOutputSurface(); 1039 state.DidCreateAndInitializeOutputSurface();
1038 state.SetVisible(true); 1040 state.SetVisible(true);
1039 state.SetCanDraw(true); 1041 state.SetCanDraw(true);
1040 state.SetNeedsCommit(); 1042 state.SetNeedsCommit();
1041 state.SetNeedsForcedCommit(); 1043 state.SetNeedsForcedCommit();
1042 state.DidLoseOutputSurface(); 1044 state.DidLoseOutputSurface();
1043 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_FRAME, state.NextAction()); 1045 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_MAIN_FRAME, state.NextAction());
1044 } 1046 }
1045 1047
1046 TEST(SchedulerStateMachineTest, TestImmediateBeginFrame) { 1048 TEST(SchedulerStateMachineTest, TestImmediateBeginMainFrame) {
1047 SchedulerSettings default_scheduler_settings; 1049 SchedulerSettings default_scheduler_settings;
1048 StateMachine state(default_scheduler_settings); 1050 StateMachine state(default_scheduler_settings);
1049 state.SetCanStart(); 1051 state.SetCanStart();
1050 state.UpdateState(state.NextAction()); 1052 state.UpdateState(state.NextAction());
1051 state.DidCreateAndInitializeOutputSurface(); 1053 state.DidCreateAndInitializeOutputSurface();
1052 state.SetVisible(true); 1054 state.SetVisible(true);
1053 state.SetCanDraw(true); 1055 state.SetCanDraw(true);
1054 1056
1055 // Schedule a forced frame, commit it, draw it. 1057 // Schedule a forced frame, commit it, draw it.
1056 state.SetNeedsCommit(); 1058 state.SetNeedsCommit();
1057 state.SetNeedsForcedCommit(); 1059 state.SetNeedsForcedCommit();
1058 state.UpdateState(state.NextAction()); 1060 state.UpdateState(state.NextAction());
1059 state.BeginFrameComplete(); 1061 state.BeginMainFrameComplete();
1060 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction()); 1062 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction());
1061 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT, 1063 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT,
1062 state.CommitState()); 1064 state.CommitState());
1063 state.UpdateState(state.NextAction()); 1065 state.UpdateState(state.NextAction());
1064 1066
1065 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_FORCED_DRAW, 1067 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_FORCED_DRAW,
1066 state.CommitState()); 1068 state.CommitState());
1067 1069
1068 state.DidEnterVSync(); 1070 state.DidEnterBeginImplFrame();
1069 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); 1071 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction());
1070 state.SetNeedsForcedRedraw(true); 1072 state.SetNeedsForcedRedraw(true);
1071 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_FORCED, state.NextAction()); 1073 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_FORCED, state.NextAction());
1072 state.UpdateState(state.NextAction()); 1074 state.UpdateState(state.NextAction());
1073 state.DidDrawIfPossibleCompleted(true); 1075 state.DidDrawIfPossibleCompleted(true);
1074 state.DidLeaveVSync(); 1076 state.DidLeaveBeginImplFrame();
1075 1077
1076 // Should be waiting for the normal begin frame. 1078 // Should be waiting for the normal BeginMainFrame.
1077 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS, 1079 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS,
1078 state.CommitState()); 1080 state.CommitState());
1079 } 1081 }
1080 1082
1081 TEST(SchedulerStateMachineTest, TestImmediateBeginFrameDuringCommit) { 1083 TEST(SchedulerStateMachineTest, TestImmediateBeginMainFrameDuringCommit) {
1082 SchedulerSettings default_scheduler_settings; 1084 SchedulerSettings default_scheduler_settings;
1083 StateMachine state(default_scheduler_settings); 1085 StateMachine state(default_scheduler_settings);
1084 state.SetCanStart(); 1086 state.SetCanStart();
1085 state.UpdateState(state.NextAction()); 1087 state.UpdateState(state.NextAction());
1086 state.DidCreateAndInitializeOutputSurface(); 1088 state.DidCreateAndInitializeOutputSurface();
1087 state.SetVisible(true); 1089 state.SetVisible(true);
1088 state.SetCanDraw(true); 1090 state.SetCanDraw(true);
1089 1091
1090 // Start a normal commit. 1092 // Start a normal commit.
1091 state.SetNeedsCommit(); 1093 state.SetNeedsCommit();
1092 state.UpdateState(state.NextAction()); 1094 state.UpdateState(state.NextAction());
1093 1095
1094 // Schedule a forced frame, commit it, draw it. 1096 // Schedule a forced frame, commit it, draw it.
1095 state.SetNeedsCommit(); 1097 state.SetNeedsCommit();
1096 state.SetNeedsForcedCommit(); 1098 state.SetNeedsForcedCommit();
1097 state.UpdateState(state.NextAction()); 1099 state.UpdateState(state.NextAction());
1098 state.BeginFrameComplete(); 1100 state.BeginMainFrameComplete();
1099 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction()); 1101 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction());
1100 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT, 1102 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT,
1101 state.CommitState()); 1103 state.CommitState());
1102 state.UpdateState(state.NextAction()); 1104 state.UpdateState(state.NextAction());
1103 1105
1104 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_FORCED_DRAW, 1106 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_FORCED_DRAW,
1105 state.CommitState()); 1107 state.CommitState());
1106 1108
1107 state.DidEnterVSync(); 1109 state.DidEnterBeginImplFrame();
1108 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); 1110 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction());
1109 state.SetNeedsForcedRedraw(true); 1111 state.SetNeedsForcedRedraw(true);
1110 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_FORCED, state.NextAction()); 1112 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_FORCED, state.NextAction());
1111 state.UpdateState(state.NextAction()); 1113 state.UpdateState(state.NextAction());
1112 state.DidDrawIfPossibleCompleted(true); 1114 state.DidDrawIfPossibleCompleted(true);
1113 state.DidLeaveVSync(); 1115 state.DidLeaveBeginImplFrame();
1114 1116
1115 // Should be waiting for the normal begin frame. 1117 // Should be waiting for the normal BeginMainFrame.
1116 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS, 1118 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS,
1117 state.CommitState()) << state.ToString(); 1119 state.CommitState()) << state.ToString();
1118 } 1120 }
1119 1121
1120 TEST(SchedulerStateMachineTest, ImmediateBeginFrameWhileInvisible) { 1122 TEST(SchedulerStateMachineTest, ImmediateBeginMainFrameWhileInvisible) {
1121 SchedulerSettings default_scheduler_settings; 1123 SchedulerSettings default_scheduler_settings;
1122 StateMachine state(default_scheduler_settings); 1124 StateMachine state(default_scheduler_settings);
1123 state.SetCanStart(); 1125 state.SetCanStart();
1124 state.UpdateState(state.NextAction()); 1126 state.UpdateState(state.NextAction());
1125 state.DidCreateAndInitializeOutputSurface(); 1127 state.DidCreateAndInitializeOutputSurface();
1126 state.SetVisible(true); 1128 state.SetVisible(true);
1127 state.SetCanDraw(true); 1129 state.SetCanDraw(true);
1128 1130
1129 state.SetNeedsCommit(); 1131 state.SetNeedsCommit();
1130 state.UpdateState(state.NextAction()); 1132 state.UpdateState(state.NextAction());
1131 1133
1132 state.SetNeedsCommit(); 1134 state.SetNeedsCommit();
1133 state.SetNeedsForcedCommit(); 1135 state.SetNeedsForcedCommit();
1134 state.UpdateState(state.NextAction()); 1136 state.UpdateState(state.NextAction());
1135 state.BeginFrameComplete(); 1137 state.BeginMainFrameComplete();
1136 1138
1137 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction()); 1139 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction());
1138 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT, 1140 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT,
1139 state.CommitState()); 1141 state.CommitState());
1140 state.UpdateState(state.NextAction()); 1142 state.UpdateState(state.NextAction());
1141 1143
1142 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_FORCED_DRAW, 1144 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_FORCED_DRAW,
1143 state.CommitState()); 1145 state.CommitState());
1144 1146
1145 state.DidEnterVSync(); 1147 state.DidEnterBeginImplFrame();
1146 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); 1148 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction());
1147 state.SetNeedsForcedRedraw(true); 1149 state.SetNeedsForcedRedraw(true);
1148 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_FORCED, state.NextAction()); 1150 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_FORCED, state.NextAction());
1149 state.UpdateState(state.NextAction()); 1151 state.UpdateState(state.NextAction());
1150 state.DidDrawIfPossibleCompleted(true); 1152 state.DidDrawIfPossibleCompleted(true);
1151 state.DidLeaveVSync(); 1153 state.DidLeaveBeginImplFrame();
1152 1154
1153 // Should be waiting for the normal begin frame. 1155 // Should be waiting for the normal BeginMainFrame.
1154 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS, 1156 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS,
1155 state.CommitState()) << state.ToString(); 1157 state.CommitState()) << state.ToString();
1156 1158
1157 // Become invisible and abort the "normal" begin frame. 1159 // Become invisible and abort the "normal" BeginMainFrame.
1158 state.SetVisible(false); 1160 state.SetVisible(false);
1159 state.BeginFrameAborted(); 1161 state.BeginMainFrameAborted();
1160 1162
1161 // Should be back in the idle state, but needing a commit. 1163 // Should be back in the idle state, but needing a commit.
1162 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); 1164 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState());
1163 EXPECT_TRUE(state.NeedsCommit()); 1165 EXPECT_TRUE(state.NeedsCommit());
1164 } 1166 }
1165 1167
1166 TEST(SchedulerStateMachineTest, ImmediateBeginFrameWhileCantDraw) { 1168 TEST(SchedulerStateMachineTest, ImmediateBeginMainFrameWhileCantDraw) {
1167 SchedulerSettings default_scheduler_settings; 1169 SchedulerSettings default_scheduler_settings;
1168 StateMachine state(default_scheduler_settings); 1170 StateMachine state(default_scheduler_settings);
1169 state.SetCanStart(); 1171 state.SetCanStart();
1170 state.UpdateState(state.NextAction()); 1172 state.UpdateState(state.NextAction());
1171 state.DidCreateAndInitializeOutputSurface(); 1173 state.DidCreateAndInitializeOutputSurface();
1172 state.SetVisible(true); 1174 state.SetVisible(true);
1173 state.SetCanDraw(false); 1175 state.SetCanDraw(false);
1174 1176
1175 state.SetNeedsCommit(); 1177 state.SetNeedsCommit();
1176 state.UpdateState(state.NextAction()); 1178 state.UpdateState(state.NextAction());
1177 1179
1178 state.SetNeedsCommit(); 1180 state.SetNeedsCommit();
1179 state.SetNeedsForcedCommit(); 1181 state.SetNeedsForcedCommit();
1180 state.UpdateState(state.NextAction()); 1182 state.UpdateState(state.NextAction());
1181 state.BeginFrameComplete(); 1183 state.BeginMainFrameComplete();
1182 1184
1183 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction()); 1185 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction());
1184 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT, 1186 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT,
1185 state.CommitState()); 1187 state.CommitState());
1186 state.UpdateState(state.NextAction()); 1188 state.UpdateState(state.NextAction());
1187 1189
1188 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_FORCED_DRAW, 1190 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_FORCED_DRAW,
1189 state.CommitState()); 1191 state.CommitState());
1190 1192
1191 state.DidEnterVSync(); 1193 state.DidEnterBeginImplFrame();
1192 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); 1194 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction());
1193 state.SetNeedsForcedRedraw(true); 1195 state.SetNeedsForcedRedraw(true);
1194 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_FORCED, state.NextAction()); 1196 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_FORCED, state.NextAction());
1195 state.UpdateState(state.NextAction()); 1197 state.UpdateState(state.NextAction());
1196 state.DidDrawIfPossibleCompleted(true); 1198 state.DidDrawIfPossibleCompleted(true);
1197 state.DidLeaveVSync(); 1199 state.DidLeaveBeginImplFrame();
1198 } 1200 }
1199 1201
1200 TEST(SchedulerStateMachineTest, ReportIfNotDrawing) { 1202 TEST(SchedulerStateMachineTest, ReportIfNotDrawing) {
1201 SchedulerSettings default_scheduler_settings; 1203 SchedulerSettings default_scheduler_settings;
1202 SchedulerStateMachine state(default_scheduler_settings); 1204 SchedulerStateMachine state(default_scheduler_settings);
1203 1205
1204 state.SetCanDraw(true); 1206 state.SetCanDraw(true);
1205 state.SetVisible(true); 1207 state.SetVisible(true);
1206 EXPECT_FALSE(state.DrawSuspendedUntilCommit()); 1208 EXPECT_FALSE(state.DrawSuspendedUntilCommit());
1207 1209
(...skipping 24 matching lines...) Expand all
1232 state.SetVisible(true); 1234 state.SetVisible(true);
1233 EXPECT_FALSE(state.DrawSuspendedUntilCommit()); 1235 EXPECT_FALSE(state.DrawSuspendedUntilCommit());
1234 1236
1235 state.SetMainThreadNeedsLayerTextures(); 1237 state.SetMainThreadNeedsLayerTextures();
1236 EXPECT_EQ( 1238 EXPECT_EQ(
1237 SchedulerStateMachine::ACTION_ACQUIRE_LAYER_TEXTURES_FOR_MAIN_THREAD, 1239 SchedulerStateMachine::ACTION_ACQUIRE_LAYER_TEXTURES_FOR_MAIN_THREAD,
1238 state.NextAction()); 1240 state.NextAction());
1239 state.UpdateState(state.NextAction()); 1241 state.UpdateState(state.NextAction());
1240 EXPECT_TRUE(state.DrawSuspendedUntilCommit()); 1242 EXPECT_TRUE(state.DrawSuspendedUntilCommit());
1241 1243
1242 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_FRAME, state.NextAction()); 1244 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_MAIN_FRAME, state.NextAction());
1243 1245
1244 state.UpdateState(state.NextAction()); 1246 state.UpdateState(state.NextAction());
1245 EXPECT_TRUE(state.DrawSuspendedUntilCommit()); 1247 EXPECT_TRUE(state.DrawSuspendedUntilCommit());
1246 1248
1247 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); 1249 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction());
1248 1250
1249 state.BeginFrameComplete(); 1251 state.BeginMainFrameComplete();
1250 EXPECT_TRUE(state.DrawSuspendedUntilCommit()); 1252 EXPECT_TRUE(state.DrawSuspendedUntilCommit());
1251 1253
1252 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction()); 1254 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.NextAction());
1253 1255
1254 state.UpdateState(state.NextAction()); 1256 state.UpdateState(state.NextAction());
1255 EXPECT_FALSE(state.DrawSuspendedUntilCommit()); 1257 EXPECT_FALSE(state.DrawSuspendedUntilCommit());
1256 } 1258 }
1257 1259
1258 } // namespace 1260 } // namespace
1259 } // namespace cc 1261 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698