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

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

Issue 835783003: Convert the enum objects in cc/scheduler/scheduler_state_machine.h to C++ "enum class" objects (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 11 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 "base/debug/trace_event.h" 7 #include "base/debug/trace_event.h"
8 #include "cc/scheduler/scheduler.h" 8 #include "cc/scheduler/scheduler.h"
9 #include "cc/test/begin_frame_args_test.h" 9 #include "cc/test/begin_frame_args_test.h"
10 #include "testing/gtest/include/gtest/gtest.h" 10 #include "testing/gtest/include/gtest/gtest.h"
11 11
12 // Macro to compare two enum values and get nice output. 12 // Macro to compare two enum values and get nice output.
13 // Without: 13 // Without:
14 // Value of: actual() Actual: 7 14 // Value of: actual() Actual: 7
15 // Expected: expected() Which is: 0 15 // Expected: expected() Which is: 0
16 // With: 16 // With:
17 // Value of: actual() Actual: "ACTION_ANIMATE" 17 // Value of: actual() Actual: "Action::ANIMATE"
18 // Expected: expected() Which is: "ACTION_NONE" 18 // Expected: expected() Which is: "Action::NONE"
19 #define EXPECT_ENUM_EQ(enum_tostring, expected, actual) \ 19 #define EXPECT_ENUM_EQ(enum_tostring, expected, actual) \
20 EXPECT_STREQ(SchedulerStateMachine::enum_tostring(expected), \ 20 EXPECT_STREQ(SchedulerStateMachine::enum_tostring(expected), \
21 SchedulerStateMachine::enum_tostring(actual)) 21 SchedulerStateMachine::enum_tostring(actual))
22 22
23 #define EXPECT_IMPL_FRAME_STATE(expected) \ 23 #define EXPECT_IMPL_FRAME_STATE(expected) \
24 EXPECT_ENUM_EQ(BeginImplFrameStateToString, expected, \ 24 EXPECT_ENUM_EQ(BeginImplFrameStateToString, expected, \
25 state.begin_impl_frame_state()) \ 25 state.begin_impl_frame_state()) \
26 << state.AsValue()->ToString() 26 << state.AsValue()->ToString()
27 27
28 #define EXPECT_COMMIT_STATE(expected) \ 28 #define EXPECT_COMMIT_STATE(expected) \
29 EXPECT_ENUM_EQ(CommitStateToString, expected, state.CommitState()) 29 EXPECT_ENUM_EQ(CommitStateToString, expected, state.CommitState())
30 30
31 #define EXPECT_ACTION(expected) \ 31 #define EXPECT_ACTION(expected) \
32 EXPECT_ENUM_EQ(ActionToString, expected, state.NextAction()) \ 32 EXPECT_ENUM_EQ(ActionToString, expected, state.NextAction()) \
33 << state.AsValue()->ToString() 33 << state.AsValue()->ToString()
34 34
35 #define EXPECT_ACTION_UPDATE_STATE(action) \ 35 #define EXPECT_ACTION_UPDATE_STATE(action) \
36 EXPECT_ACTION(action); \ 36 EXPECT_ACTION(action); \
37 if (action == SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE || \ 37 if (action == SchedulerStateMachine::Action::DRAW_AND_SWAP_IF_POSSIBLE || \
38 action == SchedulerStateMachine::ACTION_DRAW_AND_SWAP_FORCED) { \ 38 action == SchedulerStateMachine::Action::DRAW_AND_SWAP_FORCED) { \
39 EXPECT_IMPL_FRAME_STATE( \ 39 EXPECT_IMPL_FRAME_STATE( \
40 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE); \ 40 SchedulerStateMachine::BeginImplFrameState::INSIDE_DEADLINE); \
41 } \ 41 } \
42 state.UpdateState(action); \ 42 state.UpdateState(action); \
43 if (action == SchedulerStateMachine::ACTION_NONE) { \ 43 if (action == SchedulerStateMachine::Action::NONE) { \
44 if (state.begin_impl_frame_state() == \ 44 if (state.begin_impl_frame_state() == \
45 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING) \ 45 SchedulerStateMachine::BeginImplFrameState::BEGIN_FRAME_STARTING) \
46 state.OnBeginImplFrameDeadlinePending(); \ 46 state.OnBeginImplFrameDeadlinePending(); \
47 if (state.begin_impl_frame_state() == \ 47 if (state.begin_impl_frame_state() == \
48 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE) \ 48 SchedulerStateMachine::BeginImplFrameState::INSIDE_DEADLINE) \
49 state.OnBeginImplFrameIdle(); \ 49 state.OnBeginImplFrameIdle(); \
50 } 50 }
51 51
52 namespace cc { 52 namespace cc {
53 53
54 namespace { 54 namespace {
55 55
56 const SchedulerStateMachine::BeginImplFrameState all_begin_impl_frame_states[] = 56 const SchedulerStateMachine::BeginImplFrameState all_begin_impl_frame_states[] =
57 {SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE, 57 {
58 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING, 58 SchedulerStateMachine::BeginImplFrameState::IDLE,
59 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME, 59 SchedulerStateMachine::BeginImplFrameState::BEGIN_FRAME_STARTING,
60 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE, }; 60 SchedulerStateMachine::BeginImplFrameState::INSIDE_BEGIN_FRAME,
61 SchedulerStateMachine::BeginImplFrameState::INSIDE_DEADLINE,
62 };
61 63
62 const SchedulerStateMachine::CommitState all_commit_states[] = { 64 const SchedulerStateMachine::CommitState all_commit_states[] = {
63 SchedulerStateMachine::COMMIT_STATE_IDLE, 65 SchedulerStateMachine::CommitState::IDLE,
64 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT, 66 SchedulerStateMachine::CommitState::BEGIN_MAIN_FRAME_SENT,
65 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_STARTED, 67 SchedulerStateMachine::CommitState::BEGIN_MAIN_FRAME_STARTED,
66 SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT, 68 SchedulerStateMachine::CommitState::READY_TO_COMMIT,
67 SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_ACTIVATION, 69 SchedulerStateMachine::CommitState::WAITING_FOR_ACTIVATION,
68 SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_DRAW}; 70 SchedulerStateMachine::CommitState::WAITING_FOR_DRAW};
69 71
70 // Exposes the protected state fields of the SchedulerStateMachine for testing 72 // Exposes the protected state fields of the SchedulerStateMachine for testing
71 class StateMachine : public SchedulerStateMachine { 73 class StateMachine : public SchedulerStateMachine {
72 public: 74 public:
73 explicit StateMachine(const SchedulerSettings& scheduler_settings) 75 explicit StateMachine(const SchedulerSettings& scheduler_settings)
74 : SchedulerStateMachine(scheduler_settings) {} 76 : SchedulerStateMachine(scheduler_settings) {}
75 77
76 void CreateAndInitializeOutputSurfaceWithActivatedCommit() { 78 void CreateAndInitializeOutputSurfaceWithActivatedCommit() {
77 DidCreateAndInitializeOutputSurface(); 79 DidCreateAndInitializeOutputSurface();
78 output_surface_state_ = OUTPUT_SURFACE_ACTIVE; 80 output_surface_state_ = OutputSurfaceState::ACTIVE;
79 } 81 }
80 82
81 void SetCommitState(CommitState cs) { commit_state_ = cs; } 83 void SetCommitState(CommitState cs) { commit_state_ = cs; }
82 CommitState CommitState() const { return commit_state_; } 84 CommitState CommitState() const { return commit_state_; }
83 85
84 ForcedRedrawOnTimeoutState ForcedRedrawState() const { 86 ForcedRedrawOnTimeoutState ForcedRedrawState() const {
85 return forced_redraw_state_; 87 return forced_redraw_state_;
86 } 88 }
87 89
88 void SetBeginImplFrameState(BeginImplFrameState bifs) { 90 void SetBeginImplFrameState(BeginImplFrameState bifs) {
89 begin_impl_frame_state_ = bifs; 91 begin_impl_frame_state_ = bifs;
90 } 92 }
91 93
92 BeginImplFrameState begin_impl_frame_state() const { 94 BeginImplFrameState begin_impl_frame_state() const {
93 return begin_impl_frame_state_; 95 return begin_impl_frame_state_;
94 } 96 }
95 97
96 OutputSurfaceState output_surface_state() const { 98 OutputSurfaceState output_surface_state() const {
97 return output_surface_state_; 99 return output_surface_state_;
98 } 100 }
99 101
100 bool NeedsCommit() const { return needs_commit_; } 102 bool NeedsCommit() const { return needs_commit_; }
101 103
102 void SetNeedsRedraw(bool b) { needs_redraw_ = b; } 104 void SetNeedsRedraw(bool b) { needs_redraw_ = b; }
103 105
104 void SetNeedsForcedRedrawForTimeout(bool b) { 106 void SetNeedsForcedRedrawForTimeout(bool b) {
105 forced_redraw_state_ = FORCED_REDRAW_STATE_WAITING_FOR_COMMIT; 107 forced_redraw_state_ = ForcedRedrawOnTimeoutState::WAITING_FOR_COMMIT;
106 active_tree_needs_first_draw_ = true; 108 active_tree_needs_first_draw_ = true;
107 } 109 }
108 bool NeedsForcedRedrawForTimeout() const { 110 bool NeedsForcedRedrawForTimeout() const {
109 return forced_redraw_state_ != FORCED_REDRAW_STATE_IDLE; 111 return forced_redraw_state_ != ForcedRedrawOnTimeoutState::IDLE;
110 } 112 }
111 113
112 void SetActiveTreeNeedsFirstDraw(bool needs_first_draw) { 114 void SetActiveTreeNeedsFirstDraw(bool needs_first_draw) {
113 active_tree_needs_first_draw_ = needs_first_draw; 115 active_tree_needs_first_draw_ = needs_first_draw;
114 } 116 }
115 117
116 bool CanDraw() const { return can_draw_; } 118 bool CanDraw() const { return can_draw_; }
117 bool Visible() const { return visible_; } 119 bool Visible() const { return visible_; }
118 120
119 bool PendingActivationsShouldBeForced() const { 121 bool PendingActivationsShouldBeForced() const {
120 return SchedulerStateMachine::PendingActivationsShouldBeForced(); 122 return SchedulerStateMachine::PendingActivationsShouldBeForced();
121 } 123 }
122 124
123 void SetHasPendingTree(bool has_pending_tree) { 125 void SetHasPendingTree(bool has_pending_tree) {
124 has_pending_tree_ = has_pending_tree; 126 has_pending_tree_ = has_pending_tree;
125 } 127 }
126 128
127 using SchedulerStateMachine::ShouldTriggerBeginImplFrameDeadlineImmediately; 129 using SchedulerStateMachine::ShouldTriggerBeginImplFrameDeadlineImmediately;
128 }; 130 };
129 131
130 TEST(SchedulerStateMachineTest, TestNextActionBeginsMainFrameIfNeeded) { 132 TEST(SchedulerStateMachineTest, TestNextActionBeginsMainFrameIfNeeded) {
131 SchedulerSettings default_scheduler_settings; 133 SchedulerSettings default_scheduler_settings;
132 134
133 // If no commit needed, do nothing. 135 // If no commit needed, do nothing.
134 { 136 {
135 StateMachine state(default_scheduler_settings); 137 StateMachine state(default_scheduler_settings);
136 state.SetCanStart(); 138 state.SetCanStart();
137 EXPECT_ACTION_UPDATE_STATE( 139 EXPECT_ACTION_UPDATE_STATE(
138 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION) 140 SchedulerStateMachine::Action::BEGIN_OUTPUT_SURFACE_CREATION)
139 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 141 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
140 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE); 142 state.SetCommitState(SchedulerStateMachine::CommitState::IDLE);
141 state.SetNeedsRedraw(false); 143 state.SetNeedsRedraw(false);
142 state.SetVisible(true); 144 state.SetVisible(true);
143 145
144 EXPECT_FALSE(state.BeginFrameNeeded()); 146 EXPECT_FALSE(state.BeginFrameNeeded());
145 147
146 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 148 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
147 EXPECT_FALSE(state.BeginFrameNeeded()); 149 EXPECT_FALSE(state.BeginFrameNeeded());
148 state.OnBeginImplFrame( 150 state.OnBeginImplFrame(
149 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 151 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE));
150 152
151 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 153 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
152 state.OnBeginImplFrameDeadline(); 154 state.OnBeginImplFrameDeadline();
153 } 155 }
154 156
155 // If commit requested but can_start is still false, do nothing. 157 // If commit requested but can_start is still false, do nothing.
156 { 158 {
157 StateMachine state(default_scheduler_settings); 159 StateMachine state(default_scheduler_settings);
158 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE); 160 state.SetCommitState(SchedulerStateMachine::CommitState::IDLE);
159 state.SetNeedsRedraw(false); 161 state.SetNeedsRedraw(false);
160 state.SetVisible(true); 162 state.SetVisible(true);
161 state.SetNeedsCommit(); 163 state.SetNeedsCommit();
162 164
163 EXPECT_FALSE(state.BeginFrameNeeded()); 165 EXPECT_FALSE(state.BeginFrameNeeded());
164 166
165 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 167 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
166 EXPECT_FALSE(state.BeginFrameNeeded()); 168 EXPECT_FALSE(state.BeginFrameNeeded());
167 state.OnBeginImplFrame( 169 state.OnBeginImplFrame(
168 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 170 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE));
169 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 171 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
170 state.OnBeginImplFrameDeadline(); 172 state.OnBeginImplFrameDeadline();
171 } 173 }
172 174
173 // If commit requested, begin a main frame. 175 // If commit requested, begin a main frame.
174 { 176 {
175 StateMachine state(default_scheduler_settings); 177 StateMachine state(default_scheduler_settings);
176 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE); 178 state.SetCommitState(SchedulerStateMachine::CommitState::IDLE);
177 state.SetCanStart(); 179 state.SetCanStart();
178 state.UpdateState(state.NextAction()); 180 state.UpdateState(state.NextAction());
179 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 181 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
180 state.SetNeedsRedraw(false); 182 state.SetNeedsRedraw(false);
181 state.SetVisible(true); 183 state.SetVisible(true);
182 state.SetNeedsCommit(); 184 state.SetNeedsCommit();
183 185
184 EXPECT_TRUE(state.BeginFrameNeeded()); 186 EXPECT_TRUE(state.BeginFrameNeeded());
185 187
186 state.OnBeginImplFrame( 188 state.OnBeginImplFrame(
187 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 189 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE));
188 EXPECT_ACTION_UPDATE_STATE( 190 EXPECT_ACTION_UPDATE_STATE(
189 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 191 SchedulerStateMachine::Action::SEND_BEGIN_MAIN_FRAME);
190 } 192 }
191 193
192 // Begin the frame, make sure needs_commit and commit_state update correctly. 194 // Begin the frame, make sure needs_commit and commit_state update correctly.
193 { 195 {
194 StateMachine state(default_scheduler_settings); 196 StateMachine state(default_scheduler_settings);
195 state.SetCanStart(); 197 state.SetCanStart();
196 state.UpdateState(state.NextAction()); 198 state.UpdateState(state.NextAction());
197 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 199 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
198 state.SetVisible(true); 200 state.SetVisible(true);
199 state.UpdateState(SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 201 state.UpdateState(SchedulerStateMachine::Action::SEND_BEGIN_MAIN_FRAME);
200 EXPECT_COMMIT_STATE( 202 EXPECT_COMMIT_STATE(
201 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT); 203 SchedulerStateMachine::CommitState::BEGIN_MAIN_FRAME_SENT);
202 EXPECT_FALSE(state.NeedsCommit()); 204 EXPECT_FALSE(state.NeedsCommit());
203 } 205 }
204 } 206 }
205 207
206 // Explicitly test main_frame_before_activation_enabled = true 208 // Explicitly test main_frame_before_activation_enabled = true
207 TEST(SchedulerStateMachineTest, MainFrameBeforeActivationEnabled) { 209 TEST(SchedulerStateMachineTest, MainFrameBeforeActivationEnabled) {
208 SchedulerSettings scheduler_settings; 210 SchedulerSettings scheduler_settings;
209 scheduler_settings.impl_side_painting = true; 211 scheduler_settings.impl_side_painting = true;
210 scheduler_settings.main_frame_before_activation_enabled = true; 212 scheduler_settings.main_frame_before_activation_enabled = true;
211 StateMachine state(scheduler_settings); 213 StateMachine state(scheduler_settings);
212 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE); 214 state.SetCommitState(SchedulerStateMachine::CommitState::IDLE);
213 state.SetCanStart(); 215 state.SetCanStart();
214 state.UpdateState(state.NextAction()); 216 state.UpdateState(state.NextAction());
215 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 217 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
216 state.SetNeedsRedraw(false); 218 state.SetNeedsRedraw(false);
217 state.SetVisible(true); 219 state.SetVisible(true);
218 state.SetCanDraw(true); 220 state.SetCanDraw(true);
219 state.SetNeedsCommit(); 221 state.SetNeedsCommit();
220 222
221 EXPECT_TRUE(state.BeginFrameNeeded()); 223 EXPECT_TRUE(state.BeginFrameNeeded());
222 224
223 // Commit to the pending tree. 225 // Commit to the pending tree.
224 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 226 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE));
225 EXPECT_ACTION_UPDATE_STATE( 227 EXPECT_ACTION_UPDATE_STATE(
226 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 228 SchedulerStateMachine::Action::SEND_BEGIN_MAIN_FRAME);
227 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 229 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
228 230
229 state.NotifyBeginMainFrameStarted(); 231 state.NotifyBeginMainFrameStarted();
230 state.NotifyReadyToCommit(); 232 state.NotifyReadyToCommit();
231 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 233 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::COMMIT);
232 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 234 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
233 EXPECT_COMMIT_STATE(SchedulerStateMachine::COMMIT_STATE_IDLE); 235 EXPECT_COMMIT_STATE(SchedulerStateMachine::CommitState::IDLE);
234 236
235 state.OnBeginImplFrameDeadline(); 237 state.OnBeginImplFrameDeadline();
236 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 238 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
237 239
238 // Verify that the next commit starts while there is still a pending tree. 240 // Verify that the next commit starts while there is still a pending tree.
239 state.SetNeedsCommit(); 241 state.SetNeedsCommit();
240 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 242 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE));
241 EXPECT_ACTION_UPDATE_STATE( 243 EXPECT_ACTION_UPDATE_STATE(
242 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 244 SchedulerStateMachine::Action::SEND_BEGIN_MAIN_FRAME);
243 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 245 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
244 246
245 // Verify the pending commit doesn't overwrite the pending 247 // Verify the pending commit doesn't overwrite the pending
246 // tree until the pending tree has been activated. 248 // tree until the pending tree has been activated.
247 state.NotifyBeginMainFrameStarted(); 249 state.NotifyBeginMainFrameStarted();
248 state.NotifyReadyToCommit(); 250 state.NotifyReadyToCommit();
249 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 251 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
250 252
251 // Verify NotifyReadyToActivate unblocks activation, draw, and 253 // Verify NotifyReadyToActivate unblocks activation, draw, and
252 // commit in that order. 254 // commit in that order.
253 state.NotifyReadyToActivate(); 255 state.NotifyReadyToActivate();
254 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); 256 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::ACTIVATE_SYNC_TREE);
255 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 257 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
256 258
257 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineImmediately()); 259 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineImmediately());
258 state.OnBeginImplFrameDeadline(); 260 state.OnBeginImplFrameDeadline();
259 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 261 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::ANIMATE);
260 EXPECT_ACTION_UPDATE_STATE( 262 EXPECT_ACTION_UPDATE_STATE(
261 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 263 SchedulerStateMachine::Action::DRAW_AND_SWAP_IF_POSSIBLE);
262 state.DidSwapBuffers(); 264 state.DidSwapBuffers();
263 state.DidSwapBuffersComplete(); 265 state.DidSwapBuffersComplete();
264 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 266 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::COMMIT);
265 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 267 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
266 EXPECT_COMMIT_STATE(SchedulerStateMachine::COMMIT_STATE_IDLE); 268 EXPECT_COMMIT_STATE(SchedulerStateMachine::CommitState::IDLE);
267 } 269 }
268 270
269 TEST(SchedulerStateMachineTest, 271 TEST(SchedulerStateMachineTest,
270 TestFailedDrawForAnimationCheckerboardSetsNeedsCommitAndDoesNotDrawAgain) { 272 TestFailedDrawForAnimationCheckerboardSetsNeedsCommitAndDoesNotDrawAgain) {
271 SchedulerSettings default_scheduler_settings; 273 SchedulerSettings default_scheduler_settings;
272 StateMachine state(default_scheduler_settings); 274 StateMachine state(default_scheduler_settings);
273 state.SetCanStart(); 275 state.SetCanStart();
274 state.UpdateState(state.NextAction()); 276 state.UpdateState(state.NextAction());
275 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 277 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
276 state.SetVisible(true); 278 state.SetVisible(true);
277 state.SetCanDraw(true); 279 state.SetCanDraw(true);
278 state.SetNeedsRedraw(true); 280 state.SetNeedsRedraw(true);
279 EXPECT_TRUE(state.RedrawPending()); 281 EXPECT_TRUE(state.RedrawPending());
280 EXPECT_TRUE(state.BeginFrameNeeded()); 282 EXPECT_TRUE(state.BeginFrameNeeded());
281 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 283 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE));
282 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 284 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::ANIMATE);
283 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 285 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
284 state.OnBeginImplFrameDeadline(); 286 state.OnBeginImplFrameDeadline();
285 287
286 // We're drawing now. 288 // We're drawing now.
287 EXPECT_ACTION_UPDATE_STATE( 289 EXPECT_ACTION_UPDATE_STATE(
288 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 290 SchedulerStateMachine::Action::DRAW_AND_SWAP_IF_POSSIBLE);
289 state.DidSwapBuffers(); 291 state.DidSwapBuffers();
290 state.DidSwapBuffersComplete(); 292 state.DidSwapBuffersComplete();
291 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 293 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
292 294
293 EXPECT_FALSE(state.RedrawPending()); 295 EXPECT_FALSE(state.RedrawPending());
294 EXPECT_FALSE(state.CommitPending()); 296 EXPECT_FALSE(state.CommitPending());
295 297
296 // Failing the draw makes us require a commit. 298 // Failing the draw makes us require a commit.
297 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); 299 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS);
298 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 300 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE));
299 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 301 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::ANIMATE);
300 EXPECT_ACTION_UPDATE_STATE( 302 EXPECT_ACTION_UPDATE_STATE(
301 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 303 SchedulerStateMachine::Action::SEND_BEGIN_MAIN_FRAME);
302 EXPECT_TRUE(state.RedrawPending()); 304 EXPECT_TRUE(state.RedrawPending());
303 EXPECT_TRUE(state.CommitPending()); 305 EXPECT_TRUE(state.CommitPending());
304 } 306 }
305 307
306 TEST(SchedulerStateMachineTest, TestFailedDrawForMissingHighResNeedsCommit) { 308 TEST(SchedulerStateMachineTest, TestFailedDrawForMissingHighResNeedsCommit) {
307 SchedulerSettings default_scheduler_settings; 309 SchedulerSettings default_scheduler_settings;
308 StateMachine state(default_scheduler_settings); 310 StateMachine state(default_scheduler_settings);
309 state.SetCanStart(); 311 state.SetCanStart();
310 state.UpdateState(state.NextAction()); 312 state.UpdateState(state.NextAction());
311 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 313 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
312 state.SetVisible(true); 314 state.SetVisible(true);
313 state.SetCanDraw(true); 315 state.SetCanDraw(true);
314 state.SetNeedsRedraw(true); 316 state.SetNeedsRedraw(true);
315 EXPECT_TRUE(state.RedrawPending()); 317 EXPECT_TRUE(state.RedrawPending());
316 EXPECT_TRUE(state.BeginFrameNeeded()); 318 EXPECT_TRUE(state.BeginFrameNeeded());
317 319
318 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 320 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE));
319 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 321 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::ANIMATE);
320 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 322 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
321 state.OnBeginImplFrameDeadline(); 323 state.OnBeginImplFrameDeadline();
322 EXPECT_ACTION_UPDATE_STATE( 324 EXPECT_ACTION_UPDATE_STATE(
323 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 325 SchedulerStateMachine::Action::DRAW_AND_SWAP_IF_POSSIBLE);
324 state.DidSwapBuffers(); 326 state.DidSwapBuffers();
325 state.DidSwapBuffersComplete(); 327 state.DidSwapBuffersComplete();
326 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 328 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
327 EXPECT_FALSE(state.RedrawPending()); 329 EXPECT_FALSE(state.RedrawPending());
328 EXPECT_FALSE(state.CommitPending()); 330 EXPECT_FALSE(state.CommitPending());
329 331
330 // Missing high res content requires a commit (but not a redraw) 332 // Missing high res content requires a commit (but not a redraw)
331 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_MISSING_HIGH_RES_CONTENT); 333 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_MISSING_HIGH_RES_CONTENT);
332 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 334 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE));
333 EXPECT_ACTION_UPDATE_STATE( 335 EXPECT_ACTION_UPDATE_STATE(
334 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 336 SchedulerStateMachine::Action::SEND_BEGIN_MAIN_FRAME);
335 EXPECT_FALSE(state.RedrawPending()); 337 EXPECT_FALSE(state.RedrawPending());
336 EXPECT_TRUE(state.CommitPending()); 338 EXPECT_TRUE(state.CommitPending());
337 } 339 }
338 340
339 TEST(SchedulerStateMachineTest, 341 TEST(SchedulerStateMachineTest,
340 TestsetNeedsRedrawDuringFailedDrawDoesNotRemoveNeedsRedraw) { 342 TestsetNeedsRedrawDuringFailedDrawDoesNotRemoveNeedsRedraw) {
341 SchedulerSettings default_scheduler_settings; 343 SchedulerSettings default_scheduler_settings;
342 StateMachine state(default_scheduler_settings); 344 StateMachine state(default_scheduler_settings);
343 state.SetCanStart(); 345 state.SetCanStart();
344 state.UpdateState(state.NextAction()); 346 state.UpdateState(state.NextAction());
345 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 347 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
346 348
347 state.SetVisible(true); 349 state.SetVisible(true);
348 state.SetCanDraw(true); 350 state.SetCanDraw(true);
349 state.SetNeedsRedraw(true); 351 state.SetNeedsRedraw(true);
350 EXPECT_TRUE(state.RedrawPending()); 352 EXPECT_TRUE(state.RedrawPending());
351 EXPECT_TRUE(state.BeginFrameNeeded()); 353 EXPECT_TRUE(state.BeginFrameNeeded());
352 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 354 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE));
353 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 355 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::ANIMATE);
354 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 356 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
355 state.OnBeginImplFrameDeadline(); 357 state.OnBeginImplFrameDeadline();
356 358
357 // We're drawing now. 359 // We're drawing now.
358 EXPECT_ACTION_UPDATE_STATE( 360 EXPECT_ACTION_UPDATE_STATE(
359 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 361 SchedulerStateMachine::Action::DRAW_AND_SWAP_IF_POSSIBLE);
360 state.DidSwapBuffers(); 362 state.DidSwapBuffers();
361 state.DidSwapBuffersComplete(); 363 state.DidSwapBuffersComplete();
362 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 364 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
363 EXPECT_FALSE(state.RedrawPending()); 365 EXPECT_FALSE(state.RedrawPending());
364 EXPECT_FALSE(state.CommitPending()); 366 EXPECT_FALSE(state.CommitPending());
365 367
366 // While still in the same BeginMainFrame callback on the main thread, 368 // While still in the same BeginMainFrame callback on the main thread,
367 // set needs redraw again. This should not redraw. 369 // set needs redraw again. This should not redraw.
368 state.SetNeedsRedraw(true); 370 state.SetNeedsRedraw(true);
369 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 371 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
370 372
371 // Failing the draw for animation checkerboards makes us require a commit. 373 // Failing the draw for animation checkerboards makes us require a commit.
372 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); 374 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS);
373 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 375 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE));
374 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 376 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::ANIMATE);
375 EXPECT_ACTION_UPDATE_STATE( 377 EXPECT_ACTION_UPDATE_STATE(
376 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 378 SchedulerStateMachine::Action::SEND_BEGIN_MAIN_FRAME);
377 EXPECT_TRUE(state.RedrawPending()); 379 EXPECT_TRUE(state.RedrawPending());
378 } 380 }
379 381
380 TEST(SchedulerStateMachineTest, 382 TEST(SchedulerStateMachineTest,
381 TestFailedDrawsEventuallyForceDrawAfterNextCommit) { 383 TestFailedDrawsEventuallyForceDrawAfterNextCommit) {
382 SchedulerSettings scheduler_settings; 384 SchedulerSettings scheduler_settings;
383 scheduler_settings.maximum_number_of_failed_draws_before_draw_is_forced_ = 1; 385 scheduler_settings.maximum_number_of_failed_draws_before_draw_is_forced_ = 1;
384 StateMachine state(scheduler_settings); 386 StateMachine state(scheduler_settings);
385 state.SetCanStart(); 387 state.SetCanStart();
386 state.UpdateState(state.NextAction()); 388 state.UpdateState(state.NextAction());
387 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 389 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
388 state.SetVisible(true); 390 state.SetVisible(true);
389 state.SetCanDraw(true); 391 state.SetCanDraw(true);
390 392
391 // Start a commit. 393 // Start a commit.
392 state.SetNeedsCommit(); 394 state.SetNeedsCommit();
393 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 395 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
394 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 396 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE));
395 EXPECT_ACTION_UPDATE_STATE( 397 EXPECT_ACTION_UPDATE_STATE(
396 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 398 SchedulerStateMachine::Action::SEND_BEGIN_MAIN_FRAME);
397 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 399 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
398 EXPECT_TRUE(state.CommitPending()); 400 EXPECT_TRUE(state.CommitPending());
399 401
400 // Then initiate a draw. 402 // Then initiate a draw.
401 state.SetNeedsRedraw(true); 403 state.SetNeedsRedraw(true);
402 state.OnBeginImplFrameDeadline(); 404 state.OnBeginImplFrameDeadline();
403 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 405 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::ANIMATE);
404 EXPECT_ACTION_UPDATE_STATE( 406 EXPECT_ACTION_UPDATE_STATE(
405 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 407 SchedulerStateMachine::Action::DRAW_AND_SWAP_IF_POSSIBLE);
406 408
407 // Fail the draw. 409 // Fail the draw.
408 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); 410 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS);
409 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 411 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
410 EXPECT_TRUE(state.BeginFrameNeeded()); 412 EXPECT_TRUE(state.BeginFrameNeeded());
411 EXPECT_TRUE(state.RedrawPending()); 413 EXPECT_TRUE(state.RedrawPending());
412 // But the commit is ongoing. 414 // But the commit is ongoing.
413 EXPECT_TRUE(state.CommitPending()); 415 EXPECT_TRUE(state.CommitPending());
414 416
415 // Finish the commit. Note, we should not yet be forcing a draw, but should 417 // Finish the commit. Note, we should not yet be forcing a draw, but should
416 // continue the commit as usual. 418 // continue the commit as usual.
417 state.NotifyBeginMainFrameStarted(); 419 state.NotifyBeginMainFrameStarted();
418 state.NotifyReadyToCommit(); 420 state.NotifyReadyToCommit();
419 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 421 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::COMMIT);
420 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 422 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
421 EXPECT_TRUE(state.RedrawPending()); 423 EXPECT_TRUE(state.RedrawPending());
422 424
423 // The redraw should be forced at the end of the next BeginImplFrame. 425 // The redraw should be forced at the end of the next BeginImplFrame.
424 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 426 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE));
425 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 427 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::ANIMATE);
426 EXPECT_ACTION_UPDATE_STATE( 428 EXPECT_ACTION_UPDATE_STATE(
427 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 429 SchedulerStateMachine::Action::SEND_BEGIN_MAIN_FRAME);
428 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 430 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
429 state.OnBeginImplFrameDeadline(); 431 state.OnBeginImplFrameDeadline();
430 EXPECT_ACTION_UPDATE_STATE( 432 EXPECT_ACTION_UPDATE_STATE(
431 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_FORCED); 433 SchedulerStateMachine::Action::DRAW_AND_SWAP_FORCED);
432 state.DidSwapBuffers(); 434 state.DidSwapBuffers();
433 state.DidSwapBuffersComplete(); 435 state.DidSwapBuffersComplete();
434 } 436 }
435 437
436 TEST(SchedulerStateMachineTest, TestFailedDrawsDoNotRestartForcedDraw) { 438 TEST(SchedulerStateMachineTest, TestFailedDrawsDoNotRestartForcedDraw) {
437 SchedulerSettings scheduler_settings; 439 SchedulerSettings scheduler_settings;
438 int draw_limit = 1; 440 int draw_limit = 1;
439 scheduler_settings.maximum_number_of_failed_draws_before_draw_is_forced_ = 441 scheduler_settings.maximum_number_of_failed_draws_before_draw_is_forced_ =
440 draw_limit; 442 draw_limit;
441 scheduler_settings.impl_side_painting = true; 443 scheduler_settings.impl_side_painting = true;
442 StateMachine state(scheduler_settings); 444 StateMachine state(scheduler_settings);
443 state.SetCanStart(); 445 state.SetCanStart();
444 state.UpdateState(state.NextAction()); 446 state.UpdateState(state.NextAction());
445 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 447 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
446 state.SetVisible(true); 448 state.SetVisible(true);
447 state.SetCanDraw(true); 449 state.SetCanDraw(true);
448 450
449 // Start a commit. 451 // Start a commit.
450 state.SetNeedsCommit(); 452 state.SetNeedsCommit();
451 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 453 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
452 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 454 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE));
453 EXPECT_ACTION_UPDATE_STATE( 455 EXPECT_ACTION_UPDATE_STATE(
454 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 456 SchedulerStateMachine::Action::SEND_BEGIN_MAIN_FRAME);
455 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 457 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
456 EXPECT_TRUE(state.CommitPending()); 458 EXPECT_TRUE(state.CommitPending());
457 459
458 // Then initiate a draw. 460 // Then initiate a draw.
459 state.SetNeedsRedraw(true); 461 state.SetNeedsRedraw(true);
460 state.OnBeginImplFrameDeadline(); 462 state.OnBeginImplFrameDeadline();
461 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 463 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::ANIMATE);
462 EXPECT_ACTION_UPDATE_STATE( 464 EXPECT_ACTION_UPDATE_STATE(
463 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 465 SchedulerStateMachine::Action::DRAW_AND_SWAP_IF_POSSIBLE);
464 466
465 // Fail the draw enough times to force a redraw, 467 // Fail the draw enough times to force a redraw,
466 // then once more for good measure. 468 // then once more for good measure.
467 for (int i = 0; i < draw_limit + 1; ++i) 469 for (int i = 0; i < draw_limit + 1; ++i)
468 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); 470 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS);
469 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 471 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
470 EXPECT_TRUE(state.BeginFrameNeeded()); 472 EXPECT_TRUE(state.BeginFrameNeeded());
471 EXPECT_TRUE(state.RedrawPending()); 473 EXPECT_TRUE(state.RedrawPending());
472 // But the commit is ongoing. 474 // But the commit is ongoing.
473 EXPECT_TRUE(state.CommitPending()); 475 EXPECT_TRUE(state.CommitPending());
474 EXPECT_TRUE(state.ForcedRedrawState() == 476 EXPECT_TRUE(
475 SchedulerStateMachine::FORCED_REDRAW_STATE_WAITING_FOR_COMMIT); 477 state.ForcedRedrawState() ==
478 SchedulerStateMachine::ForcedRedrawOnTimeoutState::WAITING_FOR_COMMIT);
476 479
477 state.NotifyBeginMainFrameStarted(); 480 state.NotifyBeginMainFrameStarted();
478 state.NotifyReadyToCommit(); 481 state.NotifyReadyToCommit();
479 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 482 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::COMMIT);
480 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 483 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
481 EXPECT_TRUE(state.RedrawPending()); 484 EXPECT_TRUE(state.RedrawPending());
482 EXPECT_FALSE(state.CommitPending()); 485 EXPECT_FALSE(state.CommitPending());
483 486
484 // Now force redraw should be in waiting for activation 487 // Now force redraw should be in waiting for activation
485 EXPECT_TRUE(state.ForcedRedrawState() == 488 EXPECT_TRUE(state.ForcedRedrawState() ==
486 SchedulerStateMachine::FORCED_REDRAW_STATE_WAITING_FOR_ACTIVATION); 489 SchedulerStateMachine::ForcedRedrawOnTimeoutState::
490 WAITING_FOR_ACTIVATION);
487 491
488 // After failing additional draws, we should still be in a forced 492 // After failing additional draws, we should still be in a forced
489 // redraw, but not back in WAITING_FOR_COMMIT. 493 // redraw, but not back in WAITING_FOR_COMMIT.
490 for (int i = 0; i < draw_limit + 1; ++i) 494 for (int i = 0; i < draw_limit + 1; ++i)
491 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); 495 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS);
492 EXPECT_TRUE(state.RedrawPending()); 496 EXPECT_TRUE(state.RedrawPending());
493 EXPECT_TRUE(state.ForcedRedrawState() == 497 EXPECT_TRUE(state.ForcedRedrawState() ==
494 SchedulerStateMachine::FORCED_REDRAW_STATE_WAITING_FOR_ACTIVATION); 498 SchedulerStateMachine::ForcedRedrawOnTimeoutState::
499 WAITING_FOR_ACTIVATION);
495 } 500 }
496 501
497 TEST(SchedulerStateMachineTest, TestFailedDrawIsRetriedInNextBeginImplFrame) { 502 TEST(SchedulerStateMachineTest, TestFailedDrawIsRetriedInNextBeginImplFrame) {
498 SchedulerSettings default_scheduler_settings; 503 SchedulerSettings default_scheduler_settings;
499 StateMachine state(default_scheduler_settings); 504 StateMachine state(default_scheduler_settings);
500 state.SetCanStart(); 505 state.SetCanStart();
501 state.UpdateState(state.NextAction()); 506 state.UpdateState(state.NextAction());
502 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 507 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
503 state.SetVisible(true); 508 state.SetVisible(true);
504 state.SetCanDraw(true); 509 state.SetCanDraw(true);
505 510
506 // Start a draw. 511 // Start a draw.
507 state.SetNeedsRedraw(true); 512 state.SetNeedsRedraw(true);
508 EXPECT_TRUE(state.BeginFrameNeeded()); 513 EXPECT_TRUE(state.BeginFrameNeeded());
509 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 514 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE));
510 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 515 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::ANIMATE);
511 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 516 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
512 state.OnBeginImplFrameDeadline(); 517 state.OnBeginImplFrameDeadline();
513 EXPECT_TRUE(state.RedrawPending()); 518 EXPECT_TRUE(state.RedrawPending());
514 EXPECT_ACTION_UPDATE_STATE( 519 EXPECT_ACTION_UPDATE_STATE(
515 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 520 SchedulerStateMachine::Action::DRAW_AND_SWAP_IF_POSSIBLE);
516 521
517 // Failing the draw for animation checkerboards makes us require a commit. 522 // Failing the draw for animation checkerboards makes us require a commit.
518 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); 523 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS);
519 EXPECT_ACTION_UPDATE_STATE( 524 EXPECT_ACTION_UPDATE_STATE(
520 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 525 SchedulerStateMachine::Action::SEND_BEGIN_MAIN_FRAME);
521 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 526 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
522 EXPECT_TRUE(state.RedrawPending()); 527 EXPECT_TRUE(state.RedrawPending());
523 528
524 // We should not be trying to draw again now, but we have a commit pending. 529 // We should not be trying to draw again now, but we have a commit pending.
525 EXPECT_TRUE(state.BeginFrameNeeded()); 530 EXPECT_TRUE(state.BeginFrameNeeded());
526 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 531 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE));
527 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 532 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::ANIMATE);
528 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 533 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
529 534
530 // We should try to draw again at the end of the next BeginImplFrame on 535 // We should try to draw again at the end of the next BeginImplFrame on
531 // the impl thread. 536 // the impl thread.
532 state.OnBeginImplFrameDeadline(); 537 state.OnBeginImplFrameDeadline();
533 EXPECT_ACTION_UPDATE_STATE( 538 EXPECT_ACTION_UPDATE_STATE(
534 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 539 SchedulerStateMachine::Action::DRAW_AND_SWAP_IF_POSSIBLE);
535 state.DidSwapBuffers(); 540 state.DidSwapBuffers();
536 state.DidSwapBuffersComplete(); 541 state.DidSwapBuffersComplete();
537 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 542 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
538 } 543 }
539 544
540 TEST(SchedulerStateMachineTest, TestDoestDrawTwiceInSameFrame) { 545 TEST(SchedulerStateMachineTest, TestDoestDrawTwiceInSameFrame) {
541 SchedulerSettings default_scheduler_settings; 546 SchedulerSettings default_scheduler_settings;
542 StateMachine state(default_scheduler_settings); 547 StateMachine state(default_scheduler_settings);
543 state.SetCanStart(); 548 state.SetCanStart();
544 state.UpdateState(state.NextAction()); 549 state.UpdateState(state.NextAction());
545 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 550 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
546 state.SetVisible(true); 551 state.SetVisible(true);
547 state.SetCanDraw(true); 552 state.SetCanDraw(true);
548 state.SetNeedsRedraw(true); 553 state.SetNeedsRedraw(true);
549 554
550 // Draw the first frame. 555 // Draw the first frame.
551 EXPECT_TRUE(state.BeginFrameNeeded()); 556 EXPECT_TRUE(state.BeginFrameNeeded());
552 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 557 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE));
553 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 558 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::ANIMATE);
554 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 559 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
555 560
556 state.OnBeginImplFrameDeadline(); 561 state.OnBeginImplFrameDeadline();
557 EXPECT_ACTION_UPDATE_STATE( 562 EXPECT_ACTION_UPDATE_STATE(
558 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 563 SchedulerStateMachine::Action::DRAW_AND_SWAP_IF_POSSIBLE);
559 state.DidSwapBuffers(); 564 state.DidSwapBuffers();
560 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); 565 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS);
561 state.DidSwapBuffersComplete(); 566 state.DidSwapBuffersComplete();
562 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 567 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
563 568
564 // Before the next BeginImplFrame, set needs redraw again. 569 // Before the next BeginImplFrame, set needs redraw again.
565 // This should not redraw until the next BeginImplFrame. 570 // This should not redraw until the next BeginImplFrame.
566 state.SetNeedsRedraw(true); 571 state.SetNeedsRedraw(true);
567 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 572 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
568 573
569 // Move to another frame. This should now draw. 574 // Move to another frame. This should now draw.
570 EXPECT_TRUE(state.BeginFrameNeeded()); 575 EXPECT_TRUE(state.BeginFrameNeeded());
571 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 576 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE));
572 577
573 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 578 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::ANIMATE);
574 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 579 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
575 580
576 state.OnBeginImplFrameDeadline(); 581 state.OnBeginImplFrameDeadline();
577 EXPECT_ACTION_UPDATE_STATE( 582 EXPECT_ACTION_UPDATE_STATE(
578 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 583 SchedulerStateMachine::Action::DRAW_AND_SWAP_IF_POSSIBLE);
579 state.DidSwapBuffers(); 584 state.DidSwapBuffers();
580 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); 585 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS);
581 state.DidSwapBuffersComplete(); 586 state.DidSwapBuffersComplete();
582 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 587 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
583 588
584 // We just swapped, so we should proactively request another BeginImplFrame. 589 // We just swapped, so we should proactively request another BeginImplFrame.
585 EXPECT_TRUE(state.BeginFrameNeeded()); 590 EXPECT_TRUE(state.BeginFrameNeeded());
586 } 591 }
587 592
588 TEST(SchedulerStateMachineTest, TestNextActionDrawsOnBeginImplFrame) { 593 TEST(SchedulerStateMachineTest, TestNextActionDrawsOnBeginImplFrame) {
589 SchedulerSettings default_scheduler_settings; 594 SchedulerSettings default_scheduler_settings;
590 595
591 // When not in BeginImplFrame deadline, or in BeginImplFrame deadline 596 // When not in BeginImplFrame deadline, or in BeginImplFrame deadline
592 // but not visible, don't draw. 597 // but not visible, don't draw.
593 size_t num_commit_states = 598 size_t num_commit_states =
594 sizeof(all_commit_states) / sizeof(SchedulerStateMachine::CommitState); 599 sizeof(all_commit_states) / sizeof(SchedulerStateMachine::CommitState);
595 size_t num_begin_impl_frame_states = 600 size_t num_begin_impl_frame_states =
596 sizeof(all_begin_impl_frame_states) / 601 sizeof(all_begin_impl_frame_states) /
597 sizeof(SchedulerStateMachine::BeginImplFrameState); 602 sizeof(SchedulerStateMachine::BeginImplFrameState);
598 for (size_t i = 0; i < num_commit_states; ++i) { 603 for (size_t i = 0; i < num_commit_states; ++i) {
599 for (size_t j = 0; j < num_begin_impl_frame_states; ++j) { 604 for (size_t j = 0; j < num_begin_impl_frame_states; ++j) {
600 StateMachine state(default_scheduler_settings); 605 StateMachine state(default_scheduler_settings);
601 state.SetCanStart(); 606 state.SetCanStart();
602 state.UpdateState(state.NextAction()); 607 state.UpdateState(state.NextAction());
603 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 608 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
604 state.SetCommitState(all_commit_states[i]); 609 state.SetCommitState(all_commit_states[i]);
605 state.SetBeginImplFrameState(all_begin_impl_frame_states[j]); 610 state.SetBeginImplFrameState(all_begin_impl_frame_states[j]);
606 bool visible = 611 bool visible =
607 (all_begin_impl_frame_states[j] != 612 (all_begin_impl_frame_states[j] !=
608 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE); 613 SchedulerStateMachine::BeginImplFrameState::INSIDE_DEADLINE);
609 state.SetVisible(visible); 614 state.SetVisible(visible);
610 615
611 // Case 1: needs_commit=false 616 // Case 1: needs_commit=false
612 EXPECT_NE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE, 617 EXPECT_NE(SchedulerStateMachine::Action::DRAW_AND_SWAP_IF_POSSIBLE,
613 state.NextAction()); 618 state.NextAction());
614 619
615 // Case 2: needs_commit=true 620 // Case 2: needs_commit=true
616 state.SetNeedsCommit(); 621 state.SetNeedsCommit();
617 EXPECT_NE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE, 622 EXPECT_NE(SchedulerStateMachine::Action::DRAW_AND_SWAP_IF_POSSIBLE,
618 state.NextAction()) 623 state.NextAction())
619 << state.AsValue()->ToString(); 624 << state.AsValue()->ToString();
620 } 625 }
621 } 626 }
622 627
623 // When in BeginImplFrame deadline we should always draw for SetNeedsRedraw 628 // When in BeginImplFrame deadline we should always draw for SetNeedsRedraw
624 // except if we're ready to commit, in which case we expect a commit first. 629 // except if we're ready to commit, in which case we expect a commit first.
625 for (size_t i = 0; i < num_commit_states; ++i) { 630 for (size_t i = 0; i < num_commit_states; ++i) {
626 StateMachine state(default_scheduler_settings); 631 StateMachine state(default_scheduler_settings);
627 state.SetCanStart(); 632 state.SetCanStart();
628 state.UpdateState(state.NextAction()); 633 state.UpdateState(state.NextAction());
629 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 634 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
630 state.SetCanDraw(true); 635 state.SetCanDraw(true);
631 state.SetCommitState(all_commit_states[i]); 636 state.SetCommitState(all_commit_states[i]);
632 state.SetBeginImplFrameState( 637 state.SetBeginImplFrameState(
633 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE); 638 SchedulerStateMachine::BeginImplFrameState::INSIDE_DEADLINE);
634 639
635 state.SetNeedsRedraw(true); 640 state.SetNeedsRedraw(true);
636 state.SetVisible(true); 641 state.SetVisible(true);
637 642
638 SchedulerStateMachine::Action expected_action; 643 SchedulerStateMachine::Action expected_action;
639 if (all_commit_states[i] == 644 if (all_commit_states[i] ==
640 SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT) { 645 SchedulerStateMachine::CommitState::READY_TO_COMMIT) {
641 expected_action = SchedulerStateMachine::ACTION_COMMIT; 646 expected_action = SchedulerStateMachine::Action::COMMIT;
642 } else { 647 } else {
643 expected_action = SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE; 648 expected_action =
644 EXPECT_ACTION(SchedulerStateMachine::ACTION_ANIMATE); 649 SchedulerStateMachine::Action::DRAW_AND_SWAP_IF_POSSIBLE;
650 EXPECT_ACTION(SchedulerStateMachine::Action::ANIMATE);
645 state.UpdateState(state.NextAction()); 651 state.UpdateState(state.NextAction());
646 } 652 }
647 653
648 // Case 1: needs_commit=false. 654 // Case 1: needs_commit=false.
649 EXPECT_ACTION(expected_action); 655 EXPECT_ACTION(expected_action);
650 656
651 // Case 2: needs_commit=true. 657 // Case 2: needs_commit=true.
652 state.SetNeedsCommit(); 658 state.SetNeedsCommit();
653 EXPECT_ACTION(expected_action); 659 EXPECT_ACTION(expected_action);
654 } 660 }
655 } 661 }
656 662
657 TEST(SchedulerStateMachineTest, TestNoCommitStatesRedrawWhenInvisible) { 663 TEST(SchedulerStateMachineTest, TestNoCommitStatesRedrawWhenInvisible) {
658 SchedulerSettings default_scheduler_settings; 664 SchedulerSettings default_scheduler_settings;
659 665
660 size_t num_commit_states = 666 size_t num_commit_states =
661 sizeof(all_commit_states) / sizeof(SchedulerStateMachine::CommitState); 667 sizeof(all_commit_states) / sizeof(SchedulerStateMachine::CommitState);
662 for (size_t i = 0; i < num_commit_states; ++i) { 668 for (size_t i = 0; i < num_commit_states; ++i) {
663 // There shouldn't be any drawing regardless of BeginImplFrame. 669 // There shouldn't be any drawing regardless of BeginImplFrame.
664 for (size_t j = 0; j < 2; ++j) { 670 for (size_t j = 0; j < 2; ++j) {
665 StateMachine state(default_scheduler_settings); 671 StateMachine state(default_scheduler_settings);
666 state.SetCanStart(); 672 state.SetCanStart();
667 state.UpdateState(state.NextAction()); 673 state.UpdateState(state.NextAction());
668 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 674 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
669 state.SetCommitState(all_commit_states[i]); 675 state.SetCommitState(all_commit_states[i]);
670 state.SetVisible(false); 676 state.SetVisible(false);
671 state.SetNeedsRedraw(true); 677 state.SetNeedsRedraw(true);
672 if (j == 1) { 678 if (j == 1) {
673 state.SetBeginImplFrameState( 679 state.SetBeginImplFrameState(
674 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE); 680 SchedulerStateMachine::BeginImplFrameState::INSIDE_DEADLINE);
675 } 681 }
676 682
677 // Case 1: needs_commit=false. 683 // Case 1: needs_commit=false.
678 EXPECT_NE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE, 684 EXPECT_NE(SchedulerStateMachine::Action::DRAW_AND_SWAP_IF_POSSIBLE,
679 state.NextAction()); 685 state.NextAction());
680 686
681 // Case 2: needs_commit=true. 687 // Case 2: needs_commit=true.
682 state.SetNeedsCommit(); 688 state.SetNeedsCommit();
683 EXPECT_NE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE, 689 EXPECT_NE(SchedulerStateMachine::Action::DRAW_AND_SWAP_IF_POSSIBLE,
684 state.NextAction()) 690 state.NextAction())
685 << state.AsValue()->ToString(); 691 << state.AsValue()->ToString();
686 } 692 }
687 } 693 }
688 } 694 }
689 695
690 TEST(SchedulerStateMachineTest, TestCanRedraw_StopsDraw) { 696 TEST(SchedulerStateMachineTest, TestCanRedraw_StopsDraw) {
691 SchedulerSettings default_scheduler_settings; 697 SchedulerSettings default_scheduler_settings;
692 698
693 size_t num_commit_states = 699 size_t num_commit_states =
694 sizeof(all_commit_states) / sizeof(SchedulerStateMachine::CommitState); 700 sizeof(all_commit_states) / sizeof(SchedulerStateMachine::CommitState);
695 for (size_t i = 0; i < num_commit_states; ++i) { 701 for (size_t i = 0; i < num_commit_states; ++i) {
696 // There shouldn't be any drawing regardless of BeginImplFrame. 702 // There shouldn't be any drawing regardless of BeginImplFrame.
697 for (size_t j = 0; j < 2; ++j) { 703 for (size_t j = 0; j < 2; ++j) {
698 StateMachine state(default_scheduler_settings); 704 StateMachine state(default_scheduler_settings);
699 state.SetCanStart(); 705 state.SetCanStart();
700 state.UpdateState(state.NextAction()); 706 state.UpdateState(state.NextAction());
701 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 707 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
702 state.SetCommitState(all_commit_states[i]); 708 state.SetCommitState(all_commit_states[i]);
703 state.SetVisible(false); 709 state.SetVisible(false);
704 state.SetNeedsRedraw(true); 710 state.SetNeedsRedraw(true);
705 if (j == 1) 711 if (j == 1)
706 state.OnBeginImplFrame( 712 state.OnBeginImplFrame(
707 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 713 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE));
708 714
709 state.SetCanDraw(false); 715 state.SetCanDraw(false);
710 EXPECT_NE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE, 716 EXPECT_NE(SchedulerStateMachine::Action::DRAW_AND_SWAP_IF_POSSIBLE,
711 state.NextAction()); 717 state.NextAction());
712 } 718 }
713 } 719 }
714 } 720 }
715 721
716 TEST(SchedulerStateMachineTest, 722 TEST(SchedulerStateMachineTest,
717 TestCanRedrawWithWaitingForFirstDrawMakesProgress) { 723 TestCanRedrawWithWaitingForFirstDrawMakesProgress) {
718 SchedulerSettings default_scheduler_settings; 724 SchedulerSettings default_scheduler_settings;
719 StateMachine state(default_scheduler_settings); 725 StateMachine state(default_scheduler_settings);
720 state.SetCanStart(); 726 state.SetCanStart();
721 state.UpdateState(state.NextAction()); 727 state.UpdateState(state.NextAction());
722 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 728 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
723 729
724 state.SetActiveTreeNeedsFirstDraw(true); 730 state.SetActiveTreeNeedsFirstDraw(true);
725 state.SetNeedsCommit(); 731 state.SetNeedsCommit();
726 state.SetNeedsRedraw(true); 732 state.SetNeedsRedraw(true);
727 state.SetVisible(true); 733 state.SetVisible(true);
728 state.SetCanDraw(false); 734 state.SetCanDraw(false);
729 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 735 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE));
730 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 736 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::ANIMATE);
731 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT);
732 EXPECT_ACTION_UPDATE_STATE( 737 EXPECT_ACTION_UPDATE_STATE(
733 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 738 SchedulerStateMachine::Action::DRAW_AND_SWAP_ABORT);
734 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 739 EXPECT_ACTION_UPDATE_STATE(
740 SchedulerStateMachine::Action::SEND_BEGIN_MAIN_FRAME);
741 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
735 state.NotifyBeginMainFrameStarted(); 742 state.NotifyBeginMainFrameStarted();
736 state.NotifyReadyToCommit(); 743 state.NotifyReadyToCommit();
737 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 744 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::COMMIT);
738 state.OnBeginImplFrameDeadline(); 745 state.OnBeginImplFrameDeadline();
739 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 746 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::ANIMATE);
740 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT); 747 EXPECT_ACTION_UPDATE_STATE(
741 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 748 SchedulerStateMachine::Action::DRAW_AND_SWAP_ABORT);
749 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
742 } 750 }
743 751
744 TEST(SchedulerStateMachineTest, TestSetNeedsCommitIsNotLost) { 752 TEST(SchedulerStateMachineTest, TestSetNeedsCommitIsNotLost) {
745 SchedulerSettings scheduler_settings; 753 SchedulerSettings scheduler_settings;
746 StateMachine state(scheduler_settings); 754 StateMachine state(scheduler_settings);
747 state.SetCanStart(); 755 state.SetCanStart();
748 state.UpdateState(state.NextAction()); 756 state.UpdateState(state.NextAction());
749 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 757 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
750 state.SetNeedsCommit(); 758 state.SetNeedsCommit();
751 state.SetVisible(true); 759 state.SetVisible(true);
752 state.SetCanDraw(true); 760 state.SetCanDraw(true);
753 761
754 EXPECT_TRUE(state.BeginFrameNeeded()); 762 EXPECT_TRUE(state.BeginFrameNeeded());
755 763
756 // Begin the frame. 764 // Begin the frame.
757 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 765 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE));
758 EXPECT_ACTION_UPDATE_STATE( 766 EXPECT_ACTION_UPDATE_STATE(
759 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 767 SchedulerStateMachine::Action::SEND_BEGIN_MAIN_FRAME);
760 EXPECT_COMMIT_STATE( 768 EXPECT_COMMIT_STATE(
761 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT); 769 SchedulerStateMachine::CommitState::BEGIN_MAIN_FRAME_SENT);
762 770
763 // Now, while the frame is in progress, set another commit. 771 // Now, while the frame is in progress, set another commit.
764 state.SetNeedsCommit(); 772 state.SetNeedsCommit();
765 EXPECT_TRUE(state.NeedsCommit()); 773 EXPECT_TRUE(state.NeedsCommit());
766 774
767 // Let the frame finish. 775 // Let the frame finish.
768 state.NotifyBeginMainFrameStarted(); 776 state.NotifyBeginMainFrameStarted();
769 state.NotifyReadyToCommit(); 777 state.NotifyReadyToCommit();
770 EXPECT_COMMIT_STATE(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT); 778 EXPECT_COMMIT_STATE(SchedulerStateMachine::CommitState::READY_TO_COMMIT);
771 779
772 // Expect to commit regardless of BeginImplFrame state. 780 // Expect to commit regardless of BeginImplFrame state.
773 EXPECT_IMPL_FRAME_STATE( 781 EXPECT_IMPL_FRAME_STATE(
774 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING); 782 SchedulerStateMachine::BeginImplFrameState::BEGIN_FRAME_STARTING);
775 EXPECT_ACTION(SchedulerStateMachine::ACTION_COMMIT); 783 EXPECT_ACTION(SchedulerStateMachine::Action::COMMIT);
776 784
777 state.OnBeginImplFrameDeadlinePending(); 785 state.OnBeginImplFrameDeadlinePending();
778 EXPECT_IMPL_FRAME_STATE( 786 EXPECT_IMPL_FRAME_STATE(
779 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME); 787 SchedulerStateMachine::BeginImplFrameState::INSIDE_BEGIN_FRAME);
780 EXPECT_ACTION(SchedulerStateMachine::ACTION_COMMIT); 788 EXPECT_ACTION(SchedulerStateMachine::Action::COMMIT);
781 789
782 state.OnBeginImplFrameDeadline(); 790 state.OnBeginImplFrameDeadline();
783 EXPECT_IMPL_FRAME_STATE( 791 EXPECT_IMPL_FRAME_STATE(
784 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE); 792 SchedulerStateMachine::BeginImplFrameState::INSIDE_DEADLINE);
785 EXPECT_ACTION(SchedulerStateMachine::ACTION_COMMIT); 793 EXPECT_ACTION(SchedulerStateMachine::Action::COMMIT);
786 794
787 state.OnBeginImplFrameIdle(); 795 state.OnBeginImplFrameIdle();
788 EXPECT_IMPL_FRAME_STATE(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE); 796 EXPECT_IMPL_FRAME_STATE(SchedulerStateMachine::BeginImplFrameState::IDLE);
789 EXPECT_ACTION(SchedulerStateMachine::ACTION_COMMIT); 797 EXPECT_ACTION(SchedulerStateMachine::Action::COMMIT);
790 798
791 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 799 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE));
792 EXPECT_IMPL_FRAME_STATE( 800 EXPECT_IMPL_FRAME_STATE(
793 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING); 801 SchedulerStateMachine::BeginImplFrameState::BEGIN_FRAME_STARTING);
794 EXPECT_ACTION(SchedulerStateMachine::ACTION_COMMIT); 802 EXPECT_ACTION(SchedulerStateMachine::Action::COMMIT);
795 803
796 // Finish the commit, then make sure we start the next commit immediately 804 // Finish the commit, then make sure we start the next commit immediately
797 // and draw on the next BeginImplFrame. 805 // and draw on the next BeginImplFrame.
798 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 806 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::COMMIT);
799 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 807 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::ANIMATE);
800 EXPECT_ACTION_UPDATE_STATE( 808 EXPECT_ACTION_UPDATE_STATE(
801 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 809 SchedulerStateMachine::Action::SEND_BEGIN_MAIN_FRAME);
802 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 810 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
803 811
804 state.OnBeginImplFrameDeadline(); 812 state.OnBeginImplFrameDeadline();
805 813
806 EXPECT_TRUE(state.active_tree_needs_first_draw()); 814 EXPECT_TRUE(state.active_tree_needs_first_draw());
807 EXPECT_ACTION_UPDATE_STATE( 815 EXPECT_ACTION_UPDATE_STATE(
808 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 816 SchedulerStateMachine::Action::DRAW_AND_SWAP_IF_POSSIBLE);
809 state.DidSwapBuffers(); 817 state.DidSwapBuffers();
810 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); 818 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS);
811 state.DidSwapBuffersComplete(); 819 state.DidSwapBuffersComplete();
812 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 820 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
813 } 821 }
814 822
815 TEST(SchedulerStateMachineTest, TestFullCycle) { 823 TEST(SchedulerStateMachineTest, TestFullCycle) {
816 SchedulerSettings default_scheduler_settings; 824 SchedulerSettings default_scheduler_settings;
817 StateMachine state(default_scheduler_settings); 825 StateMachine state(default_scheduler_settings);
818 state.SetCanStart(); 826 state.SetCanStart();
819 state.UpdateState(state.NextAction()); 827 state.UpdateState(state.NextAction());
820 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 828 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
821 state.SetVisible(true); 829 state.SetVisible(true);
822 state.SetCanDraw(true); 830 state.SetCanDraw(true);
823 831
824 // Start clean and set commit. 832 // Start clean and set commit.
825 state.SetNeedsCommit(); 833 state.SetNeedsCommit();
826 834
827 // Begin the frame. 835 // Begin the frame.
828 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 836 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE));
829 EXPECT_ACTION_UPDATE_STATE( 837 EXPECT_ACTION_UPDATE_STATE(
830 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 838 SchedulerStateMachine::Action::SEND_BEGIN_MAIN_FRAME);
831 EXPECT_COMMIT_STATE( 839 EXPECT_COMMIT_STATE(
832 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT); 840 SchedulerStateMachine::CommitState::BEGIN_MAIN_FRAME_SENT);
833 EXPECT_FALSE(state.NeedsCommit()); 841 EXPECT_FALSE(state.NeedsCommit());
834 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 842 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
835 843
836 // Tell the scheduler the frame finished. 844 // Tell the scheduler the frame finished.
837 state.NotifyBeginMainFrameStarted(); 845 state.NotifyBeginMainFrameStarted();
838 state.NotifyReadyToCommit(); 846 state.NotifyReadyToCommit();
839 EXPECT_COMMIT_STATE(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT); 847 EXPECT_COMMIT_STATE(SchedulerStateMachine::CommitState::READY_TO_COMMIT);
840 848
841 // Commit. 849 // Commit.
842 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 850 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::COMMIT);
843 EXPECT_TRUE(state.active_tree_needs_first_draw()); 851 EXPECT_TRUE(state.active_tree_needs_first_draw());
844 EXPECT_TRUE(state.needs_redraw()); 852 EXPECT_TRUE(state.needs_redraw());
845 853
846 // Expect to do nothing until BeginImplFrame deadline 854 // Expect to do nothing until BeginImplFrame deadline
847 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 855 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
848 856
849 // At BeginImplFrame deadline, draw. 857 // At BeginImplFrame deadline, draw.
850 state.OnBeginImplFrameDeadline(); 858 state.OnBeginImplFrameDeadline();
851 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 859 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::ANIMATE);
852 EXPECT_ACTION_UPDATE_STATE( 860 EXPECT_ACTION_UPDATE_STATE(
853 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 861 SchedulerStateMachine::Action::DRAW_AND_SWAP_IF_POSSIBLE);
854 state.DidSwapBuffers(); 862 state.DidSwapBuffers();
855 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); 863 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS);
856 state.DidSwapBuffersComplete(); 864 state.DidSwapBuffersComplete();
857 865
858 // Should be synchronized, no draw needed, no action needed. 866 // Should be synchronized, no draw needed, no action needed.
859 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 867 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
860 EXPECT_COMMIT_STATE(SchedulerStateMachine::COMMIT_STATE_IDLE); 868 EXPECT_COMMIT_STATE(SchedulerStateMachine::CommitState::IDLE);
861 EXPECT_FALSE(state.needs_redraw()); 869 EXPECT_FALSE(state.needs_redraw());
862 } 870 }
863 871
864 TEST(SchedulerStateMachineTest, TestFullCycleWithMainThreadLowLatencyMode) { 872 TEST(SchedulerStateMachineTest, TestFullCycleWithMainThreadLowLatencyMode) {
865 SchedulerSettings scheduler_settings; 873 SchedulerSettings scheduler_settings;
866 scheduler_settings.main_thread_should_always_be_low_latency = true; 874 scheduler_settings.main_thread_should_always_be_low_latency = true;
867 StateMachine state(scheduler_settings); 875 StateMachine state(scheduler_settings);
868 state.SetCanStart(); 876 state.SetCanStart();
869 state.UpdateState(state.NextAction()); 877 state.UpdateState(state.NextAction());
870 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 878 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
871 state.SetVisible(true); 879 state.SetVisible(true);
872 state.SetCanDraw(true); 880 state.SetCanDraw(true);
873 881
874 // Start clean and set commit. 882 // Start clean and set commit.
875 state.SetNeedsCommit(); 883 state.SetNeedsCommit();
876 884
877 // Begin the frame. 885 // Begin the frame.
878 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 886 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE));
879 EXPECT_ACTION_UPDATE_STATE( 887 EXPECT_ACTION_UPDATE_STATE(
880 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 888 SchedulerStateMachine::Action::SEND_BEGIN_MAIN_FRAME);
881 EXPECT_COMMIT_STATE( 889 EXPECT_COMMIT_STATE(
882 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT); 890 SchedulerStateMachine::CommitState::BEGIN_MAIN_FRAME_SENT);
883 EXPECT_FALSE(state.NeedsCommit()); 891 EXPECT_FALSE(state.NeedsCommit());
884 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 892 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
885 893
886 // Tell the scheduler the frame finished. 894 // Tell the scheduler the frame finished.
887 state.NotifyBeginMainFrameStarted(); 895 state.NotifyBeginMainFrameStarted();
888 state.NotifyReadyToCommit(); 896 state.NotifyReadyToCommit();
889 EXPECT_COMMIT_STATE(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT); 897 EXPECT_COMMIT_STATE(SchedulerStateMachine::CommitState::READY_TO_COMMIT);
890 898
891 // Commit. 899 // Commit.
892 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 900 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::COMMIT);
893 EXPECT_TRUE(state.active_tree_needs_first_draw()); 901 EXPECT_TRUE(state.active_tree_needs_first_draw());
894 EXPECT_TRUE(state.needs_redraw()); 902 EXPECT_TRUE(state.needs_redraw());
895 903
896 // Now commit should wait for draw. 904 // Now commit should wait for draw.
897 EXPECT_COMMIT_STATE(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_DRAW); 905 EXPECT_COMMIT_STATE(SchedulerStateMachine::CommitState::WAITING_FOR_DRAW);
898 906
899 // Swap throttled. Do not draw. 907 // Swap throttled. Do not draw.
900 state.DidSwapBuffers(); 908 state.DidSwapBuffers();
901 state.OnBeginImplFrameDeadline(); 909 state.OnBeginImplFrameDeadline();
902 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 910 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::ANIMATE);
903 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 911 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
904 state.DidSwapBuffersComplete(); 912 state.DidSwapBuffersComplete();
905 913
906 // Haven't draw since last commit, do not begin new main frame. 914 // Haven't draw since last commit, do not begin new main frame.
907 state.SetNeedsCommit(); 915 state.SetNeedsCommit();
908 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 916 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE));
909 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 917 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::ANIMATE);
910 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 918 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
911 919
912 // At BeginImplFrame deadline, draw. 920 // At BeginImplFrame deadline, draw.
913 state.OnBeginImplFrameDeadline(); 921 state.OnBeginImplFrameDeadline();
914 EXPECT_ACTION_UPDATE_STATE( 922 EXPECT_ACTION_UPDATE_STATE(
915 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 923 SchedulerStateMachine::Action::DRAW_AND_SWAP_IF_POSSIBLE);
916 state.DidSwapBuffers(); 924 state.DidSwapBuffers();
917 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); 925 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS);
918 state.DidSwapBuffersComplete(); 926 state.DidSwapBuffersComplete();
919 927
920 // Now will be able to start main frame. 928 // Now will be able to start main frame.
921 EXPECT_COMMIT_STATE(SchedulerStateMachine::COMMIT_STATE_IDLE); 929 EXPECT_COMMIT_STATE(SchedulerStateMachine::CommitState::IDLE);
922 EXPECT_FALSE(state.needs_redraw()); 930 EXPECT_FALSE(state.needs_redraw());
923 EXPECT_ACTION_UPDATE_STATE( 931 EXPECT_ACTION_UPDATE_STATE(
924 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 932 SchedulerStateMachine::Action::SEND_BEGIN_MAIN_FRAME);
925 } 933 }
926 934
927 TEST(SchedulerStateMachineTest, 935 TEST(SchedulerStateMachineTest,
928 TestFullCycleWithMainThreadLowLatencyMode_ImplSidePaint) { 936 TestFullCycleWithMainThreadLowLatencyMode_ImplSidePaint) {
929 SchedulerSettings scheduler_settings; 937 SchedulerSettings scheduler_settings;
930 scheduler_settings.main_thread_should_always_be_low_latency = true; 938 scheduler_settings.main_thread_should_always_be_low_latency = true;
931 scheduler_settings.impl_side_painting = true; 939 scheduler_settings.impl_side_painting = true;
932 StateMachine state(scheduler_settings); 940 StateMachine state(scheduler_settings);
933 state.SetCanStart(); 941 state.SetCanStart();
934 state.UpdateState(state.NextAction()); 942 state.UpdateState(state.NextAction());
935 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 943 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
936 state.SetVisible(true); 944 state.SetVisible(true);
937 state.SetCanDraw(true); 945 state.SetCanDraw(true);
938 946
939 // Start clean and set commit. 947 // Start clean and set commit.
940 state.SetNeedsCommit(); 948 state.SetNeedsCommit();
941 949
942 // Begin the frame. 950 // Begin the frame.
943 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 951 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE));
944 EXPECT_ACTION_UPDATE_STATE( 952 EXPECT_ACTION_UPDATE_STATE(
945 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 953 SchedulerStateMachine::Action::SEND_BEGIN_MAIN_FRAME);
946 EXPECT_COMMIT_STATE( 954 EXPECT_COMMIT_STATE(
947 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT); 955 SchedulerStateMachine::CommitState::BEGIN_MAIN_FRAME_SENT);
948 EXPECT_FALSE(state.NeedsCommit()); 956 EXPECT_FALSE(state.NeedsCommit());
949 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 957 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
950 958
951 // Tell the scheduler the frame finished. 959 // Tell the scheduler the frame finished.
952 state.NotifyBeginMainFrameStarted(); 960 state.NotifyBeginMainFrameStarted();
953 state.NotifyReadyToCommit(); 961 state.NotifyReadyToCommit();
954 EXPECT_COMMIT_STATE(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT); 962 EXPECT_COMMIT_STATE(SchedulerStateMachine::CommitState::READY_TO_COMMIT);
955 963
956 // Commit. 964 // Commit.
957 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 965 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::COMMIT);
958 966
959 // Now commit should wait for activation. 967 // Now commit should wait for activation.
960 EXPECT_COMMIT_STATE( 968 EXPECT_COMMIT_STATE(
961 SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_ACTIVATION); 969 SchedulerStateMachine::CommitState::WAITING_FOR_ACTIVATION);
962 970
963 // No activation yet, so this commit is not drawn yet. Force to draw this 971 // No activation yet, so this commit is not drawn yet. Force to draw this
964 // frame, and still block BeginMainFrame. 972 // frame, and still block BeginMainFrame.
965 state.SetNeedsRedraw(true); 973 state.SetNeedsRedraw(true);
966 state.SetNeedsCommit(); 974 state.SetNeedsCommit();
967 state.OnBeginImplFrameDeadline(); 975 state.OnBeginImplFrameDeadline();
968 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 976 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::ANIMATE);
969 EXPECT_ACTION_UPDATE_STATE( 977 EXPECT_ACTION_UPDATE_STATE(
970 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 978 SchedulerStateMachine::Action::DRAW_AND_SWAP_IF_POSSIBLE);
971 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 979 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
972 980
973 // Cannot BeginMainFrame yet since last commit is not yet activated and drawn. 981 // Cannot BeginMainFrame yet since last commit is not yet activated and drawn.
974 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 982 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE));
975 EXPECT_COMMIT_STATE( 983 EXPECT_COMMIT_STATE(
976 SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_ACTIVATION); 984 SchedulerStateMachine::CommitState::WAITING_FOR_ACTIVATION);
977 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 985 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
978 986
979 // Now activate sync tree. 987 // Now activate sync tree.
980 state.NotifyReadyToActivate(); 988 state.NotifyReadyToActivate();
981 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); 989 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::ACTIVATE_SYNC_TREE);
982 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 990 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
983 EXPECT_TRUE(state.active_tree_needs_first_draw()); 991 EXPECT_TRUE(state.active_tree_needs_first_draw());
984 EXPECT_TRUE(state.needs_redraw()); 992 EXPECT_TRUE(state.needs_redraw());
985 EXPECT_COMMIT_STATE(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_DRAW); 993 EXPECT_COMMIT_STATE(SchedulerStateMachine::CommitState::WAITING_FOR_DRAW);
986 994
987 // Swap throttled. Do not draw. 995 // Swap throttled. Do not draw.
988 state.DidSwapBuffers(); 996 state.DidSwapBuffers();
989 state.OnBeginImplFrameDeadline(); 997 state.OnBeginImplFrameDeadline();
990 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 998 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::ANIMATE);
991 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 999 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
992 state.DidSwapBuffersComplete(); 1000 state.DidSwapBuffersComplete();
993 1001
994 // Haven't draw since last commit, do not begin new main frame. 1002 // Haven't draw since last commit, do not begin new main frame.
995 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 1003 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE));
996 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 1004 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::ANIMATE);
997 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1005 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
998 1006
999 // At BeginImplFrame deadline, draw. This draws unblocks BeginMainFrame. 1007 // At BeginImplFrame deadline, draw. This draws unblocks BeginMainFrame.
1000 state.OnBeginImplFrameDeadline(); 1008 state.OnBeginImplFrameDeadline();
1001 EXPECT_ACTION_UPDATE_STATE( 1009 EXPECT_ACTION_UPDATE_STATE(
1002 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 1010 SchedulerStateMachine::Action::DRAW_AND_SWAP_IF_POSSIBLE);
1003 state.DidSwapBuffers(); 1011 state.DidSwapBuffers();
1004 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); 1012 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS);
1005 state.DidSwapBuffersComplete(); 1013 state.DidSwapBuffersComplete();
1006 1014
1007 // Now will be able to start main frame. 1015 // Now will be able to start main frame.
1008 EXPECT_COMMIT_STATE(SchedulerStateMachine::COMMIT_STATE_IDLE); 1016 EXPECT_COMMIT_STATE(SchedulerStateMachine::CommitState::IDLE);
1009 EXPECT_FALSE(state.needs_redraw()); 1017 EXPECT_FALSE(state.needs_redraw());
1010 EXPECT_ACTION_UPDATE_STATE( 1018 EXPECT_ACTION_UPDATE_STATE(
1011 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1019 SchedulerStateMachine::Action::SEND_BEGIN_MAIN_FRAME);
1012 } 1020 }
1013 1021
1014 TEST(SchedulerStateMachineTest, TestFullCycleWithCommitRequestInbetween) { 1022 TEST(SchedulerStateMachineTest, TestFullCycleWithCommitRequestInbetween) {
1015 SchedulerSettings default_scheduler_settings; 1023 SchedulerSettings default_scheduler_settings;
1016 StateMachine state(default_scheduler_settings); 1024 StateMachine state(default_scheduler_settings);
1017 state.SetCanStart(); 1025 state.SetCanStart();
1018 state.UpdateState(state.NextAction()); 1026 state.UpdateState(state.NextAction());
1019 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 1027 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
1020 state.SetVisible(true); 1028 state.SetVisible(true);
1021 state.SetCanDraw(true); 1029 state.SetCanDraw(true);
1022 1030
1023 // Start clean and set commit. 1031 // Start clean and set commit.
1024 state.SetNeedsCommit(); 1032 state.SetNeedsCommit();
1025 1033
1026 // Begin the frame. 1034 // Begin the frame.
1027 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 1035 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE));
1028 EXPECT_ACTION_UPDATE_STATE( 1036 EXPECT_ACTION_UPDATE_STATE(
1029 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1037 SchedulerStateMachine::Action::SEND_BEGIN_MAIN_FRAME);
1030 EXPECT_COMMIT_STATE( 1038 EXPECT_COMMIT_STATE(
1031 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT); 1039 SchedulerStateMachine::CommitState::BEGIN_MAIN_FRAME_SENT);
1032 EXPECT_FALSE(state.NeedsCommit()); 1040 EXPECT_FALSE(state.NeedsCommit());
1033 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1041 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
1034 1042
1035 // Request another commit while the commit is in flight. 1043 // Request another commit while the commit is in flight.
1036 state.SetNeedsCommit(); 1044 state.SetNeedsCommit();
1037 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1045 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
1038 1046
1039 // Tell the scheduler the frame finished. 1047 // Tell the scheduler the frame finished.
1040 state.NotifyBeginMainFrameStarted(); 1048 state.NotifyBeginMainFrameStarted();
1041 state.NotifyReadyToCommit(); 1049 state.NotifyReadyToCommit();
1042 EXPECT_COMMIT_STATE(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT); 1050 EXPECT_COMMIT_STATE(SchedulerStateMachine::CommitState::READY_TO_COMMIT);
1043 1051
1044 // First commit. 1052 // First commit.
1045 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 1053 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::COMMIT);
1046 EXPECT_TRUE(state.active_tree_needs_first_draw()); 1054 EXPECT_TRUE(state.active_tree_needs_first_draw());
1047 EXPECT_TRUE(state.needs_redraw()); 1055 EXPECT_TRUE(state.needs_redraw());
1048 1056
1049 // Expect to do nothing until BeginImplFrame deadline. 1057 // Expect to do nothing until BeginImplFrame deadline.
1050 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1058 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
1051 1059
1052 // At BeginImplFrame deadline, draw. 1060 // At BeginImplFrame deadline, draw.
1053 state.OnBeginImplFrameDeadline(); 1061 state.OnBeginImplFrameDeadline();
1054 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 1062 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::ANIMATE);
1055 EXPECT_ACTION_UPDATE_STATE( 1063 EXPECT_ACTION_UPDATE_STATE(
1056 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 1064 SchedulerStateMachine::Action::DRAW_AND_SWAP_IF_POSSIBLE);
1057 state.DidSwapBuffers(); 1065 state.DidSwapBuffers();
1058 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); 1066 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS);
1059 state.DidSwapBuffersComplete(); 1067 state.DidSwapBuffersComplete();
1060 1068
1061 // Should be synchronized, no draw needed, no action needed. 1069 // Should be synchronized, no draw needed, no action needed.
1062 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1070 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
1063 EXPECT_COMMIT_STATE(SchedulerStateMachine::COMMIT_STATE_IDLE); 1071 EXPECT_COMMIT_STATE(SchedulerStateMachine::CommitState::IDLE);
1064 EXPECT_FALSE(state.needs_redraw()); 1072 EXPECT_FALSE(state.needs_redraw());
1065 1073
1066 // Next BeginImplFrame should initiate second commit. 1074 // Next BeginImplFrame should initiate second commit.
1067 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 1075 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE));
1068 EXPECT_ACTION_UPDATE_STATE( 1076 EXPECT_ACTION_UPDATE_STATE(
1069 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1077 SchedulerStateMachine::Action::SEND_BEGIN_MAIN_FRAME);
1070 } 1078 }
1071 1079
1072 TEST(SchedulerStateMachineTest, TestRequestCommitInvisible) { 1080 TEST(SchedulerStateMachineTest, TestRequestCommitInvisible) {
1073 SchedulerSettings default_scheduler_settings; 1081 SchedulerSettings default_scheduler_settings;
1074 StateMachine state(default_scheduler_settings); 1082 StateMachine state(default_scheduler_settings);
1075 state.SetCanStart(); 1083 state.SetCanStart();
1076 state.UpdateState(state.NextAction()); 1084 state.UpdateState(state.NextAction());
1077 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 1085 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
1078 state.SetNeedsCommit(); 1086 state.SetNeedsCommit();
1079 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1087 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
1080 } 1088 }
1081 1089
1082 // See ThreadProxy::BeginMainFrame "EarlyOut_NotVisible" / 1090 // See ThreadProxy::BeginMainFrame "EarlyOut_NotVisible" /
1083 // "EarlyOut_OutputSurfaceLost" cases. 1091 // "EarlyOut_OutputSurfaceLost" cases.
1084 TEST(SchedulerStateMachineTest, TestAbortBeginMainFrameBecauseInvisible) { 1092 TEST(SchedulerStateMachineTest, TestAbortBeginMainFrameBecauseInvisible) {
1085 SchedulerSettings default_scheduler_settings; 1093 SchedulerSettings default_scheduler_settings;
1086 StateMachine state(default_scheduler_settings); 1094 StateMachine state(default_scheduler_settings);
1087 state.SetCanStart(); 1095 state.SetCanStart();
1088 state.UpdateState(state.NextAction()); 1096 state.UpdateState(state.NextAction());
1089 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 1097 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
1090 state.SetVisible(true); 1098 state.SetVisible(true);
1091 state.SetCanDraw(true); 1099 state.SetCanDraw(true);
1092 1100
1093 // Start clean and set commit. 1101 // Start clean and set commit.
1094 state.SetNeedsCommit(); 1102 state.SetNeedsCommit();
1095 1103
1096 // Begin the frame while visible. 1104 // Begin the frame while visible.
1097 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 1105 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE));
1098 EXPECT_ACTION_UPDATE_STATE( 1106 EXPECT_ACTION_UPDATE_STATE(
1099 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1107 SchedulerStateMachine::Action::SEND_BEGIN_MAIN_FRAME);
1100 EXPECT_COMMIT_STATE( 1108 EXPECT_COMMIT_STATE(
1101 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT); 1109 SchedulerStateMachine::CommitState::BEGIN_MAIN_FRAME_SENT);
1102 EXPECT_FALSE(state.NeedsCommit()); 1110 EXPECT_FALSE(state.NeedsCommit());
1103 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1111 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
1104 1112
1105 // Become invisible and abort BeginMainFrame. 1113 // Become invisible and abort BeginMainFrame.
1106 state.SetVisible(false); 1114 state.SetVisible(false);
1107 state.BeginMainFrameAborted(CommitEarlyOutReason::ABORTED_NOT_VISIBLE); 1115 state.BeginMainFrameAborted(CommitEarlyOutReason::ABORTED_NOT_VISIBLE);
1108 1116
1109 // NeedsCommit should now be true again because we never actually did a 1117 // NeedsCommit should now be true again because we never actually did a
1110 // commit. 1118 // commit.
1111 EXPECT_TRUE(state.NeedsCommit()); 1119 EXPECT_TRUE(state.NeedsCommit());
1112 1120
1113 // We should now be back in the idle state as if we never started the frame. 1121 // We should now be back in the idle state as if we never started the frame.
1114 EXPECT_COMMIT_STATE(SchedulerStateMachine::COMMIT_STATE_IDLE); 1122 EXPECT_COMMIT_STATE(SchedulerStateMachine::CommitState::IDLE);
1115 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1123 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
1116 1124
1117 // We shouldn't do anything on the BeginImplFrame deadline. 1125 // We shouldn't do anything on the BeginImplFrame deadline.
1118 state.OnBeginImplFrameDeadline(); 1126 state.OnBeginImplFrameDeadline();
1119 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1127 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
1120 1128
1121 // Become visible again. 1129 // Become visible again.
1122 state.SetVisible(true); 1130 state.SetVisible(true);
1123 1131
1124 // Although we have aborted on this frame and haven't cancelled the commit 1132 // Although we have aborted on this frame and haven't cancelled the commit
1125 // (i.e. need another), don't send another BeginMainFrame yet. 1133 // (i.e. need another), don't send another BeginMainFrame yet.
1126 EXPECT_COMMIT_STATE(SchedulerStateMachine::COMMIT_STATE_IDLE); 1134 EXPECT_COMMIT_STATE(SchedulerStateMachine::CommitState::IDLE);
1127 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); 1135 EXPECT_ACTION(SchedulerStateMachine::Action::NONE);
1128 EXPECT_TRUE(state.NeedsCommit()); 1136 EXPECT_TRUE(state.NeedsCommit());
1129 1137
1130 // Start a new frame. 1138 // Start a new frame.
1131 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 1139 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE));
1132 EXPECT_ACTION_UPDATE_STATE( 1140 EXPECT_ACTION_UPDATE_STATE(
1133 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1141 SchedulerStateMachine::Action::SEND_BEGIN_MAIN_FRAME);
1134 1142
1135 // We should be starting the commit now. 1143 // We should be starting the commit now.
1136 EXPECT_COMMIT_STATE( 1144 EXPECT_COMMIT_STATE(
1137 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT); 1145 SchedulerStateMachine::CommitState::BEGIN_MAIN_FRAME_SENT);
1138 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1146 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
1139 } 1147 }
1140 1148
1141 // See ThreadProxy::BeginMainFrame "EarlyOut_NoUpdates" case. 1149 // See ThreadProxy::BeginMainFrame "EarlyOut_NoUpdates" case.
1142 TEST(SchedulerStateMachineTest, TestAbortBeginMainFrameBecauseCommitNotNeeded) { 1150 TEST(SchedulerStateMachineTest, TestAbortBeginMainFrameBecauseCommitNotNeeded) {
1143 SchedulerSettings default_scheduler_settings; 1151 SchedulerSettings default_scheduler_settings;
1144 StateMachine state(default_scheduler_settings); 1152 StateMachine state(default_scheduler_settings);
1145 state.SetCanStart(); 1153 state.SetCanStart();
1146 state.UpdateState(state.NextAction()); 1154 state.UpdateState(state.NextAction());
1147 state.DidCreateAndInitializeOutputSurface(); 1155 state.DidCreateAndInitializeOutputSurface();
1148 state.SetVisible(true); 1156 state.SetVisible(true);
1149 state.SetCanDraw(true); 1157 state.SetCanDraw(true);
1150 1158
1151 // Get into a begin frame / commit state. 1159 // Get into a begin frame / commit state.
1152 state.SetNeedsCommit(); 1160 state.SetNeedsCommit();
1153 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 1161 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE));
1154 EXPECT_ACTION_UPDATE_STATE( 1162 EXPECT_ACTION_UPDATE_STATE(
1155 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1163 SchedulerStateMachine::Action::SEND_BEGIN_MAIN_FRAME);
1156 EXPECT_COMMIT_STATE( 1164 EXPECT_COMMIT_STATE(
1157 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT); 1165 SchedulerStateMachine::CommitState::BEGIN_MAIN_FRAME_SENT);
1158 EXPECT_FALSE(state.NeedsCommit()); 1166 EXPECT_FALSE(state.NeedsCommit());
1159 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); 1167 EXPECT_ACTION(SchedulerStateMachine::Action::NONE);
1160 1168
1161 // Abort the commit, true means that the BeginMainFrame was sent but there 1169 // Abort the commit, true means that the BeginMainFrame was sent but there
1162 // was no work to do on the main thread. 1170 // was no work to do on the main thread.
1163 state.BeginMainFrameAborted(CommitEarlyOutReason::FINISHED_NO_UPDATES); 1171 state.BeginMainFrameAborted(CommitEarlyOutReason::FINISHED_NO_UPDATES);
1164 1172
1165 // NeedsCommit should now be false because the commit was actually handled. 1173 // NeedsCommit should now be false because the commit was actually handled.
1166 EXPECT_FALSE(state.NeedsCommit()); 1174 EXPECT_FALSE(state.NeedsCommit());
1167 1175
1168 // Even though the commit was aborted, we still expect to draw the new frame. 1176 // Even though the commit was aborted, we still expect to draw the new frame.
1169 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 1177 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::ANIMATE);
1170 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1178 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
1171 state.OnBeginImplFrameDeadline(); 1179 state.OnBeginImplFrameDeadline();
1172 EXPECT_ACTION_UPDATE_STATE( 1180 EXPECT_ACTION_UPDATE_STATE(
1173 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 1181 SchedulerStateMachine::Action::DRAW_AND_SWAP_IF_POSSIBLE);
1174 state.DidSwapBuffers(); 1182 state.DidSwapBuffers();
1175 state.DidSwapBuffersComplete(); 1183 state.DidSwapBuffersComplete();
1176 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1184 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
1177 1185
1178 // Verify another commit doesn't start on another frame either. 1186 // Verify another commit doesn't start on another frame either.
1179 EXPECT_FALSE(state.NeedsCommit()); 1187 EXPECT_FALSE(state.NeedsCommit());
1180 EXPECT_COMMIT_STATE(SchedulerStateMachine::COMMIT_STATE_IDLE); 1188 EXPECT_COMMIT_STATE(SchedulerStateMachine::CommitState::IDLE);
1181 1189
1182 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 1190 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE));
1183 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1191 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
1184 state.OnBeginImplFrameDeadline(); 1192 state.OnBeginImplFrameDeadline();
1185 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1193 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
1186 1194
1187 // Verify another commit can start if requested, though. 1195 // Verify another commit can start if requested, though.
1188 state.SetNeedsCommit(); 1196 state.SetNeedsCommit();
1189 EXPECT_COMMIT_STATE(SchedulerStateMachine::COMMIT_STATE_IDLE); 1197 EXPECT_COMMIT_STATE(SchedulerStateMachine::CommitState::IDLE);
1190 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 1198 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE));
1191 EXPECT_ACTION(SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1199 EXPECT_ACTION(SchedulerStateMachine::Action::SEND_BEGIN_MAIN_FRAME);
1192 } 1200 }
1193 1201
1194 TEST(SchedulerStateMachineTest, TestFirstContextCreation) { 1202 TEST(SchedulerStateMachineTest, TestFirstContextCreation) {
1195 SchedulerSettings default_scheduler_settings; 1203 SchedulerSettings default_scheduler_settings;
1196 StateMachine state(default_scheduler_settings); 1204 StateMachine state(default_scheduler_settings);
1197 state.SetCanStart(); 1205 state.SetCanStart();
1198 state.SetVisible(true); 1206 state.SetVisible(true);
1199 state.SetCanDraw(true); 1207 state.SetCanDraw(true);
1200 1208
1201 EXPECT_ACTION_UPDATE_STATE( 1209 EXPECT_ACTION_UPDATE_STATE(
1202 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); 1210 SchedulerStateMachine::Action::BEGIN_OUTPUT_SURFACE_CREATION);
1203 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 1211 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
1204 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1212 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
1205 1213
1206 // Check that the first init does not SetNeedsCommit. 1214 // Check that the first init does not SetNeedsCommit.
1207 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 1215 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE));
1208 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1216 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
1209 state.OnBeginImplFrameDeadline(); 1217 state.OnBeginImplFrameDeadline();
1210 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1218 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
1211 1219
1212 // Check that a needs commit initiates a BeginMainFrame. 1220 // Check that a needs commit initiates a BeginMainFrame.
1213 state.SetNeedsCommit(); 1221 state.SetNeedsCommit();
1214 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 1222 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE));
1215 EXPECT_ACTION_UPDATE_STATE( 1223 EXPECT_ACTION_UPDATE_STATE(
1216 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1224 SchedulerStateMachine::Action::SEND_BEGIN_MAIN_FRAME);
1217 } 1225 }
1218 1226
1219 TEST(SchedulerStateMachineTest, TestContextLostWhenCompletelyIdle) { 1227 TEST(SchedulerStateMachineTest, TestContextLostWhenCompletelyIdle) {
1220 SchedulerSettings default_scheduler_settings; 1228 SchedulerSettings default_scheduler_settings;
1221 StateMachine state(default_scheduler_settings); 1229 StateMachine state(default_scheduler_settings);
1222 state.SetCanStart(); 1230 state.SetCanStart();
1223 state.UpdateState(state.NextAction()); 1231 state.UpdateState(state.NextAction());
1224 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 1232 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
1225 1233
1226 state.SetVisible(true); 1234 state.SetVisible(true);
1227 state.SetCanDraw(true); 1235 state.SetCanDraw(true);
1228 1236
1229 EXPECT_NE(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION, 1237 EXPECT_NE(SchedulerStateMachine::Action::BEGIN_OUTPUT_SURFACE_CREATION,
1230 state.NextAction()); 1238 state.NextAction());
1231 state.DidLoseOutputSurface(); 1239 state.DidLoseOutputSurface();
1232 1240
1233 EXPECT_ACTION(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); 1241 EXPECT_ACTION(SchedulerStateMachine::Action::BEGIN_OUTPUT_SURFACE_CREATION);
1234 state.UpdateState(state.NextAction()); 1242 state.UpdateState(state.NextAction());
1235 1243
1236 // Once context recreation begins, nothing should happen. 1244 // Once context recreation begins, nothing should happen.
1237 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1245 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
1238 1246
1239 // Recreate the context. 1247 // Recreate the context.
1240 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 1248 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
1241 1249
1242 // When the context is recreated, we should begin a commit. 1250 // When the context is recreated, we should begin a commit.
1243 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 1251 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE));
1244 EXPECT_ACTION_UPDATE_STATE( 1252 EXPECT_ACTION_UPDATE_STATE(
1245 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1253 SchedulerStateMachine::Action::SEND_BEGIN_MAIN_FRAME);
1246 } 1254 }
1247 1255
1248 TEST(SchedulerStateMachineTest, 1256 TEST(SchedulerStateMachineTest,
1249 TestContextLostWhenIdleAndCommitRequestedWhileRecreating) { 1257 TestContextLostWhenIdleAndCommitRequestedWhileRecreating) {
1250 SchedulerSettings default_scheduler_settings; 1258 SchedulerSettings default_scheduler_settings;
1251 // We use impl side painting because it's the more complicated version. 1259 // We use impl side painting because it's the more complicated version.
1252 default_scheduler_settings.impl_side_painting = true; 1260 default_scheduler_settings.impl_side_painting = true;
1253 StateMachine state(default_scheduler_settings); 1261 StateMachine state(default_scheduler_settings);
1254 state.SetCanStart(); 1262 state.SetCanStart();
1255 state.UpdateState(state.NextAction()); 1263 state.UpdateState(state.NextAction());
1256 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 1264 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
1257 state.SetVisible(true); 1265 state.SetVisible(true);
1258 state.SetCanDraw(true); 1266 state.SetCanDraw(true);
1259 1267
1260 EXPECT_NE(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION, 1268 EXPECT_NE(SchedulerStateMachine::Action::BEGIN_OUTPUT_SURFACE_CREATION,
1261 state.NextAction()); 1269 state.NextAction());
1262 state.DidLoseOutputSurface(); 1270 state.DidLoseOutputSurface();
1263 EXPECT_EQ(state.output_surface_state(), 1271 EXPECT_EQ(state.output_surface_state(),
1264 SchedulerStateMachine::OUTPUT_SURFACE_LOST); 1272 SchedulerStateMachine::OutputSurfaceState::LOST);
1265 1273
1266 EXPECT_ACTION_UPDATE_STATE( 1274 EXPECT_ACTION_UPDATE_STATE(
1267 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); 1275 SchedulerStateMachine::Action::BEGIN_OUTPUT_SURFACE_CREATION);
1268 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1276 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
1269 1277
1270 // Once context recreation begins, nothing should happen. 1278 // Once context recreation begins, nothing should happen.
1271 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 1279 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE));
1272 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1280 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
1273 state.OnBeginImplFrameDeadline(); 1281 state.OnBeginImplFrameDeadline();
1274 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1282 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
1275 1283
1276 // While context is recreating, commits shouldn't begin. 1284 // While context is recreating, commits shouldn't begin.
1277 state.SetNeedsCommit(); 1285 state.SetNeedsCommit();
1278 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 1286 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE));
1279 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1287 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
1280 state.OnBeginImplFrameDeadline(); 1288 state.OnBeginImplFrameDeadline();
1281 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1289 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
1282 1290
1283 // Recreate the context 1291 // Recreate the context
1284 state.DidCreateAndInitializeOutputSurface(); 1292 state.DidCreateAndInitializeOutputSurface();
1285 EXPECT_EQ(state.output_surface_state(), 1293 EXPECT_EQ(
1286 SchedulerStateMachine::OUTPUT_SURFACE_WAITING_FOR_FIRST_COMMIT); 1294 state.output_surface_state(),
1295 SchedulerStateMachine::OutputSurfaceState::WAITING_FOR_FIRST_COMMIT);
1287 EXPECT_FALSE(state.RedrawPending()); 1296 EXPECT_FALSE(state.RedrawPending());
1288 1297
1289 // When the context is recreated, we wait until the next BeginImplFrame 1298 // When the context is recreated, we wait until the next BeginImplFrame
1290 // before starting. 1299 // before starting.
1291 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1300 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
1292 1301
1293 // When the BeginFrame comes in we should begin a commit 1302 // When the BeginFrame comes in we should begin a commit
1294 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 1303 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE));
1295 EXPECT_ACTION_UPDATE_STATE( 1304 EXPECT_ACTION_UPDATE_STATE(
1296 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1305 SchedulerStateMachine::Action::SEND_BEGIN_MAIN_FRAME);
1297 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1306 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
1298 EXPECT_COMMIT_STATE( 1307 EXPECT_COMMIT_STATE(
1299 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT); 1308 SchedulerStateMachine::CommitState::BEGIN_MAIN_FRAME_SENT);
1300 1309
1301 // Until that commit finishes, we shouldn't be drawing or animate. 1310 // Until that commit finishes, we shouldn't be drawing or animate.
1302 state.OnBeginImplFrameDeadline(); 1311 state.OnBeginImplFrameDeadline();
1303 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1312 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
1304 1313
1305 // Finish the commit, which should make the surface active. 1314 // Finish the commit, which should make the surface active.
1306 state.NotifyBeginMainFrameStarted(); 1315 state.NotifyBeginMainFrameStarted();
1307 state.NotifyReadyToCommit(); 1316 state.NotifyReadyToCommit();
1308 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 1317 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::COMMIT);
1318 EXPECT_EQ(
1319 state.output_surface_state(),
1320 SchedulerStateMachine::OutputSurfaceState::WAITING_FOR_FIRST_ACTIVATION);
1321 state.NotifyReadyToActivate();
1322 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::ACTIVATE_SYNC_TREE);
1323 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
1309 EXPECT_EQ(state.output_surface_state(), 1324 EXPECT_EQ(state.output_surface_state(),
1310 SchedulerStateMachine::OUTPUT_SURFACE_WAITING_FOR_FIRST_ACTIVATION); 1325 SchedulerStateMachine::OutputSurfaceState::ACTIVE);
1311 state.NotifyReadyToActivate();
1312 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE);
1313 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1314 EXPECT_EQ(state.output_surface_state(),
1315 SchedulerStateMachine::OUTPUT_SURFACE_ACTIVE);
1316 1326
1317 // Finishing the first commit after initializing an output surface should 1327 // Finishing the first commit after initializing an output surface should
1318 // automatically cause a redraw. 1328 // automatically cause a redraw.
1319 EXPECT_TRUE(state.RedrawPending()); 1329 EXPECT_TRUE(state.RedrawPending());
1320 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 1330 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE));
1321 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 1331 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::ANIMATE);
1322 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1332 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
1323 state.OnBeginImplFrameDeadline(); 1333 state.OnBeginImplFrameDeadline();
1324 EXPECT_ACTION_UPDATE_STATE( 1334 EXPECT_ACTION_UPDATE_STATE(
1325 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 1335 SchedulerStateMachine::Action::DRAW_AND_SWAP_IF_POSSIBLE);
1326 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1336 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
1327 EXPECT_FALSE(state.RedrawPending()); 1337 EXPECT_FALSE(state.RedrawPending());
1328 1338
1329 // Next frame as no work to do. 1339 // Next frame as no work to do.
1330 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 1340 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE));
1331 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1341 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
1332 state.OnBeginImplFrameDeadline(); 1342 state.OnBeginImplFrameDeadline();
1333 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1343 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
1334 1344
1335 // Once the context is recreated, whether we draw should be based on 1345 // Once the context is recreated, whether we draw should be based on
1336 // SetCanDraw if waiting on first draw after activate. 1346 // SetCanDraw if waiting on first draw after activate.
1337 state.SetNeedsRedraw(true); 1347 state.SetNeedsRedraw(true);
1338 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 1348 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE));
1339 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 1349 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::ANIMATE);
1340 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1350 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
1341 state.OnBeginImplFrameDeadline(); 1351 state.OnBeginImplFrameDeadline();
1342 EXPECT_ACTION(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 1352 EXPECT_ACTION(SchedulerStateMachine::Action::DRAW_AND_SWAP_IF_POSSIBLE);
1343 state.SetCanDraw(false); 1353 state.SetCanDraw(false);
1344 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); 1354 EXPECT_ACTION(SchedulerStateMachine::Action::NONE);
1345 state.SetCanDraw(true); 1355 state.SetCanDraw(true);
1346 EXPECT_ACTION_UPDATE_STATE( 1356 EXPECT_ACTION_UPDATE_STATE(
1347 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 1357 SchedulerStateMachine::Action::DRAW_AND_SWAP_IF_POSSIBLE);
1348 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1358 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
1349 1359
1350 // Once the context is recreated, whether we draw should be based on 1360 // Once the context is recreated, whether we draw should be based on
1351 // SetCanDraw if waiting on first draw after activate. 1361 // SetCanDraw if waiting on first draw after activate.
1352 state.SetNeedsRedraw(true); 1362 state.SetNeedsRedraw(true);
1353 state.SetNeedsCommit(); 1363 state.SetNeedsCommit();
1354 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 1364 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE));
1355 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 1365 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::ANIMATE);
1356 EXPECT_ACTION_UPDATE_STATE( 1366 EXPECT_ACTION_UPDATE_STATE(
1357 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1367 SchedulerStateMachine::Action::SEND_BEGIN_MAIN_FRAME);
1358 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1368 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
1359 // Activate so we need the first draw 1369 // Activate so we need the first draw
1360 state.NotifyBeginMainFrameStarted(); 1370 state.NotifyBeginMainFrameStarted();
1361 state.NotifyReadyToCommit(); 1371 state.NotifyReadyToCommit();
1362 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 1372 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::COMMIT);
1363 state.NotifyReadyToActivate(); 1373 state.NotifyReadyToActivate();
1364 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); 1374 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::ACTIVATE_SYNC_TREE);
1365 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1375 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
1366 EXPECT_TRUE(state.active_tree_needs_first_draw()); 1376 EXPECT_TRUE(state.active_tree_needs_first_draw());
1367 EXPECT_TRUE(state.needs_redraw()); 1377 EXPECT_TRUE(state.needs_redraw());
1368 1378
1369 state.OnBeginImplFrameDeadline(); 1379 state.OnBeginImplFrameDeadline();
1370 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 1380 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::ANIMATE);
1371 EXPECT_ACTION(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 1381 EXPECT_ACTION(SchedulerStateMachine::Action::DRAW_AND_SWAP_IF_POSSIBLE);
1372 state.SetCanDraw(false); 1382 state.SetCanDraw(false);
1373 EXPECT_ACTION(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT); 1383 EXPECT_ACTION(SchedulerStateMachine::Action::DRAW_AND_SWAP_ABORT);
1374 state.SetCanDraw(true); 1384 state.SetCanDraw(true);
1375 EXPECT_ACTION(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 1385 EXPECT_ACTION(SchedulerStateMachine::Action::DRAW_AND_SWAP_IF_POSSIBLE);
1376 } 1386 }
1377 1387
1378 TEST(SchedulerStateMachineTest, TestContextLostWhileCommitInProgress) { 1388 TEST(SchedulerStateMachineTest, TestContextLostWhileCommitInProgress) {
1379 SchedulerSettings scheduler_settings; 1389 SchedulerSettings scheduler_settings;
1380 StateMachine state(scheduler_settings); 1390 StateMachine state(scheduler_settings);
1381 state.SetCanStart(); 1391 state.SetCanStart();
1382 state.UpdateState(state.NextAction()); 1392 state.UpdateState(state.NextAction());
1383 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 1393 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
1384 state.SetVisible(true); 1394 state.SetVisible(true);
1385 state.SetCanDraw(true); 1395 state.SetCanDraw(true);
1386 1396
1387 // Get a commit in flight. 1397 // Get a commit in flight.
1388 state.SetNeedsCommit(); 1398 state.SetNeedsCommit();
1389 1399
1390 // Set damage and expect a draw. 1400 // Set damage and expect a draw.
1391 state.SetNeedsRedraw(true); 1401 state.SetNeedsRedraw(true);
1392 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 1402 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE));
1393 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 1403 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::ANIMATE);
1394 EXPECT_ACTION_UPDATE_STATE( 1404 EXPECT_ACTION_UPDATE_STATE(
1395 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1405 SchedulerStateMachine::Action::SEND_BEGIN_MAIN_FRAME);
1396 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1406 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
1397 state.OnBeginImplFrameDeadline(); 1407 state.OnBeginImplFrameDeadline();
1398 EXPECT_ACTION_UPDATE_STATE( 1408 EXPECT_ACTION_UPDATE_STATE(
1399 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 1409 SchedulerStateMachine::Action::DRAW_AND_SWAP_IF_POSSIBLE);
1400 state.DidSwapBuffers(); 1410 state.DidSwapBuffers();
1401 state.DidSwapBuffersComplete(); 1411 state.DidSwapBuffersComplete();
1402 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1412 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
1403 1413
1404 // Cause a lost context while the BeginMainFrame is in flight. 1414 // Cause a lost context while the BeginMainFrame is in flight.
1405 state.DidLoseOutputSurface(); 1415 state.DidLoseOutputSurface();
1406 1416
1407 // Ask for another draw. Expect nothing happens. 1417 // Ask for another draw. Expect nothing happens.
1408 state.SetNeedsRedraw(true); 1418 state.SetNeedsRedraw(true);
1409 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); 1419 EXPECT_ACTION(SchedulerStateMachine::Action::NONE);
1410 1420
1411 // Finish the frame, and commit. 1421 // Finish the frame, and commit.
1412 state.NotifyBeginMainFrameStarted(); 1422 state.NotifyBeginMainFrameStarted();
1413 state.NotifyReadyToCommit(); 1423 state.NotifyReadyToCommit();
1414 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 1424 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::COMMIT);
1415 1425
1416 // We will abort the draw when the output surface is lost if we are 1426 // We will abort the draw when the output surface is lost if we are
1417 // waiting for the first draw to unblock the main thread. 1427 // waiting for the first draw to unblock the main thread.
1418 EXPECT_TRUE(state.active_tree_needs_first_draw()); 1428 EXPECT_TRUE(state.active_tree_needs_first_draw());
1419 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT); 1429 EXPECT_ACTION_UPDATE_STATE(
1430 SchedulerStateMachine::Action::DRAW_AND_SWAP_ABORT);
1420 1431
1421 // Expect to begin context recreation only in BEGIN_IMPL_FRAME_STATE_IDLE 1432 // Expect to begin context recreation only in BeginImplFrameState::IDLE
1422 EXPECT_IMPL_FRAME_STATE(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE); 1433 EXPECT_IMPL_FRAME_STATE(SchedulerStateMachine::BeginImplFrameState::IDLE);
1423 EXPECT_ACTION(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); 1434 EXPECT_ACTION(SchedulerStateMachine::Action::BEGIN_OUTPUT_SURFACE_CREATION);
1424 1435
1425 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 1436 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE));
1426 EXPECT_IMPL_FRAME_STATE( 1437 EXPECT_IMPL_FRAME_STATE(
1427 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING); 1438 SchedulerStateMachine::BeginImplFrameState::BEGIN_FRAME_STARTING);
1428 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); 1439 EXPECT_ACTION(SchedulerStateMachine::Action::NONE);
1429 1440
1430 state.OnBeginImplFrameDeadlinePending(); 1441 state.OnBeginImplFrameDeadlinePending();
1431 EXPECT_IMPL_FRAME_STATE( 1442 EXPECT_IMPL_FRAME_STATE(
1432 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME); 1443 SchedulerStateMachine::BeginImplFrameState::INSIDE_BEGIN_FRAME);
1433 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); 1444 EXPECT_ACTION(SchedulerStateMachine::Action::NONE);
1434 1445
1435 state.OnBeginImplFrameDeadline(); 1446 state.OnBeginImplFrameDeadline();
1436 EXPECT_IMPL_FRAME_STATE( 1447 EXPECT_IMPL_FRAME_STATE(
1437 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE); 1448 SchedulerStateMachine::BeginImplFrameState::INSIDE_DEADLINE);
1438 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); 1449 EXPECT_ACTION(SchedulerStateMachine::Action::NONE);
1439 } 1450 }
1440 1451
1441 TEST(SchedulerStateMachineTest, 1452 TEST(SchedulerStateMachineTest,
1442 TestContextLostWhileCommitInProgressAndAnotherCommitRequested) { 1453 TestContextLostWhileCommitInProgressAndAnotherCommitRequested) {
1443 SchedulerSettings scheduler_settings; 1454 SchedulerSettings scheduler_settings;
1444 StateMachine state(scheduler_settings); 1455 StateMachine state(scheduler_settings);
1445 state.SetCanStart(); 1456 state.SetCanStart();
1446 state.UpdateState(state.NextAction()); 1457 state.UpdateState(state.NextAction());
1447 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 1458 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
1448 state.SetVisible(true); 1459 state.SetVisible(true);
1449 state.SetCanDraw(true); 1460 state.SetCanDraw(true);
1450 1461
1451 // Get a commit in flight. 1462 // Get a commit in flight.
1452 state.SetNeedsCommit(); 1463 state.SetNeedsCommit();
1453 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1464 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
1454 1465
1455 // Set damage and expect a draw. 1466 // Set damage and expect a draw.
1456 state.SetNeedsRedraw(true); 1467 state.SetNeedsRedraw(true);
1457 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 1468 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE));
1458 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 1469 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::ANIMATE);
1459 EXPECT_ACTION_UPDATE_STATE( 1470 EXPECT_ACTION_UPDATE_STATE(
1460 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1471 SchedulerStateMachine::Action::SEND_BEGIN_MAIN_FRAME);
1461 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1472 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
1462 state.OnBeginImplFrameDeadline(); 1473 state.OnBeginImplFrameDeadline();
1463 EXPECT_ACTION_UPDATE_STATE( 1474 EXPECT_ACTION_UPDATE_STATE(
1464 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 1475 SchedulerStateMachine::Action::DRAW_AND_SWAP_IF_POSSIBLE);
1465 state.DidSwapBuffers(); 1476 state.DidSwapBuffers();
1466 state.DidSwapBuffersComplete(); 1477 state.DidSwapBuffersComplete();
1467 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1478 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
1468 1479
1469 // Cause a lost context while the BeginMainFrame is in flight. 1480 // Cause a lost context while the BeginMainFrame is in flight.
1470 state.DidLoseOutputSurface(); 1481 state.DidLoseOutputSurface();
1471 1482
1472 // Ask for another draw and also set needs commit. Expect nothing happens. 1483 // Ask for another draw and also set needs commit. Expect nothing happens.
1473 state.SetNeedsRedraw(true); 1484 state.SetNeedsRedraw(true);
1474 state.SetNeedsCommit(); 1485 state.SetNeedsCommit();
1475 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1486 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
1476 1487
1477 // Finish the frame, and commit. 1488 // Finish the frame, and commit.
1478 state.NotifyBeginMainFrameStarted(); 1489 state.NotifyBeginMainFrameStarted();
1479 state.NotifyReadyToCommit(); 1490 state.NotifyReadyToCommit();
1480 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 1491 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::COMMIT);
1481 EXPECT_TRUE(state.active_tree_needs_first_draw()); 1492 EXPECT_TRUE(state.active_tree_needs_first_draw());
1482 1493
1483 // Because the output surface is missing, we expect the draw to abort. 1494 // Because the output surface is missing, we expect the draw to abort.
1484 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT); 1495 EXPECT_ACTION_UPDATE_STATE(
1496 SchedulerStateMachine::Action::DRAW_AND_SWAP_ABORT);
1485 1497
1486 // Expect to begin context recreation only in BEGIN_IMPL_FRAME_STATE_IDLE 1498 // Expect to begin context recreation only in BeginImplFrameState::IDLE
1487 EXPECT_IMPL_FRAME_STATE(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE); 1499 EXPECT_IMPL_FRAME_STATE(SchedulerStateMachine::BeginImplFrameState::IDLE);
1488 EXPECT_ACTION(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); 1500 EXPECT_ACTION(SchedulerStateMachine::Action::BEGIN_OUTPUT_SURFACE_CREATION);
1489 1501
1490 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 1502 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE));
1491 EXPECT_IMPL_FRAME_STATE( 1503 EXPECT_IMPL_FRAME_STATE(
1492 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING); 1504 SchedulerStateMachine::BeginImplFrameState::BEGIN_FRAME_STARTING);
1493 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); 1505 EXPECT_ACTION(SchedulerStateMachine::Action::NONE);
1494 1506
1495 state.OnBeginImplFrameDeadlinePending(); 1507 state.OnBeginImplFrameDeadlinePending();
1496 EXPECT_IMPL_FRAME_STATE( 1508 EXPECT_IMPL_FRAME_STATE(
1497 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME); 1509 SchedulerStateMachine::BeginImplFrameState::INSIDE_BEGIN_FRAME);
1498 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); 1510 EXPECT_ACTION(SchedulerStateMachine::Action::NONE);
1499 1511
1500 state.OnBeginImplFrameDeadline(); 1512 state.OnBeginImplFrameDeadline();
1501 EXPECT_IMPL_FRAME_STATE( 1513 EXPECT_IMPL_FRAME_STATE(
1502 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE); 1514 SchedulerStateMachine::BeginImplFrameState::INSIDE_DEADLINE);
1503 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); 1515 EXPECT_ACTION(SchedulerStateMachine::Action::NONE);
1504 1516
1505 state.OnBeginImplFrameIdle(); 1517 state.OnBeginImplFrameIdle();
1506 EXPECT_ACTION_UPDATE_STATE( 1518 EXPECT_ACTION_UPDATE_STATE(
1507 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); 1519 SchedulerStateMachine::Action::BEGIN_OUTPUT_SURFACE_CREATION);
1508 1520
1509 // After we get a new output surface, the commit flow should start. 1521 // After we get a new output surface, the commit flow should start.
1510 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 1522 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
1511 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 1523 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE));
1512 EXPECT_ACTION_UPDATE_STATE( 1524 EXPECT_ACTION_UPDATE_STATE(
1513 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1525 SchedulerStateMachine::Action::SEND_BEGIN_MAIN_FRAME);
1514 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1526 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
1515 state.NotifyBeginMainFrameStarted(); 1527 state.NotifyBeginMainFrameStarted();
1516 state.NotifyReadyToCommit(); 1528 state.NotifyReadyToCommit();
1517 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 1529 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::COMMIT);
1518 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1530 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
1519 state.OnBeginImplFrameDeadline(); 1531 state.OnBeginImplFrameDeadline();
1520 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 1532 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::ANIMATE);
1521 EXPECT_ACTION_UPDATE_STATE( 1533 EXPECT_ACTION_UPDATE_STATE(
1522 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 1534 SchedulerStateMachine::Action::DRAW_AND_SWAP_IF_POSSIBLE);
1523 state.DidSwapBuffers(); 1535 state.DidSwapBuffers();
1524 state.DidSwapBuffersComplete(); 1536 state.DidSwapBuffersComplete();
1525 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1537 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
1526 } 1538 }
1527 1539
1528 TEST(SchedulerStateMachineTest, DontDrawBeforeCommitAfterLostOutputSurface) { 1540 TEST(SchedulerStateMachineTest, DontDrawBeforeCommitAfterLostOutputSurface) {
1529 SchedulerSettings default_scheduler_settings; 1541 SchedulerSettings default_scheduler_settings;
1530 StateMachine state(default_scheduler_settings); 1542 StateMachine state(default_scheduler_settings);
1531 state.SetCanStart(); 1543 state.SetCanStart();
1532 state.UpdateState(state.NextAction()); 1544 state.UpdateState(state.NextAction());
1533 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 1545 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
1534 state.SetVisible(true); 1546 state.SetVisible(true);
1535 state.SetCanDraw(true); 1547 state.SetCanDraw(true);
1536 1548
1537 state.SetNeedsRedraw(true); 1549 state.SetNeedsRedraw(true);
1538 1550
1539 // Cause a lost output surface, and restore it. 1551 // Cause a lost output surface, and restore it.
1540 state.DidLoseOutputSurface(); 1552 state.DidLoseOutputSurface();
1541 EXPECT_ACTION(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); 1553 EXPECT_ACTION(SchedulerStateMachine::Action::BEGIN_OUTPUT_SURFACE_CREATION);
1542 state.UpdateState(state.NextAction()); 1554 state.UpdateState(state.NextAction());
1543 state.DidCreateAndInitializeOutputSurface(); 1555 state.DidCreateAndInitializeOutputSurface();
1544 1556
1545 EXPECT_FALSE(state.RedrawPending()); 1557 EXPECT_FALSE(state.RedrawPending());
1546 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 1558 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE));
1547 EXPECT_ACTION(SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1559 EXPECT_ACTION(SchedulerStateMachine::Action::SEND_BEGIN_MAIN_FRAME);
1548 } 1560 }
1549 1561
1550 TEST(SchedulerStateMachineTest, 1562 TEST(SchedulerStateMachineTest,
1551 TestPendingActivationsShouldBeForcedAfterLostOutputSurface) { 1563 TestPendingActivationsShouldBeForcedAfterLostOutputSurface) {
1552 SchedulerSettings settings; 1564 SchedulerSettings settings;
1553 settings.impl_side_painting = true; 1565 settings.impl_side_painting = true;
1554 StateMachine state(settings); 1566 StateMachine state(settings);
1555 state.SetCanStart(); 1567 state.SetCanStart();
1556 state.UpdateState(state.NextAction()); 1568 state.UpdateState(state.NextAction());
1557 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 1569 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
1558 state.SetVisible(true); 1570 state.SetVisible(true);
1559 state.SetCanDraw(true); 1571 state.SetCanDraw(true);
1560 1572
1561 state.SetCommitState( 1573 state.SetCommitState(
1562 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT); 1574 SchedulerStateMachine::CommitState::BEGIN_MAIN_FRAME_SENT);
1563 1575
1564 // Cause a lost context. 1576 // Cause a lost context.
1565 state.DidLoseOutputSurface(); 1577 state.DidLoseOutputSurface();
1566 1578
1567 state.NotifyBeginMainFrameStarted(); 1579 state.NotifyBeginMainFrameStarted();
1568 state.NotifyReadyToCommit(); 1580 state.NotifyReadyToCommit();
1569 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 1581 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::COMMIT);
1570 1582
1571 EXPECT_TRUE(state.PendingActivationsShouldBeForced()); 1583 EXPECT_TRUE(state.PendingActivationsShouldBeForced());
1572 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); 1584 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::ACTIVATE_SYNC_TREE);
1573 1585
1574 EXPECT_TRUE(state.PendingDrawsShouldBeAborted()); 1586 EXPECT_TRUE(state.PendingDrawsShouldBeAborted());
1575 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT); 1587 EXPECT_ACTION_UPDATE_STATE(
1588 SchedulerStateMachine::Action::DRAW_AND_SWAP_ABORT);
1576 } 1589 }
1577 1590
1578 TEST(SchedulerStateMachineTest, TestNoBeginMainFrameWhenInvisible) { 1591 TEST(SchedulerStateMachineTest, TestNoBeginMainFrameWhenInvisible) {
1579 SchedulerSettings default_scheduler_settings; 1592 SchedulerSettings default_scheduler_settings;
1580 StateMachine state(default_scheduler_settings); 1593 StateMachine state(default_scheduler_settings);
1581 state.SetCanStart(); 1594 state.SetCanStart();
1582 state.UpdateState(state.NextAction()); 1595 state.UpdateState(state.NextAction());
1583 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 1596 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
1584 state.SetVisible(false); 1597 state.SetVisible(false);
1585 state.SetNeedsCommit(); 1598 state.SetNeedsCommit();
1586 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); 1599 EXPECT_ACTION(SchedulerStateMachine::Action::NONE);
1587 } 1600 }
1588 1601
1589 TEST(SchedulerStateMachineTest, TestFinishCommitWhenCommitInProgress) { 1602 TEST(SchedulerStateMachineTest, TestFinishCommitWhenCommitInProgress) {
1590 SchedulerSettings default_scheduler_settings; 1603 SchedulerSettings default_scheduler_settings;
1591 StateMachine state(default_scheduler_settings); 1604 StateMachine state(default_scheduler_settings);
1592 state.SetCanStart(); 1605 state.SetCanStart();
1593 state.UpdateState(state.NextAction()); 1606 state.UpdateState(state.NextAction());
1594 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 1607 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
1595 state.SetVisible(false); 1608 state.SetVisible(false);
1596 state.SetCommitState( 1609 state.SetCommitState(
1597 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT); 1610 SchedulerStateMachine::CommitState::BEGIN_MAIN_FRAME_SENT);
1598 state.SetNeedsCommit(); 1611 state.SetNeedsCommit();
1599 1612
1600 state.NotifyBeginMainFrameStarted(); 1613 state.NotifyBeginMainFrameStarted();
1601 state.NotifyReadyToCommit(); 1614 state.NotifyReadyToCommit();
1602 EXPECT_ACTION(SchedulerStateMachine::ACTION_COMMIT); 1615 EXPECT_ACTION(SchedulerStateMachine::Action::COMMIT);
1603 state.UpdateState(state.NextAction()); 1616 state.UpdateState(state.NextAction());
1604 1617
1605 EXPECT_TRUE(state.active_tree_needs_first_draw()); 1618 EXPECT_TRUE(state.active_tree_needs_first_draw());
1606 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT); 1619 EXPECT_ACTION_UPDATE_STATE(
1620 SchedulerStateMachine::Action::DRAW_AND_SWAP_ABORT);
1607 } 1621 }
1608 1622
1609 TEST(SchedulerStateMachineTest, TestInitialActionsWhenContextLost) { 1623 TEST(SchedulerStateMachineTest, TestInitialActionsWhenContextLost) {
1610 SchedulerSettings default_scheduler_settings; 1624 SchedulerSettings default_scheduler_settings;
1611 StateMachine state(default_scheduler_settings); 1625 StateMachine state(default_scheduler_settings);
1612 state.SetCanStart(); 1626 state.SetCanStart();
1613 state.UpdateState(state.NextAction()); 1627 state.UpdateState(state.NextAction());
1614 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 1628 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
1615 state.SetVisible(true); 1629 state.SetVisible(true);
1616 state.SetCanDraw(true); 1630 state.SetCanDraw(true);
1617 state.SetNeedsCommit(); 1631 state.SetNeedsCommit();
1618 state.DidLoseOutputSurface(); 1632 state.DidLoseOutputSurface();
1619 1633
1620 // When we are visible, we normally want to begin output surface creation 1634 // When we are visible, we normally want to begin output surface creation
1621 // as soon as possible. 1635 // as soon as possible.
1622 EXPECT_ACTION_UPDATE_STATE( 1636 EXPECT_ACTION_UPDATE_STATE(
1623 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); 1637 SchedulerStateMachine::Action::BEGIN_OUTPUT_SURFACE_CREATION);
1624 1638
1625 state.DidCreateAndInitializeOutputSurface(); 1639 state.DidCreateAndInitializeOutputSurface();
1626 EXPECT_EQ(state.output_surface_state(), 1640 EXPECT_EQ(
1627 SchedulerStateMachine::OUTPUT_SURFACE_WAITING_FOR_FIRST_COMMIT); 1641 state.output_surface_state(),
1642 SchedulerStateMachine::OutputSurfaceState::WAITING_FOR_FIRST_COMMIT);
1628 1643
1629 // We should not send a BeginMainFrame when we are invisible, even if we've 1644 // We should not send a BeginMainFrame when we are invisible, even if we've
1630 // lost the output surface and are trying to get the first commit, since the 1645 // lost the output surface and are trying to get the first commit, since the
1631 // main thread will just abort anyway. 1646 // main thread will just abort anyway.
1632 state.SetVisible(false); 1647 state.SetVisible(false);
1633 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); 1648 EXPECT_ACTION(SchedulerStateMachine::Action::NONE);
1634 } 1649 }
1635 1650
1636 TEST(SchedulerStateMachineTest, ReportIfNotDrawing) { 1651 TEST(SchedulerStateMachineTest, ReportIfNotDrawing) {
1637 SchedulerSettings default_scheduler_settings; 1652 SchedulerSettings default_scheduler_settings;
1638 StateMachine state(default_scheduler_settings); 1653 StateMachine state(default_scheduler_settings);
1639 state.SetCanStart(); 1654 state.SetCanStart();
1640 state.UpdateState(state.NextAction()); 1655 state.UpdateState(state.NextAction());
1641 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 1656 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
1642 1657
1643 state.SetCanDraw(true); 1658 state.SetCanDraw(true);
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
1675 // This test mirrors what happens during the first frame of a scroll gesture. 1690 // This test mirrors what happens during the first frame of a scroll gesture.
1676 // First we get the input event and a BeginFrame. 1691 // First we get the input event and a BeginFrame.
1677 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 1692 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE));
1678 1693
1679 // As a response the compositor requests a redraw and a commit to tell the 1694 // As a response the compositor requests a redraw and a commit to tell the
1680 // main thread about the new scroll offset. 1695 // main thread about the new scroll offset.
1681 state.SetNeedsRedraw(true); 1696 state.SetNeedsRedraw(true);
1682 state.SetNeedsCommit(); 1697 state.SetNeedsCommit();
1683 1698
1684 // We should start the commit normally. 1699 // We should start the commit normally.
1685 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 1700 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::ANIMATE);
1686 EXPECT_ACTION_UPDATE_STATE( 1701 EXPECT_ACTION_UPDATE_STATE(
1687 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1702 SchedulerStateMachine::Action::SEND_BEGIN_MAIN_FRAME);
1688 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1703 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
1689 1704
1690 // Since only the scroll offset changed, the main thread will abort the 1705 // Since only the scroll offset changed, the main thread will abort the
1691 // commit. 1706 // commit.
1692 state.BeginMainFrameAborted(CommitEarlyOutReason::FINISHED_NO_UPDATES); 1707 state.BeginMainFrameAborted(CommitEarlyOutReason::FINISHED_NO_UPDATES);
1693 1708
1694 // Since the commit was aborted, we should draw right away instead of waiting 1709 // Since the commit was aborted, we should draw right away instead of waiting
1695 // for the deadline. 1710 // for the deadline.
1696 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineImmediately()); 1711 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineImmediately());
1697 } 1712 }
1698 1713
1699 void FinishPreviousCommitAndDrawWithoutExitingDeadline( 1714 void FinishPreviousCommitAndDrawWithoutExitingDeadline(
1700 StateMachine* state_ptr) { 1715 StateMachine* state_ptr) {
1701 // Gross, but allows us to use macros below. 1716 // Gross, but allows us to use macros below.
1702 StateMachine& state = *state_ptr; 1717 StateMachine& state = *state_ptr;
1703 1718
1704 state.NotifyBeginMainFrameStarted(); 1719 state.NotifyBeginMainFrameStarted();
1705 state.NotifyReadyToCommit(); 1720 state.NotifyReadyToCommit();
1706 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 1721 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::COMMIT);
1707 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1722 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
1708 state.NotifyReadyToActivate(); 1723 state.NotifyReadyToActivate();
1709 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); 1724 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::ACTIVATE_SYNC_TREE);
1710 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1725 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
1711 1726
1712 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 1727 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE));
1713 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 1728 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::ANIMATE);
1714 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1729 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
1715 1730
1716 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineImmediately()); 1731 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineImmediately());
1717 state.OnBeginImplFrameDeadline(); 1732 state.OnBeginImplFrameDeadline();
1718 EXPECT_ACTION_UPDATE_STATE( 1733 EXPECT_ACTION_UPDATE_STATE(
1719 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 1734 SchedulerStateMachine::Action::DRAW_AND_SWAP_IF_POSSIBLE);
1720 state.DidSwapBuffers(); 1735 state.DidSwapBuffers();
1721 } 1736 }
1722 1737
1723 TEST(SchedulerStateMachineTest, TestImplLatencyTakesPriority) { 1738 TEST(SchedulerStateMachineTest, TestImplLatencyTakesPriority) {
1724 SchedulerSettings settings; 1739 SchedulerSettings settings;
1725 settings.impl_side_painting = true; 1740 settings.impl_side_painting = true;
1726 StateMachine state(settings); 1741 StateMachine state(settings);
1727 state.SetCanStart(); 1742 state.SetCanStart();
1728 state.UpdateState(state.NextAction()); 1743 state.UpdateState(state.NextAction());
1729 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 1744 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
1730 state.SetVisible(true); 1745 state.SetVisible(true);
1731 state.SetCanDraw(true); 1746 state.SetCanDraw(true);
1732 1747
1733 // This test ensures that impl-draws are prioritized over main thread updates 1748 // This test ensures that impl-draws are prioritized over main thread updates
1734 // in prefer impl latency mode. 1749 // in prefer impl latency mode.
1735 state.SetNeedsRedraw(true); 1750 state.SetNeedsRedraw(true);
1736 state.SetNeedsCommit(); 1751 state.SetNeedsCommit();
1737 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 1752 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE));
1738 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 1753 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::ANIMATE);
1739 EXPECT_ACTION_UPDATE_STATE( 1754 EXPECT_ACTION_UPDATE_STATE(
1740 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1755 SchedulerStateMachine::Action::SEND_BEGIN_MAIN_FRAME);
1741 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1756 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
1742 1757
1743 // Verify the deadline is not triggered early until we enter 1758 // Verify the deadline is not triggered early until we enter
1744 // prefer impl latency mode. 1759 // prefer impl latency mode.
1745 EXPECT_FALSE(state.ShouldTriggerBeginImplFrameDeadlineImmediately()); 1760 EXPECT_FALSE(state.ShouldTriggerBeginImplFrameDeadlineImmediately());
1746 state.SetImplLatencyTakesPriority(true); 1761 state.SetImplLatencyTakesPriority(true);
1747 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineImmediately()); 1762 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineImmediately());
1748 1763
1749 // Trigger the deadline. 1764 // Trigger the deadline.
1750 state.OnBeginImplFrameDeadline(); 1765 state.OnBeginImplFrameDeadline();
1751 EXPECT_ACTION_UPDATE_STATE( 1766 EXPECT_ACTION_UPDATE_STATE(
1752 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 1767 SchedulerStateMachine::Action::DRAW_AND_SWAP_IF_POSSIBLE);
1753 state.DidSwapBuffers(); 1768 state.DidSwapBuffers();
1754 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1769 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
1755 state.DidSwapBuffersComplete(); 1770 state.DidSwapBuffersComplete();
1756 1771
1757 // Request a new commit and finish the previous one. 1772 // Request a new commit and finish the previous one.
1758 state.SetNeedsCommit(); 1773 state.SetNeedsCommit();
1759 FinishPreviousCommitAndDrawWithoutExitingDeadline(&state); 1774 FinishPreviousCommitAndDrawWithoutExitingDeadline(&state);
1760 EXPECT_ACTION_UPDATE_STATE( 1775 EXPECT_ACTION_UPDATE_STATE(
1761 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1776 SchedulerStateMachine::Action::SEND_BEGIN_MAIN_FRAME);
1762 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1777 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
1763 state.DidSwapBuffersComplete(); 1778 state.DidSwapBuffersComplete();
1764 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1779 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
1765 1780
1766 // Finish the previous commit and draw it. 1781 // Finish the previous commit and draw it.
1767 FinishPreviousCommitAndDrawWithoutExitingDeadline(&state); 1782 FinishPreviousCommitAndDrawWithoutExitingDeadline(&state);
1768 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1783 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
1769 1784
1770 // Verify we do not send another BeginMainFrame if was are swap throttled 1785 // Verify we do not send another BeginMainFrame if was are swap throttled
1771 // and did not just swap. 1786 // and did not just swap.
1772 state.SetNeedsCommit(); 1787 state.SetNeedsCommit();
1773 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1788 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
1774 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 1789 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE));
1775 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1790 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
1776 EXPECT_FALSE(state.ShouldTriggerBeginImplFrameDeadlineImmediately()); 1791 EXPECT_FALSE(state.ShouldTriggerBeginImplFrameDeadlineImmediately());
1777 state.OnBeginImplFrameDeadline(); 1792 state.OnBeginImplFrameDeadline();
1778 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1793 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
1779 } 1794 }
1780 1795
1781 TEST(SchedulerStateMachineTest, 1796 TEST(SchedulerStateMachineTest,
1782 TestTriggerDeadlineImmediatelyOnLostOutputSurface) { 1797 TestTriggerDeadlineImmediatelyOnLostOutputSurface) {
1783 SchedulerSettings default_scheduler_settings; 1798 SchedulerSettings default_scheduler_settings;
1784 StateMachine state(default_scheduler_settings); 1799 StateMachine state(default_scheduler_settings);
1785 state.SetCanStart(); 1800 state.SetCanStart();
1786 state.UpdateState(state.NextAction()); 1801 state.UpdateState(state.NextAction());
1787 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 1802 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
1788 state.SetVisible(true); 1803 state.SetVisible(true);
1789 state.SetCanDraw(true); 1804 state.SetCanDraw(true);
1790 1805
1791 state.SetNeedsCommit(); 1806 state.SetNeedsCommit();
1792 1807
1793 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 1808 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE));
1794 EXPECT_ACTION_UPDATE_STATE( 1809 EXPECT_ACTION_UPDATE_STATE(
1795 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1810 SchedulerStateMachine::Action::SEND_BEGIN_MAIN_FRAME);
1796 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1811 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
1797 EXPECT_FALSE(state.ShouldTriggerBeginImplFrameDeadlineImmediately()); 1812 EXPECT_FALSE(state.ShouldTriggerBeginImplFrameDeadlineImmediately());
1798 1813
1799 state.DidLoseOutputSurface(); 1814 state.DidLoseOutputSurface();
1800 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1815 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
1801 // The deadline should be triggered immediately when output surface is lost. 1816 // The deadline should be triggered immediately when output surface is lost.
1802 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineImmediately()); 1817 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineImmediately());
1803 } 1818 }
1804 1819
1805 TEST(SchedulerStateMachineTest, TestSetNeedsAnimate) { 1820 TEST(SchedulerStateMachineTest, TestSetNeedsAnimate) {
1806 SchedulerSettings settings; 1821 SchedulerSettings settings;
1807 settings.impl_side_painting = true; 1822 settings.impl_side_painting = true;
1808 StateMachine state(settings); 1823 StateMachine state(settings);
1809 state.SetCanStart(); 1824 state.SetCanStart();
1810 state.UpdateState(state.NextAction()); 1825 state.UpdateState(state.NextAction());
1811 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 1826 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
1812 state.SetVisible(true); 1827 state.SetVisible(true);
1813 state.SetCanDraw(true); 1828 state.SetCanDraw(true);
1814 1829
1815 // Test requesting an animation that, when run, causes us to draw. 1830 // Test requesting an animation that, when run, causes us to draw.
1816 state.SetNeedsAnimate(); 1831 state.SetNeedsAnimate();
1817 EXPECT_TRUE(state.BeginFrameNeeded()); 1832 EXPECT_TRUE(state.BeginFrameNeeded());
1818 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1833 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
1819 1834
1820 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 1835 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE));
1821 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 1836 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::ANIMATE);
1822 1837
1823 state.OnBeginImplFrameDeadlinePending(); 1838 state.OnBeginImplFrameDeadlinePending();
1824 state.OnBeginImplFrameDeadline(); 1839 state.OnBeginImplFrameDeadline();
1825 EXPECT_ACTION_UPDATE_STATE( 1840 EXPECT_ACTION_UPDATE_STATE(
1826 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 1841 SchedulerStateMachine::Action::DRAW_AND_SWAP_IF_POSSIBLE);
1827 } 1842 }
1828 1843
1829 TEST(SchedulerStateMachineTest, TestAnimateBeforeCommit) { 1844 TEST(SchedulerStateMachineTest, TestAnimateBeforeCommit) {
1830 SchedulerSettings settings; 1845 SchedulerSettings settings;
1831 settings.impl_side_painting = true; 1846 settings.impl_side_painting = true;
1832 StateMachine state(settings); 1847 StateMachine state(settings);
1833 state.SetCanStart(); 1848 state.SetCanStart();
1834 state.UpdateState(state.NextAction()); 1849 state.UpdateState(state.NextAction());
1835 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 1850 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
1836 state.SetVisible(true); 1851 state.SetVisible(true);
1837 state.SetCanDraw(true); 1852 state.SetCanDraw(true);
1838 1853
1839 // Check that animations are updated before we start a commit. 1854 // Check that animations are updated before we start a commit.
1840 state.SetNeedsAnimate(); 1855 state.SetNeedsAnimate();
1841 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1856 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
1842 state.SetNeedsCommit(); 1857 state.SetNeedsCommit();
1843 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1858 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
1844 EXPECT_TRUE(state.BeginFrameNeeded()); 1859 EXPECT_TRUE(state.BeginFrameNeeded());
1845 1860
1846 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 1861 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE));
1847 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 1862 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::ANIMATE);
1848 EXPECT_ACTION_UPDATE_STATE( 1863 EXPECT_ACTION_UPDATE_STATE(
1849 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1864 SchedulerStateMachine::Action::SEND_BEGIN_MAIN_FRAME);
1850 1865
1851 state.OnBeginImplFrameDeadlinePending(); 1866 state.OnBeginImplFrameDeadlinePending();
1852 state.OnBeginImplFrameDeadline(); 1867 state.OnBeginImplFrameDeadline();
1853 EXPECT_ACTION_UPDATE_STATE( 1868 EXPECT_ACTION_UPDATE_STATE(
1854 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 1869 SchedulerStateMachine::Action::DRAW_AND_SWAP_IF_POSSIBLE);
1855 } 1870 }
1856 1871
1857 TEST(SchedulerStateMachineTest, TestAnimateAfterCommitBeforeDraw) { 1872 TEST(SchedulerStateMachineTest, TestAnimateAfterCommitBeforeDraw) {
1858 SchedulerSettings settings; 1873 SchedulerSettings settings;
1859 settings.impl_side_painting = true; 1874 settings.impl_side_painting = true;
1860 StateMachine state(settings); 1875 StateMachine state(settings);
1861 state.SetCanStart(); 1876 state.SetCanStart();
1862 state.UpdateState(state.NextAction()); 1877 state.UpdateState(state.NextAction());
1863 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 1878 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
1864 state.SetVisible(true); 1879 state.SetVisible(true);
1865 state.SetCanDraw(true); 1880 state.SetCanDraw(true);
1866 1881
1867 // Check that animations are updated before we start a commit. 1882 // Check that animations are updated before we start a commit.
1868 state.SetNeedsAnimate(); 1883 state.SetNeedsAnimate();
1869 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1884 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
1870 state.SetNeedsCommit(); 1885 state.SetNeedsCommit();
1871 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1886 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
1872 EXPECT_TRUE(state.BeginFrameNeeded()); 1887 EXPECT_TRUE(state.BeginFrameNeeded());
1873 1888
1874 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 1889 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE));
1875 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 1890 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::ANIMATE);
1876 EXPECT_ACTION_UPDATE_STATE( 1891 EXPECT_ACTION_UPDATE_STATE(
1877 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1892 SchedulerStateMachine::Action::SEND_BEGIN_MAIN_FRAME);
1878 1893
1879 state.NotifyBeginMainFrameStarted(); 1894 state.NotifyBeginMainFrameStarted();
1880 state.NotifyReadyToCommit(); 1895 state.NotifyReadyToCommit();
1881 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 1896 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::COMMIT);
1882 1897
1883 state.OnBeginImplFrameDeadlinePending(); 1898 state.OnBeginImplFrameDeadlinePending();
1884 state.OnBeginImplFrameDeadline(); 1899 state.OnBeginImplFrameDeadline();
1885 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 1900 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::ANIMATE);
1886 EXPECT_ACTION_UPDATE_STATE( 1901 EXPECT_ACTION_UPDATE_STATE(
1887 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 1902 SchedulerStateMachine::Action::DRAW_AND_SWAP_IF_POSSIBLE);
1888 } 1903 }
1889 1904
1890 TEST(SchedulerStateMachineTest, TestSetNeedsAnimateAfterAnimate) { 1905 TEST(SchedulerStateMachineTest, TestSetNeedsAnimateAfterAnimate) {
1891 SchedulerSettings settings; 1906 SchedulerSettings settings;
1892 settings.impl_side_painting = true; 1907 settings.impl_side_painting = true;
1893 StateMachine state(settings); 1908 StateMachine state(settings);
1894 state.SetCanStart(); 1909 state.SetCanStart();
1895 state.UpdateState(state.NextAction()); 1910 state.UpdateState(state.NextAction());
1896 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 1911 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
1897 state.SetVisible(true); 1912 state.SetVisible(true);
1898 state.SetCanDraw(true); 1913 state.SetCanDraw(true);
1899 1914
1900 // Test requesting an animation after we have already animated during this 1915 // Test requesting an animation after we have already animated during this
1901 // frame. 1916 // frame.
1902 state.SetNeedsRedraw(true); 1917 state.SetNeedsRedraw(true);
1903 EXPECT_TRUE(state.BeginFrameNeeded()); 1918 EXPECT_TRUE(state.BeginFrameNeeded());
1904 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1919 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
1905 1920
1906 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 1921 state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE));
1907 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 1922 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::ANIMATE);
1908 1923
1909 state.SetNeedsAnimate(); 1924 state.SetNeedsAnimate();
1910 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1925 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
1911 1926
1912 state.OnBeginImplFrameDeadline(); 1927 state.OnBeginImplFrameDeadline();
1913 EXPECT_ACTION_UPDATE_STATE( 1928 EXPECT_ACTION_UPDATE_STATE(
1914 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); 1929 SchedulerStateMachine::Action::DRAW_AND_SWAP_IF_POSSIBLE);
1915 } 1930 }
1916 1931
1917 TEST(SchedulerStateMachineTest, TestForwardBeginFramesToChildren) { 1932 TEST(SchedulerStateMachineTest, TestForwardBeginFramesToChildren) {
1918 SchedulerSettings settings; 1933 SchedulerSettings settings;
1919 settings.forward_begin_frames_to_children = true; 1934 settings.forward_begin_frames_to_children = true;
1920 StateMachine state(settings); 1935 StateMachine state(settings);
1921 state.SetCanStart(); 1936 state.SetCanStart();
1922 state.UpdateState(state.NextAction()); 1937 state.UpdateState(state.NextAction());
1923 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 1938 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
1924 state.SetVisible(true); 1939 state.SetVisible(true);
1925 state.SetCanDraw(true); 1940 state.SetCanDraw(true);
1926 1941
1927 EXPECT_FALSE(state.BeginFrameNeeded()); 1942 EXPECT_FALSE(state.BeginFrameNeeded());
1928 state.SetChildrenNeedBeginFrames(true); 1943 state.SetChildrenNeedBeginFrames(true);
1929 EXPECT_TRUE(state.BeginFrameNeeded()); 1944 EXPECT_TRUE(state.BeginFrameNeeded());
1930 } 1945 }
1931 1946
1932 } // namespace 1947 } // namespace
1933 } // namespace cc 1948 } // namespace cc
OLDNEW
« cc/scheduler/scheduler_state_machine.h ('K') | « cc/scheduler/scheduler_state_machine.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698