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

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

Issue 1336813002: cc: Don't recreate lost OutputSurface when hidden (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: tests Created 5 years, 3 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') | no next file » | 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 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
45 if (state.begin_impl_frame_state() == \ 45 if (state.begin_impl_frame_state() == \
46 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING) \ 46 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING) \
47 state.OnBeginImplFrameDeadlinePending(); \ 47 state.OnBeginImplFrameDeadlinePending(); \
48 if (state.begin_impl_frame_state() == \ 48 if (state.begin_impl_frame_state() == \
49 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE) \ 49 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE) \
50 state.OnBeginImplFrameIdle(); \ 50 state.OnBeginImplFrameIdle(); \
51 } 51 }
52 52
53 #define SET_UP_STATE(state) \ 53 #define SET_UP_STATE(state) \
54 state.SetCanStart(); \ 54 state.SetCanStart(); \
55 state.SetVisible(true); \
55 EXPECT_ACTION_UPDATE_STATE( \ 56 EXPECT_ACTION_UPDATE_STATE( \
56 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); \ 57 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); \
57 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); \ 58 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); \
58 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); \ 59 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); \
59 state.SetVisible(true); \
60 state.SetCanDraw(true); 60 state.SetCanDraw(true);
61 61
62 namespace cc { 62 namespace cc {
63 63
64 namespace { 64 namespace {
65 65
66 void WillPerformAction(SchedulerStateMachine* sm, 66 void WillPerformAction(SchedulerStateMachine* sm,
67 SchedulerStateMachine::Action action) { 67 SchedulerStateMachine::Action action) {
68 switch (action) { 68 switch (action) {
69 case SchedulerStateMachine::ACTION_NONE: 69 case SchedulerStateMachine::ACTION_NONE:
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
199 199
200 using SchedulerStateMachine::ShouldTriggerBeginImplFrameDeadlineImmediately; 200 using SchedulerStateMachine::ShouldTriggerBeginImplFrameDeadlineImmediately;
201 using SchedulerStateMachine::ProactiveBeginFrameWanted; 201 using SchedulerStateMachine::ProactiveBeginFrameWanted;
202 using SchedulerStateMachine::WillCommit; 202 using SchedulerStateMachine::WillCommit;
203 }; 203 };
204 204
205 TEST(SchedulerStateMachineTest, BeginFrameNeeded) { 205 TEST(SchedulerStateMachineTest, BeginFrameNeeded) {
206 SchedulerSettings default_scheduler_settings; 206 SchedulerSettings default_scheduler_settings;
207 StateMachine state(default_scheduler_settings); 207 StateMachine state(default_scheduler_settings);
208 state.SetCanStart(); 208 state.SetCanStart();
209 state.SetVisible(true);
209 EXPECT_ACTION_UPDATE_STATE( 210 EXPECT_ACTION_UPDATE_STATE(
210 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); 211 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION);
211 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 212 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
212 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 213 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
213 state.SetBeginMainFrameState( 214 state.SetBeginMainFrameState(
214 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE); 215 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE);
215 216
216 // Don't request BeginFrames if we are idle. 217 // Don't request BeginFrames if we are idle.
217 state.SetVisible(true);
218 state.SetNeedsRedraw(false); 218 state.SetNeedsRedraw(false);
219 state.SetNeedsAnimateForTest(false); 219 state.SetNeedsAnimateForTest(false);
220 EXPECT_FALSE(state.BeginFrameNeeded()); 220 EXPECT_FALSE(state.BeginFrameNeeded());
221 221
222 // Request BeginFrames if we are ready to draw. 222 // Request BeginFrames if we are ready to draw.
223 state.SetVisible(true); 223 state.SetVisible(true);
224 state.SetNeedsRedraw(true); 224 state.SetNeedsRedraw(true);
225 state.SetNeedsAnimateForTest(false); 225 state.SetNeedsAnimateForTest(false);
226 EXPECT_TRUE(state.BeginFrameNeeded()); 226 EXPECT_TRUE(state.BeginFrameNeeded());
227 227
(...skipping 20 matching lines...) Expand all
248 EXPECT_FALSE(state.BeginFrameNeeded()); 248 EXPECT_FALSE(state.BeginFrameNeeded());
249 } 249 }
250 250
251 TEST(SchedulerStateMachineTest, TestNextActionBeginsMainFrameIfNeeded) { 251 TEST(SchedulerStateMachineTest, TestNextActionBeginsMainFrameIfNeeded) {
252 SchedulerSettings default_scheduler_settings; 252 SchedulerSettings default_scheduler_settings;
253 253
254 // If no commit needed, do nothing. 254 // If no commit needed, do nothing.
255 { 255 {
256 StateMachine state(default_scheduler_settings); 256 StateMachine state(default_scheduler_settings);
257 state.SetCanStart(); 257 state.SetCanStart();
258 state.SetVisible(true);
258 EXPECT_ACTION_UPDATE_STATE( 259 EXPECT_ACTION_UPDATE_STATE(
259 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); 260 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION);
260 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 261 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
261 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 262 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
262 state.SetBeginMainFrameState( 263 state.SetBeginMainFrameState(
263 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE); 264 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE);
264 state.SetNeedsRedraw(false); 265 state.SetNeedsRedraw(false);
265 state.SetVisible(true);
266 266
267 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 267 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
268 EXPECT_FALSE(state.NeedsCommit()); 268 EXPECT_FALSE(state.NeedsCommit());
269 269
270 state.OnBeginImplFrame(); 270 state.OnBeginImplFrame();
271 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 271 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
272 272
273 state.OnBeginImplFrameDeadline(); 273 state.OnBeginImplFrameDeadline();
274 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 274 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
275 EXPECT_FALSE(state.NeedsCommit()); 275 EXPECT_FALSE(state.NeedsCommit());
(...skipping 18 matching lines...) Expand all
294 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 294 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
295 EXPECT_TRUE(state.NeedsCommit()); 295 EXPECT_TRUE(state.NeedsCommit());
296 } 296 }
297 297
298 // If commit requested, begin a main frame. 298 // If commit requested, begin a main frame.
299 { 299 {
300 StateMachine state(default_scheduler_settings); 300 StateMachine state(default_scheduler_settings);
301 state.SetBeginMainFrameState( 301 state.SetBeginMainFrameState(
302 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE); 302 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE);
303 state.SetCanStart(); 303 state.SetCanStart();
304 state.SetVisible(true);
304 EXPECT_ACTION_UPDATE_STATE( 305 EXPECT_ACTION_UPDATE_STATE(
305 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); 306 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION);
306 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 307 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
307 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 308 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
308 state.SetNeedsRedraw(false); 309 state.SetNeedsRedraw(false);
309 state.SetVisible(true);
310 state.SetNeedsBeginMainFrame(); 310 state.SetNeedsBeginMainFrame();
311 311
312 // Expect nothing to happen until after OnBeginImplFrame. 312 // Expect nothing to happen until after OnBeginImplFrame.
313 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 313 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
314 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE); 314 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE);
315 EXPECT_IMPL_FRAME_STATE(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE); 315 EXPECT_IMPL_FRAME_STATE(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE);
316 EXPECT_TRUE(state.NeedsCommit()); 316 EXPECT_TRUE(state.NeedsCommit());
317 EXPECT_TRUE(state.BeginFrameNeeded()); 317 EXPECT_TRUE(state.BeginFrameNeeded());
318 318
319 state.OnBeginImplFrame(); 319 state.OnBeginImplFrame();
320 EXPECT_ACTION_UPDATE_STATE( 320 EXPECT_ACTION_UPDATE_STATE(
321 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 321 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
322 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_SENT); 322 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_SENT);
323 EXPECT_FALSE(state.NeedsCommit()); 323 EXPECT_FALSE(state.NeedsCommit());
324 } 324 }
325 325
326 // If commit requested and can't draw, still begin a main frame. 326 // If commit requested and can't draw, still begin a main frame.
327 { 327 {
328 StateMachine state(default_scheduler_settings); 328 StateMachine state(default_scheduler_settings);
329 state.SetBeginMainFrameState( 329 state.SetBeginMainFrameState(
330 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE); 330 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE);
331 state.SetCanStart(); 331 state.SetCanStart();
332 state.SetVisible(true);
332 EXPECT_ACTION_UPDATE_STATE( 333 EXPECT_ACTION_UPDATE_STATE(
333 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); 334 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION);
334 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 335 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
335 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 336 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
336 state.SetNeedsRedraw(false); 337 state.SetNeedsRedraw(false);
337 state.SetVisible(true);
338 state.SetNeedsBeginMainFrame(); 338 state.SetNeedsBeginMainFrame();
339 state.SetCanDraw(false); 339 state.SetCanDraw(false);
340 340
341 // Expect nothing to happen until after OnBeginImplFrame. 341 // Expect nothing to happen until after OnBeginImplFrame.
342 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 342 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
343 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE); 343 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE);
344 EXPECT_IMPL_FRAME_STATE(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE); 344 EXPECT_IMPL_FRAME_STATE(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE);
345 EXPECT_TRUE(state.BeginFrameNeeded()); 345 EXPECT_TRUE(state.BeginFrameNeeded());
346 346
347 state.OnBeginImplFrame(); 347 state.OnBeginImplFrame();
(...skipping 366 matching lines...) Expand 10 before | Expand all | Expand 10 after
714 size_t num_begin_main_frame_states = 714 size_t num_begin_main_frame_states =
715 sizeof(begin_main_frame_states) / 715 sizeof(begin_main_frame_states) /
716 sizeof(SchedulerStateMachine::BeginMainFrameState); 716 sizeof(SchedulerStateMachine::BeginMainFrameState);
717 size_t num_begin_impl_frame_states = 717 size_t num_begin_impl_frame_states =
718 sizeof(all_begin_impl_frame_states) / 718 sizeof(all_begin_impl_frame_states) /
719 sizeof(SchedulerStateMachine::BeginImplFrameState); 719 sizeof(SchedulerStateMachine::BeginImplFrameState);
720 for (size_t i = 0; i < num_begin_main_frame_states; ++i) { 720 for (size_t i = 0; i < num_begin_main_frame_states; ++i) {
721 for (size_t j = 0; j < num_begin_impl_frame_states; ++j) { 721 for (size_t j = 0; j < num_begin_impl_frame_states; ++j) {
722 StateMachine state(default_scheduler_settings); 722 StateMachine state(default_scheduler_settings);
723 state.SetCanStart(); 723 state.SetCanStart();
724 state.SetVisible(true);
724 EXPECT_ACTION_UPDATE_STATE( 725 EXPECT_ACTION_UPDATE_STATE(
725 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); 726 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION);
726 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 727 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
727 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 728 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
728 state.SetBeginMainFrameState(begin_main_frame_states[i]); 729 state.SetBeginMainFrameState(begin_main_frame_states[i]);
729 state.SetBeginImplFrameState(all_begin_impl_frame_states[j]); 730 state.SetBeginImplFrameState(all_begin_impl_frame_states[j]);
730 bool visible = 731 bool visible =
731 (all_begin_impl_frame_states[j] != 732 (all_begin_impl_frame_states[j] !=
732 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE); 733 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE);
733 state.SetVisible(visible); 734 state.SetVisible(visible);
734 735
735 // Case 1: needs_begin_main_frame=false 736 // Case 1: needs_begin_main_frame=false
736 EXPECT_NE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE, 737 EXPECT_NE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE,
737 state.NextAction()); 738 state.NextAction());
738 739
739 // Case 2: needs_begin_main_frame=true 740 // Case 2: needs_begin_main_frame=true
740 state.SetNeedsBeginMainFrame(); 741 state.SetNeedsBeginMainFrame();
741 EXPECT_NE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE, 742 EXPECT_NE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE,
742 state.NextAction()) 743 state.NextAction())
743 << state.AsValue()->ToString(); 744 << state.AsValue()->ToString();
744 } 745 }
745 } 746 }
746 747
747 // When in BeginImplFrame deadline we should always draw for SetNeedsRedraw 748 // When in BeginImplFrame deadline we should always draw for SetNeedsRedraw
748 // except if we're ready to commit, in which case we expect a commit first. 749 // except if we're ready to commit, in which case we expect a commit first.
749 for (size_t i = 0; i < num_begin_main_frame_states; ++i) { 750 for (size_t i = 0; i < num_begin_main_frame_states; ++i) {
750 StateMachine state(default_scheduler_settings); 751 StateMachine state(default_scheduler_settings);
751 state.SetCanStart(); 752 state.SetCanStart();
753 state.SetVisible(true);
752 EXPECT_ACTION_UPDATE_STATE( 754 EXPECT_ACTION_UPDATE_STATE(
753 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); 755 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION);
754 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 756 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
755 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 757 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
756 state.SetCanDraw(true); 758 state.SetCanDraw(true);
757 state.SetBeginMainFrameState(begin_main_frame_states[i]); 759 state.SetBeginMainFrameState(begin_main_frame_states[i]);
758 state.SetBeginImplFrameState( 760 state.SetBeginImplFrameState(
759 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE); 761 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE);
760 762
761 state.SetNeedsRedraw(true); 763 state.SetNeedsRedraw(true);
762 state.SetVisible(true);
763 764
764 SchedulerStateMachine::Action expected_action; 765 SchedulerStateMachine::Action expected_action;
765 if (begin_main_frame_states[i] == 766 if (begin_main_frame_states[i] ==
766 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_READY_TO_COMMIT) { 767 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_READY_TO_COMMIT) {
767 expected_action = SchedulerStateMachine::ACTION_COMMIT; 768 expected_action = SchedulerStateMachine::ACTION_COMMIT;
768 } else { 769 } else {
769 expected_action = SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE; 770 expected_action = SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE;
770 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 771 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE);
771 } 772 }
772 773
(...skipping 10 matching lines...) Expand all
783 SchedulerSettings default_scheduler_settings; 784 SchedulerSettings default_scheduler_settings;
784 785
785 size_t num_begin_main_frame_states = 786 size_t num_begin_main_frame_states =
786 sizeof(begin_main_frame_states) / 787 sizeof(begin_main_frame_states) /
787 sizeof(SchedulerStateMachine::BeginMainFrameState); 788 sizeof(SchedulerStateMachine::BeginMainFrameState);
788 for (size_t i = 0; i < num_begin_main_frame_states; ++i) { 789 for (size_t i = 0; i < num_begin_main_frame_states; ++i) {
789 // There shouldn't be any drawing regardless of BeginImplFrame. 790 // There shouldn't be any drawing regardless of BeginImplFrame.
790 for (size_t j = 0; j < 2; ++j) { 791 for (size_t j = 0; j < 2; ++j) {
791 StateMachine state(default_scheduler_settings); 792 StateMachine state(default_scheduler_settings);
792 state.SetCanStart(); 793 state.SetCanStart();
794 state.SetVisible(true);
793 EXPECT_ACTION_UPDATE_STATE( 795 EXPECT_ACTION_UPDATE_STATE(
794 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); 796 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION);
795 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 797 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
796 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 798 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
797 state.SetBeginMainFrameState(begin_main_frame_states[i]); 799 state.SetBeginMainFrameState(begin_main_frame_states[i]);
798 state.SetVisible(false); 800 state.SetVisible(false);
799 state.SetNeedsRedraw(true); 801 state.SetNeedsRedraw(true);
800 if (j == 1) { 802 if (j == 1) {
801 state.SetBeginImplFrameState( 803 state.SetBeginImplFrameState(
802 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE); 804 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE);
(...skipping 16 matching lines...) Expand all
819 SchedulerSettings default_scheduler_settings; 821 SchedulerSettings default_scheduler_settings;
820 822
821 size_t num_begin_main_frame_states = 823 size_t num_begin_main_frame_states =
822 sizeof(begin_main_frame_states) / 824 sizeof(begin_main_frame_states) /
823 sizeof(SchedulerStateMachine::BeginMainFrameState); 825 sizeof(SchedulerStateMachine::BeginMainFrameState);
824 for (size_t i = 0; i < num_begin_main_frame_states; ++i) { 826 for (size_t i = 0; i < num_begin_main_frame_states; ++i) {
825 // There shouldn't be any drawing regardless of BeginImplFrame. 827 // There shouldn't be any drawing regardless of BeginImplFrame.
826 for (size_t j = 0; j < 2; ++j) { 828 for (size_t j = 0; j < 2; ++j) {
827 StateMachine state(default_scheduler_settings); 829 StateMachine state(default_scheduler_settings);
828 state.SetCanStart(); 830 state.SetCanStart();
831 state.SetVisible(true);
829 EXPECT_ACTION_UPDATE_STATE( 832 EXPECT_ACTION_UPDATE_STATE(
830 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); 833 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION);
831 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 834 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
832 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 835 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
833 state.SetBeginMainFrameState(begin_main_frame_states[i]); 836 state.SetBeginMainFrameState(begin_main_frame_states[i]);
834 state.SetVisible(false); 837 state.SetVisible(false);
835 state.SetNeedsRedraw(true); 838 state.SetNeedsRedraw(true);
836 if (j == 1) 839 if (j == 1)
837 state.OnBeginImplFrame(); 840 state.OnBeginImplFrame();
838 841
839 state.SetCanDraw(false); 842 state.SetCanDraw(false);
840 EXPECT_NE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE, 843 EXPECT_NE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE,
841 state.NextAction()); 844 state.NextAction());
842 } 845 }
843 } 846 }
844 } 847 }
845 848
846 TEST(SchedulerStateMachineTest, 849 TEST(SchedulerStateMachineTest,
847 TestCanRedrawWithWaitingForFirstDrawMakesProgress) { 850 TestCanRedrawWithWaitingForFirstDrawMakesProgress) {
848 SchedulerSettings default_scheduler_settings; 851 SchedulerSettings default_scheduler_settings;
849 StateMachine state(default_scheduler_settings); 852 StateMachine state(default_scheduler_settings);
850 state.SetCanStart(); 853 state.SetCanStart();
854 state.SetVisible(true);
851 EXPECT_ACTION_UPDATE_STATE( 855 EXPECT_ACTION_UPDATE_STATE(
852 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); 856 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION);
853 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 857 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
854 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 858 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
855 859
856 state.SetActiveTreeNeedsFirstDraw(true); 860 state.SetActiveTreeNeedsFirstDraw(true);
857 state.SetNeedsBeginMainFrame(); 861 state.SetNeedsBeginMainFrame();
858 state.SetNeedsRedraw(true); 862 state.SetNeedsRedraw(true);
859 state.SetVisible(true);
860 state.SetCanDraw(false); 863 state.SetCanDraw(false);
861 state.OnBeginImplFrame(); 864 state.OnBeginImplFrame();
862 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); 865 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE);
863 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT); 866 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT);
864 EXPECT_ACTION_UPDATE_STATE( 867 EXPECT_ACTION_UPDATE_STATE(
865 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 868 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
866 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 869 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
867 state.NotifyBeginMainFrameStarted(); 870 state.NotifyBeginMainFrameStarted();
868 state.NotifyReadyToCommit(); 871 state.NotifyReadyToCommit();
869 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); 872 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT);
(...skipping 312 matching lines...) Expand 10 before | Expand all | Expand 10 after
1182 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1185 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1183 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE); 1186 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE);
1184 EXPECT_FALSE(state.needs_redraw()); 1187 EXPECT_FALSE(state.needs_redraw());
1185 1188
1186 // Next BeginImplFrame should initiate second commit. 1189 // Next BeginImplFrame should initiate second commit.
1187 state.OnBeginImplFrame(); 1190 state.OnBeginImplFrame();
1188 EXPECT_ACTION_UPDATE_STATE( 1191 EXPECT_ACTION_UPDATE_STATE(
1189 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1192 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
1190 } 1193 }
1191 1194
1192 TEST(SchedulerStateMachineTest, TestRequestCommitInvisible) { 1195 TEST(SchedulerStateMachineTest, TestRequestCommitInvisible) {
brianderson 2015/09/15 18:37:46 While you are at it, can you rename this test to T
no sievers 2015/09/15 20:10:20 Done.
1193 SchedulerSettings default_scheduler_settings; 1196 SchedulerSettings default_scheduler_settings;
1194 StateMachine state(default_scheduler_settings); 1197 StateMachine state(default_scheduler_settings);
1195 state.SetCanStart(); 1198 state.SetCanStart();
1199 state.SetVisible(true);
1196 EXPECT_ACTION_UPDATE_STATE( 1200 EXPECT_ACTION_UPDATE_STATE(
1197 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); 1201 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION);
1198 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1202 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1199 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 1203 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
1204 state.SetVisible(false);
1200 state.SetNeedsBeginMainFrame(); 1205 state.SetNeedsBeginMainFrame();
1201 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1206 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1202 } 1207 }
1203 1208
1209 TEST(SchedulerStateMachineTest, TestNoRequestOutputSurfaceWhenInvisible) {
1210 SchedulerSettings default_scheduler_settings;
1211 StateMachine state(default_scheduler_settings);
1212 state.SetCanStart();
1213 state.SetVisible(true);
brianderson 2015/09/15 18:37:46 Above this line, can you also check for ACTION_NON
no sievers 2015/09/15 20:10:20 Done. Note that the default for LayerTreeHost is v
1214 EXPECT_ACTION_UPDATE_STATE(
1215 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION);
1216 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1217 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
1218 state.SetVisible(false);
1219 state.DidLoseOutputSurface();
1220 state.SetNeedsBeginMainFrame();
1221 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1222 state.SetVisible(true);
1223 EXPECT_ACTION_UPDATE_STATE(
1224 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION);
1225 }
1226
1204 // See ThreadProxy::BeginMainFrame "EarlyOut_NotVisible" / 1227 // See ThreadProxy::BeginMainFrame "EarlyOut_NotVisible" /
1205 // "EarlyOut_OutputSurfaceLost" cases. 1228 // "EarlyOut_OutputSurfaceLost" cases.
1206 TEST(SchedulerStateMachineTest, TestAbortBeginMainFrameBecauseInvisible) { 1229 TEST(SchedulerStateMachineTest, TestAbortBeginMainFrameBecauseInvisible) {
1207 SchedulerSettings default_scheduler_settings; 1230 SchedulerSettings default_scheduler_settings;
1208 StateMachine state(default_scheduler_settings); 1231 StateMachine state(default_scheduler_settings);
1209 SET_UP_STATE(state) 1232 SET_UP_STATE(state)
1210 1233
1211 // Start clean and set commit. 1234 // Start clean and set commit.
1212 state.SetNeedsBeginMainFrame(); 1235 state.SetNeedsBeginMainFrame();
1213 1236
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
1252 // We should be starting the commit now. 1275 // We should be starting the commit now.
1253 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_SENT); 1276 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_SENT);
1254 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1277 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1255 } 1278 }
1256 1279
1257 // See ThreadProxy::BeginMainFrame "EarlyOut_NoUpdates" case. 1280 // See ThreadProxy::BeginMainFrame "EarlyOut_NoUpdates" case.
1258 TEST(SchedulerStateMachineTest, TestAbortBeginMainFrameBecauseCommitNotNeeded) { 1281 TEST(SchedulerStateMachineTest, TestAbortBeginMainFrameBecauseCommitNotNeeded) {
1259 SchedulerSettings default_scheduler_settings; 1282 SchedulerSettings default_scheduler_settings;
1260 StateMachine state(default_scheduler_settings); 1283 StateMachine state(default_scheduler_settings);
1261 state.SetCanStart(); 1284 state.SetCanStart();
1285 state.SetVisible(true);
1262 EXPECT_ACTION_UPDATE_STATE( 1286 EXPECT_ACTION_UPDATE_STATE(
1263 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); 1287 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION);
1264 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1288 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1265 state.DidCreateAndInitializeOutputSurface(); 1289 state.DidCreateAndInitializeOutputSurface();
1266 state.SetVisible(true);
1267 state.SetCanDraw(true); 1290 state.SetCanDraw(true);
1268 1291
1269 // Get into a begin frame / commit state. 1292 // Get into a begin frame / commit state.
1270 state.SetNeedsBeginMainFrame(); 1293 state.SetNeedsBeginMainFrame();
1271 state.OnBeginImplFrame(); 1294 state.OnBeginImplFrame();
1272 EXPECT_ACTION_UPDATE_STATE( 1295 EXPECT_ACTION_UPDATE_STATE(
1273 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1296 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
1274 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_SENT); 1297 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_SENT);
1275 EXPECT_FALSE(state.NeedsCommit()); 1298 EXPECT_FALSE(state.NeedsCommit());
1276 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); 1299 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE);
(...skipping 387 matching lines...) Expand 10 before | Expand all | Expand 10 after
1664 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); 1687 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE);
1665 1688
1666 EXPECT_TRUE(state.PendingDrawsShouldBeAborted()); 1689 EXPECT_TRUE(state.PendingDrawsShouldBeAborted());
1667 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT); 1690 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT);
1668 } 1691 }
1669 1692
1670 TEST(SchedulerStateMachineTest, TestNoBeginFrameNeededWhenInvisible) { 1693 TEST(SchedulerStateMachineTest, TestNoBeginFrameNeededWhenInvisible) {
1671 SchedulerSettings default_scheduler_settings; 1694 SchedulerSettings default_scheduler_settings;
1672 StateMachine state(default_scheduler_settings); 1695 StateMachine state(default_scheduler_settings);
1673 state.SetCanStart(); 1696 state.SetCanStart();
1697 state.SetVisible(true);
1674 EXPECT_ACTION_UPDATE_STATE( 1698 EXPECT_ACTION_UPDATE_STATE(
1675 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); 1699 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION);
1676 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1700 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1677 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 1701 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
1678 state.SetVisible(true);
1679 1702
1680 EXPECT_FALSE(state.BeginFrameNeeded()); 1703 EXPECT_FALSE(state.BeginFrameNeeded());
1681 state.SetNeedsRedraw(true); 1704 state.SetNeedsRedraw(true);
1682 EXPECT_TRUE(state.BeginFrameNeeded()); 1705 EXPECT_TRUE(state.BeginFrameNeeded());
1683 1706
1684 state.SetVisible(false); 1707 state.SetVisible(false);
1685 EXPECT_FALSE(state.BeginFrameNeeded()); 1708 EXPECT_FALSE(state.BeginFrameNeeded());
1686 1709
1687 state.SetVisible(true); 1710 state.SetVisible(true);
1688 EXPECT_TRUE(state.BeginFrameNeeded()); 1711 EXPECT_TRUE(state.BeginFrameNeeded());
1689 } 1712 }
1690 1713
1691 TEST(SchedulerStateMachineTest, TestNoBeginMainFrameWhenInvisible) { 1714 TEST(SchedulerStateMachineTest, TestNoBeginMainFrameWhenInvisible) {
1692 SchedulerSettings default_scheduler_settings; 1715 SchedulerSettings default_scheduler_settings;
1693 StateMachine state(default_scheduler_settings); 1716 StateMachine state(default_scheduler_settings);
1694 state.SetCanStart(); 1717 state.SetCanStart();
1718 state.SetVisible(true);
1695 EXPECT_ACTION_UPDATE_STATE( 1719 EXPECT_ACTION_UPDATE_STATE(
1696 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); 1720 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION);
1697 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1721 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1698 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 1722 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
1699 state.SetVisible(false); 1723 state.SetVisible(false);
1700 state.SetNeedsBeginMainFrame(); 1724 state.SetNeedsBeginMainFrame();
1701 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); 1725 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE);
1702 EXPECT_FALSE(state.BeginFrameNeeded()); 1726 EXPECT_FALSE(state.BeginFrameNeeded());
1703 1727
1704 // When become visible again, the needs commit should still be pending. 1728 // When become visible again, the needs commit should still be pending.
1705 state.SetVisible(true); 1729 state.SetVisible(true);
1706 EXPECT_TRUE(state.BeginFrameNeeded()); 1730 EXPECT_TRUE(state.BeginFrameNeeded());
1707 state.OnBeginImplFrame(); 1731 state.OnBeginImplFrame();
1708 EXPECT_ACTION_UPDATE_STATE( 1732 EXPECT_ACTION_UPDATE_STATE(
1709 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); 1733 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
1710 } 1734 }
1711 1735
1712 TEST(SchedulerStateMachineTest, TestFinishCommitWhenCommitInProgress) { 1736 TEST(SchedulerStateMachineTest, TestFinishCommitWhenCommitInProgress) {
1713 SchedulerSettings default_scheduler_settings; 1737 SchedulerSettings default_scheduler_settings;
1714 StateMachine state(default_scheduler_settings); 1738 StateMachine state(default_scheduler_settings);
1715 state.SetCanStart(); 1739 state.SetCanStart();
1740 state.SetVisible(true);
1716 EXPECT_ACTION_UPDATE_STATE( 1741 EXPECT_ACTION_UPDATE_STATE(
1717 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); 1742 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION);
1718 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); 1743 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
1719 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); 1744 state.CreateAndInitializeOutputSurfaceWithActivatedCommit();
1720 state.SetVisible(false); 1745 state.SetVisible(false);
1721 state.SetBeginMainFrameState( 1746 state.SetBeginMainFrameState(
1722 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_SENT); 1747 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_SENT);
1723 state.SetNeedsBeginMainFrame(); 1748 state.SetNeedsBeginMainFrame();
1724 1749
1725 // After the commit completes, activation and draw happen immediately 1750 // After the commit completes, activation and draw happen immediately
(...skipping 331 matching lines...) Expand 10 before | Expand all | Expand 10 after
2057 EXPECT_FALSE(state.ProactiveBeginFrameWanted()); 2082 EXPECT_FALSE(state.ProactiveBeginFrameWanted());
2058 bool commit_has_no_updates = true; 2083 bool commit_has_no_updates = true;
2059 state.WillCommit(commit_has_no_updates); 2084 state.WillCommit(commit_has_no_updates);
2060 EXPECT_TRUE(state.ProactiveBeginFrameWanted()); 2085 EXPECT_TRUE(state.ProactiveBeginFrameWanted());
2061 state.OnBeginImplFrame(); 2086 state.OnBeginImplFrame();
2062 EXPECT_FALSE(state.ProactiveBeginFrameWanted()); 2087 EXPECT_FALSE(state.ProactiveBeginFrameWanted());
2063 } 2088 }
2064 2089
2065 } // namespace 2090 } // namespace
2066 } // namespace cc 2091 } // namespace cc
OLDNEW
« no previous file with comments | « cc/scheduler/scheduler_state_machine.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698