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

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 test compiler errors 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_; } 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
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
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
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
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
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
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698