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

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

Issue 1218663007: cc: Allow SendBeginMainFrame in idle state for synchronous compositor. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 5 years, 5 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
« no previous file with comments | « cc/scheduler/scheduler_state_machine.cc ('k') | cc/scheduler/scheduler_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/trace_event/trace_event.h" 7 #include "base/trace_event/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"
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after
195 { 195 {
196 StateMachine state(default_scheduler_settings); 196 StateMachine state(default_scheduler_settings);
197 state.SetCanStart(); 197 state.SetCanStart();
198 EXPECT_ACTION_UPDATE_STATE( 198 EXPECT_ACTION_UPDATE_STATE(
199 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION) 199 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION)
200 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 200 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
201 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE); 201 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE);
202 state.SetNeedsRedraw(false); 202 state.SetNeedsRedraw(false);
203 state.SetVisible(true); 203 state.SetVisible(true);
204 204
205 EXPECT_FALSE(state.BeginFrameNeeded()); 205 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
206 EXPECT_FALSE(state.NeedsCommit());
206 207
208 state.OnBeginImplFrame();
207 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 209 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
208 EXPECT_FALSE(state.BeginFrameNeeded());
209 state.OnBeginImplFrame();
210 210
211 state.OnBeginImplFrameDeadline();
211 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 212 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
212 state.OnBeginImplFrameDeadline(); 213 EXPECT_FALSE(state.NeedsCommit());
213 } 214 }
214 215
215 // If commit requested but can_start is still false, do nothing. 216 // If commit requested but can_start is still false, do nothing.
216 { 217 {
217 StateMachine state(default_scheduler_settings); 218 StateMachine state(default_scheduler_settings);
218 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE); 219 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE);
219 state.SetNeedsRedraw(false); 220 state.SetNeedsRedraw(false);
220 state.SetVisible(true); 221 state.SetVisible(true);
221 state.SetNeedsCommit(); 222 state.SetNeedsCommit();
222 223
223 EXPECT_FALSE(state.BeginFrameNeeded()); 224 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
225 EXPECT_TRUE(state.NeedsCommit());
224 226
225 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
226 EXPECT_FALSE(state.BeginFrameNeeded());
227 state.OnBeginImplFrame(); 227 state.OnBeginImplFrame();
228 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 228 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
229
229 state.OnBeginImplFrameDeadline(); 230 state.OnBeginImplFrameDeadline();
231 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
232 EXPECT_TRUE(state.NeedsCommit());
230 } 233 }
231 234
232 // If commit requested, begin a main frame. 235 // If commit requested, begin a main frame.
233 { 236 {
234 StateMachine state(default_scheduler_settings); 237 StateMachine state(default_scheduler_settings);
235 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE); 238 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE);
236 state.SetCanStart(); 239 state.SetCanStart();
237 state.UpdateState(state.NextAction()); 240 state.UpdateState(state.NextAction());
238 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 241 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
239 state.SetNeedsRedraw(false); 242 state.SetNeedsRedraw(false);
240 state.SetVisible(true); 243 state.SetVisible(true);
241 state.SetNeedsCommit(); 244 state.SetNeedsCommit();
242 245
243 EXPECT_TRUE(state.BeginFrameNeeded());
244
245 // Expect nothing to happen until after OnBeginImplFrame. 246 // Expect nothing to happen until after OnBeginImplFrame.
247 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
246 EXPECT_COMMIT_STATE(SchedulerStateMachine::COMMIT_STATE_IDLE); 248 EXPECT_COMMIT_STATE(SchedulerStateMachine::COMMIT_STATE_IDLE);
247 EXPECT_IMPL_FRAME_STATE(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE); 249 EXPECT_IMPL_FRAME_STATE(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE);
248 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); 250 EXPECT_TRUE(state.NeedsCommit());
251 EXPECT_TRUE(state.BeginFrameNeeded());
249 252
250 state.OnBeginImplFrame(); 253 state.OnBeginImplFrame();
251 EXPECT_ACTION_UPDATE_STATE( 254 EXPECT_ACTION_UPDATE_STATE(
252 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 255 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
256 EXPECT_COMMIT_STATE(
257 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT);
258 EXPECT_FALSE(state.NeedsCommit());
253 } 259 }
254 260
255 // If commit requested and can't draw, still begin a main frame. 261 // If commit requested and can't draw, still begin a main frame.
256 { 262 {
257 StateMachine state(default_scheduler_settings); 263 StateMachine state(default_scheduler_settings);
258 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE); 264 state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE);
259 state.SetCanStart(); 265 state.SetCanStart();
260 state.UpdateState(state.NextAction()); 266 state.UpdateState(state.NextAction());
261 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 267 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
262 state.SetNeedsRedraw(false); 268 state.SetNeedsRedraw(false);
263 state.SetVisible(true); 269 state.SetVisible(true);
264 state.SetNeedsCommit(); 270 state.SetNeedsCommit();
265 state.SetCanDraw(false); 271 state.SetCanDraw(false);
266 272
267 EXPECT_TRUE(state.BeginFrameNeeded());
268
269 // Expect nothing to happen until after OnBeginImplFrame. 273 // Expect nothing to happen until after OnBeginImplFrame.
274 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
270 EXPECT_COMMIT_STATE(SchedulerStateMachine::COMMIT_STATE_IDLE); 275 EXPECT_COMMIT_STATE(SchedulerStateMachine::COMMIT_STATE_IDLE);
271 EXPECT_IMPL_FRAME_STATE(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE); 276 EXPECT_IMPL_FRAME_STATE(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE);
272 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); 277 EXPECT_TRUE(state.BeginFrameNeeded());
273 278
274 state.OnBeginImplFrame(); 279 state.OnBeginImplFrame();
275 EXPECT_ACTION_UPDATE_STATE( 280 EXPECT_ACTION_UPDATE_STATE(
276 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 281 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
277 }
278
279 // Begin the frame, make sure needs_commit and commit_state update correctly.
280 {
281 StateMachine state(default_scheduler_settings);
282 state.SetCanStart();
283 state.UpdateState(state.NextAction());
284 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
285 state.SetVisible(true);
286 state.UpdateState(SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
287 EXPECT_COMMIT_STATE( 282 EXPECT_COMMIT_STATE(
288 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT); 283 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT);
289 EXPECT_FALSE(state.NeedsCommit()); 284 EXPECT_FALSE(state.NeedsCommit());
290 } 285 }
291 } 286 }
292 287
293 // Explicitly test main_frame_before_activation_enabled = true 288 // Explicitly test main_frame_before_activation_enabled = true
294 TEST(SchedulerStateMachineTest, MainFrameBeforeActivationEnabled) { 289 TEST(SchedulerStateMachineTest, MainFrameBeforeActivationEnabled) {
295 SchedulerSettings scheduler_settings; 290 SchedulerSettings scheduler_settings;
296 scheduler_settings.main_frame_before_activation_enabled = true; 291 scheduler_settings.main_frame_before_activation_enabled = true;
(...skipping 1682 matching lines...) Expand 10 before | Expand all | Expand 10 after
1979 EXPECT_FALSE(state.ProactiveBeginFrameWanted()); 1974 EXPECT_FALSE(state.ProactiveBeginFrameWanted());
1980 bool commit_has_no_updates = true; 1975 bool commit_has_no_updates = true;
1981 state.UpdateStateOnCommit(commit_has_no_updates); 1976 state.UpdateStateOnCommit(commit_has_no_updates);
1982 EXPECT_TRUE(state.ProactiveBeginFrameWanted()); 1977 EXPECT_TRUE(state.ProactiveBeginFrameWanted());
1983 state.OnBeginImplFrame(); 1978 state.OnBeginImplFrame();
1984 EXPECT_FALSE(state.ProactiveBeginFrameWanted()); 1979 EXPECT_FALSE(state.ProactiveBeginFrameWanted());
1985 } 1980 }
1986 1981
1987 } // namespace 1982 } // namespace
1988 } // namespace cc 1983 } // namespace cc
OLDNEW
« no previous file with comments | « cc/scheduler/scheduler_state_machine.cc ('k') | cc/scheduler/scheduler_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698