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

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

Issue 303573002: cc: Add Scheduler test for SetSwapUsedIncompleteTile (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | 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 #include "cc/scheduler/scheduler.h" 4 #include "cc/scheduler/scheduler.h"
5 5
6 #include <string> 6 #include <string>
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/memory/scoped_vector.h" 10 #include "base/memory/scoped_vector.h"
(...skipping 22 matching lines...) Expand all
33 namespace cc { 33 namespace cc {
34 namespace { 34 namespace {
35 35
36 class FakeSchedulerClient; 36 class FakeSchedulerClient;
37 37
38 void InitializeOutputSurfaceAndFirstCommit(Scheduler* scheduler, 38 void InitializeOutputSurfaceAndFirstCommit(Scheduler* scheduler,
39 FakeSchedulerClient* client); 39 FakeSchedulerClient* client);
40 40
41 class FakeSchedulerClient : public SchedulerClient { 41 class FakeSchedulerClient : public SchedulerClient {
42 public: 42 public:
43 FakeSchedulerClient() : needs_begin_frame_(false), automatic_swap_ack_(true) { 43 FakeSchedulerClient() : needs_begin_frame_(false),
44 automatic_swap_ack_(true),
45 contain_incomplete_tile_(false) {
brianderson 2014/05/27 21:15:57 swap_contains_incomplete_tile_
simonhong 2014/05/28 00:09:35 Done.
44 Reset(); 46 Reset();
45 } 47 }
46 48
47 void Reset() { 49 void Reset() {
48 actions_.clear(); 50 actions_.clear();
49 states_.clear(); 51 states_.clear();
50 draw_will_happen_ = true; 52 draw_will_happen_ = true;
51 swap_will_happen_if_draw_happens_ = true; 53 swap_will_happen_if_draw_happens_ = true;
52 num_draws_ = 0; 54 num_draws_ = 0;
53 log_anticipated_draw_time_change_ = false; 55 log_anticipated_draw_time_change_ = false;
(...skipping 21 matching lines...) Expand all
75 77
76 base::TestSimpleTaskRunner& task_runner() { return *task_runner_; } 78 base::TestSimpleTaskRunner& task_runner() { return *task_runner_; }
77 79
78 int ActionIndex(const char* action) const { 80 int ActionIndex(const char* action) const {
79 for (size_t i = 0; i < actions_.size(); i++) 81 for (size_t i = 0; i < actions_.size(); i++)
80 if (!strcmp(actions_[i], action)) 82 if (!strcmp(actions_[i], action))
81 return i; 83 return i;
82 return -1; 84 return -1;
83 } 85 }
84 86
87 void set_contain_incomplete_tile(bool contain) {
brianderson 2014/05/27 21:15:57 SetSwapContainsIncompleteTile
simonhong 2014/05/28 00:09:35 Done.
88 contain_incomplete_tile_ = contain;
89 }
90
85 bool HasAction(const char* action) const { 91 bool HasAction(const char* action) const {
86 return ActionIndex(action) >= 0; 92 return ActionIndex(action) >= 0;
87 } 93 }
88 94
89 void SetDrawWillHappen(bool draw_will_happen) { 95 void SetDrawWillHappen(bool draw_will_happen) {
90 draw_will_happen_ = draw_will_happen; 96 draw_will_happen_ = draw_will_happen;
91 } 97 }
92 void SetSwapWillHappenIfDrawHappens(bool swap_will_happen_if_draw_happens) { 98 void SetSwapWillHappenIfDrawHappens(bool swap_will_happen_if_draw_happens) {
93 swap_will_happen_if_draw_happens_ = swap_will_happen_if_draw_happens; 99 swap_will_happen_if_draw_happens_ = swap_will_happen_if_draw_happens;
94 } 100 }
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
170 176
171 virtual void DidBeginImplFrameDeadline() OVERRIDE {} 177 virtual void DidBeginImplFrameDeadline() OVERRIDE {}
172 178
173 protected: 179 protected:
174 bool needs_begin_frame_; 180 bool needs_begin_frame_;
175 bool draw_will_happen_; 181 bool draw_will_happen_;
176 bool swap_will_happen_if_draw_happens_; 182 bool swap_will_happen_if_draw_happens_;
177 bool automatic_swap_ack_; 183 bool automatic_swap_ack_;
178 int num_draws_; 184 int num_draws_;
179 bool log_anticipated_draw_time_change_; 185 bool log_anticipated_draw_time_change_;
186 bool contain_incomplete_tile_;
brianderson 2014/05/27 21:15:57 This isn't used by the base class. Can you put it
simonhong 2014/05/28 00:09:35 Ah.. yes. SchedulerClientNeedsUpdateVisibleTiles i
180 base::TimeTicks posted_begin_impl_frame_deadline_; 187 base::TimeTicks posted_begin_impl_frame_deadline_;
181 std::vector<const char*> actions_; 188 std::vector<const char*> actions_;
182 ScopedVector<base::Value> states_; 189 ScopedVector<base::Value> states_;
183 scoped_ptr<Scheduler> scheduler_; 190 scoped_ptr<Scheduler> scheduler_;
184 scoped_refptr<base::TestSimpleTaskRunner> task_runner_; 191 scoped_refptr<base::TestSimpleTaskRunner> task_runner_;
185 }; 192 };
186 193
187 void InitializeOutputSurfaceAndFirstCommit(Scheduler* scheduler, 194 void InitializeOutputSurfaceAndFirstCommit(Scheduler* scheduler,
188 FakeSchedulerClient* client) { 195 FakeSchedulerClient* client) {
189 bool client_initiates_begin_frame = 196 bool client_initiates_begin_frame =
(...skipping 678 matching lines...) Expand 10 before | Expand all | Expand 10 after
868 EXPECT_TRUE(client.HasAction("ScheduledActionDrawAndSwapIfPossible")); 875 EXPECT_TRUE(client.HasAction("ScheduledActionDrawAndSwapIfPossible"));
869 EXPECT_TRUE(client.HasAction("ScheduledActionManageTiles")); 876 EXPECT_TRUE(client.HasAction("ScheduledActionManageTiles"));
870 EXPECT_LT(client.ActionIndex("ScheduledActionDrawAndSwapIfPossible"), 877 EXPECT_LT(client.ActionIndex("ScheduledActionDrawAndSwapIfPossible"),
871 client.ActionIndex("ScheduledActionManageTiles")); 878 client.ActionIndex("ScheduledActionManageTiles"));
872 EXPECT_FALSE(scheduler->RedrawPending()); 879 EXPECT_FALSE(scheduler->RedrawPending());
873 EXPECT_FALSE(scheduler->ManageTilesPending()); 880 EXPECT_FALSE(scheduler->ManageTilesPending());
874 EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending()); 881 EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
875 scheduler->DidManageTiles(); // Corresponds to ScheduledActionManageTiles 882 scheduler->DidManageTiles(); // Corresponds to ScheduledActionManageTiles
876 } 883 }
877 884
885 class SchedulerClientNeedsUpdateVisibleTiles : public FakeSchedulerClient {
886 public:
887 virtual DrawResult ScheduledActionDrawAndSwapIfPossible()
888 OVERRIDE {
889 actions_.push_back("ScheduledActionDrawAndSwapIfPossible");
890 states_.push_back(scheduler_->AsValue().release());
891 num_draws_++;
892 DrawResult result =
893 draw_will_happen_ ? DRAW_SUCCESS : DRAW_ABORTED_CHECKERBOARD_ANIMATIONS;
894 bool swap_will_happen =
895 draw_will_happen_ && swap_will_happen_if_draw_happens_;
896 if (swap_will_happen) {
897 scheduler_->DidSwapBuffers();
898 if (contain_incomplete_tile_) {
899 scheduler_->SetSwapUsedIncompleteTile(true);
900 contain_incomplete_tile_ = false;
901 }
902 if (automatic_swap_ack_)
903 scheduler_->DidSwapBuffersComplete();
904 }
905 return result;
906 }
907 };
908
909 TEST(SchedulerTest, ShouldUpdateVisibleTiles) {
910 SchedulerClientNeedsUpdateVisibleTiles client;
911 SchedulerSettings scheduler_settings;
912 scheduler_settings.impl_side_painting = true;
913 Scheduler* scheduler = client.CreateScheduler(scheduler_settings);
914 scheduler->SetCanStart();
915 scheduler->SetVisible(true);
916 scheduler->SetCanDraw(true);
917 InitializeOutputSurfaceAndFirstCommit(scheduler, &client);
918
919 // SetNeedsCommit should begin the frame.
920 client.Reset();
921 scheduler->SetNeedsCommit();
922 EXPECT_SINGLE_ACTION("SetNeedsBeginFrame", client);
923
924 client.Reset();
925 scheduler->BeginFrame(CreateBeginFrameArgsForTesting());
926 EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
927 EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2);
928 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
929
930 client.Reset();
931 scheduler->NotifyBeginMainFrameStarted();
932 scheduler->NotifyReadyToCommit();
933 EXPECT_SINGLE_ACTION("ScheduledActionCommit", client);
934
935 client.Reset();
936 scheduler->NotifyReadyToActivate();
937 EXPECT_SINGLE_ACTION("ScheduledActionActivatePendingTree", client);
938
939 client.Reset();
940 client.set_contain_incomplete_tile(true);
941 client.task_runner().RunPendingTasks(); // Run posted deadline.
942 EXPECT_ACTION("ScheduledActionAnimate", client, 0, 3);
943 EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client, 1, 3);
944 EXPECT_ACTION("ScheduledActionUpdateVisibleTiles", client, 2, 3);
brianderson 2014/05/27 21:15:57 After this point, can you check that needs_redraw
945 }
946
878 TEST(SchedulerTest, TriggerBeginFrameDeadlineEarly) { 947 TEST(SchedulerTest, TriggerBeginFrameDeadlineEarly) {
879 SchedulerClientNeedsManageTilesInDraw client; 948 SchedulerClientNeedsManageTilesInDraw client;
880 SchedulerSettings default_scheduler_settings; 949 SchedulerSettings default_scheduler_settings;
881 Scheduler* scheduler = client.CreateScheduler(default_scheduler_settings); 950 Scheduler* scheduler = client.CreateScheduler(default_scheduler_settings);
882 scheduler->SetCanStart(); 951 scheduler->SetCanStart();
883 scheduler->SetVisible(true); 952 scheduler->SetVisible(true);
884 scheduler->SetCanDraw(true); 953 scheduler->SetCanDraw(true);
885 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); 954 InitializeOutputSurfaceAndFirstCommit(scheduler, &client);
886 955
887 client.Reset(); 956 client.Reset();
(...skipping 526 matching lines...) Expand 10 before | Expand all | Expand 10 after
1414 TEST(SchedulerTest, 1483 TEST(SchedulerTest,
1415 SyntheticBeginFrames_And_VSyncThrottlingDisabled_SwapThrottled) { 1484 SyntheticBeginFrames_And_VSyncThrottlingDisabled_SwapThrottled) {
1416 bool begin_frame_scheduling_enabled = false; 1485 bool begin_frame_scheduling_enabled = false;
1417 bool throttle_frame_production = false; 1486 bool throttle_frame_production = false;
1418 BeginFramesNotFromClient_SwapThrottled(begin_frame_scheduling_enabled, 1487 BeginFramesNotFromClient_SwapThrottled(begin_frame_scheduling_enabled,
1419 throttle_frame_production); 1488 throttle_frame_production);
1420 } 1489 }
1421 1490
1422 } // namespace 1491 } // namespace
1423 } // namespace cc 1492 } // namespace cc
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698