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

Side by Side Diff: cc/trees/layer_tree_host_unittest.cc

Issue 900073003: cc: Rework how picture layer tiling set gets into raster queues. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: update Created 5 years, 10 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/trees/layer_tree_host_impl_unittest.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/trees/layer_tree_host.h" 5 #include "cc/trees/layer_tree_host.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/auto_reset.h" 9 #include "base/auto_reset.h"
10 #include "base/synchronization/lock.h" 10 #include "base/synchronization/lock.h"
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
71 namespace { 71 namespace {
72 72
73 class LayerTreeHostTest : public LayerTreeTest {}; 73 class LayerTreeHostTest : public LayerTreeTest {};
74 74
75 // Test if the LTHI receives ReadyToActivate notifications from the TileManager 75 // Test if the LTHI receives ReadyToActivate notifications from the TileManager
76 // when no raster tasks get scheduled. 76 // when no raster tasks get scheduled.
77 class LayerTreeHostTestReadyToActivateEmpty : public LayerTreeHostTest { 77 class LayerTreeHostTestReadyToActivateEmpty : public LayerTreeHostTest {
78 public: 78 public:
79 LayerTreeHostTestReadyToActivateEmpty() 79 LayerTreeHostTestReadyToActivateEmpty()
80 : did_notify_ready_to_activate_(false), 80 : did_notify_ready_to_activate_(false),
81 all_tiles_required_for_activation_are_ready_to_draw_(false), 81 all_tiles_required_for_activation_are_ready_to_draw_(false) {}
82 required_for_activation_count_(0) {}
83 82
84 void BeginTest() override { PostSetNeedsCommitToMainThread(); } 83 void BeginTest() override { PostSetNeedsCommitToMainThread(); }
85 84
86 void CommitCompleteOnThread(LayerTreeHostImpl* impl) override { 85 void CommitCompleteOnThread(LayerTreeHostImpl* impl) override {
87 const std::vector<PictureLayerImpl*>& layers = 86 bool ready_to_activate_on_commit_complete =
88 impl->sync_tree()->picture_layers(); 87 impl->tile_manager()->IsReadyToActivate();
89 required_for_activation_count_ = 0; 88 // This being true means that we have no tiles required for activation
90 for (const auto& layer : layers) { 89 // (since we had no time to prepare any tiles if they were required for
91 FakePictureLayerImpl* fake_layer = 90 // activation).
92 static_cast<FakePictureLayerImpl*>(layer); 91 EXPECT_TRUE(ready_to_activate_on_commit_complete);
93 required_for_activation_count_ +=
94 fake_layer->CountTilesRequiredForActivation();
95 }
96 } 92 }
97 93
98 void NotifyReadyToActivateOnThread(LayerTreeHostImpl* impl) override { 94 void NotifyReadyToActivateOnThread(LayerTreeHostImpl* impl) override {
99 did_notify_ready_to_activate_ = true; 95 did_notify_ready_to_activate_ = true;
100 all_tiles_required_for_activation_are_ready_to_draw_ = 96 all_tiles_required_for_activation_are_ready_to_draw_ =
101 impl->tile_manager()->IsReadyToActivate(); 97 impl->tile_manager()->IsReadyToActivate();
102 EndTest(); 98 EndTest();
103 } 99 }
104 100
105 void AfterTest() override { 101 void AfterTest() override {
106 EXPECT_TRUE(did_notify_ready_to_activate_); 102 EXPECT_TRUE(did_notify_ready_to_activate_);
107 EXPECT_TRUE(all_tiles_required_for_activation_are_ready_to_draw_); 103 EXPECT_TRUE(all_tiles_required_for_activation_are_ready_to_draw_);
108 EXPECT_EQ(size_t(0), required_for_activation_count_);
109 } 104 }
110 105
111 protected: 106 private:
112 bool did_notify_ready_to_activate_; 107 bool did_notify_ready_to_activate_;
113 bool all_tiles_required_for_activation_are_ready_to_draw_; 108 bool all_tiles_required_for_activation_are_ready_to_draw_;
114 size_t required_for_activation_count_;
115 }; 109 };
116 110
117 SINGLE_AND_MULTI_THREAD_IMPL_TEST_F(LayerTreeHostTestReadyToActivateEmpty); 111 SINGLE_AND_MULTI_THREAD_IMPL_TEST_F(LayerTreeHostTestReadyToActivateEmpty);
118 112
119 // Test if the LTHI receives ReadyToActivate notifications from the TileManager 113 // Test if the LTHI receives ReadyToActivate notifications from the TileManager
120 // when some raster tasks flagged as REQUIRED_FOR_ACTIVATION got scheduled. 114 // when some raster tasks flagged as REQUIRED_FOR_ACTIVATION got scheduled.
121 class LayerTreeHostTestReadyToActivateNonEmpty 115 class LayerTreeHostTestReadyToActivateNonEmpty : public LayerTreeHostTest {
122 : public LayerTreeHostTestReadyToActivateEmpty {
123 public: 116 public:
117 LayerTreeHostTestReadyToActivateNonEmpty()
118 : did_notify_ready_to_activate_(false),
119 all_tiles_required_for_activation_are_ready_to_draw_(false) {}
120
124 void SetupTree() override { 121 void SetupTree() override {
125 client_.set_fill_with_nonsolid_color(true); 122 client_.set_fill_with_nonsolid_color(true);
126 scoped_refptr<FakePictureLayer> root_layer = 123 scoped_refptr<FakePictureLayer> root_layer =
127 FakePictureLayer::Create(&client_); 124 FakePictureLayer::Create(&client_);
128 root_layer->SetBounds(gfx::Size(1024, 1024)); 125 root_layer->SetBounds(gfx::Size(1024, 1024));
129 root_layer->SetIsDrawable(true); 126 root_layer->SetIsDrawable(true);
130 127
131 layer_tree_host()->SetRootLayer(root_layer); 128 layer_tree_host()->SetRootLayer(root_layer);
132 LayerTreeHostTest::SetupTree(); 129 LayerTreeHostTest::SetupTree();
133 } 130 }
134 131
132 void BeginTest() override { PostSetNeedsCommitToMainThread(); }
133
134 void NotifyReadyToActivateOnThread(LayerTreeHostImpl* impl) override {
135 did_notify_ready_to_activate_ = true;
136 all_tiles_required_for_activation_are_ready_to_draw_ =
137 impl->tile_manager()->IsReadyToActivate();
138 EndTest();
139 }
140
135 void AfterTest() override { 141 void AfterTest() override {
136 EXPECT_TRUE(did_notify_ready_to_activate_); 142 EXPECT_TRUE(did_notify_ready_to_activate_);
137 EXPECT_TRUE(all_tiles_required_for_activation_are_ready_to_draw_); 143 EXPECT_TRUE(all_tiles_required_for_activation_are_ready_to_draw_);
138 EXPECT_LE(size_t(1), required_for_activation_count_);
139 } 144 }
140 145
141 private: 146 private:
142 FakeContentLayerClient client_; 147 FakeContentLayerClient client_;
148 bool did_notify_ready_to_activate_;
149 bool all_tiles_required_for_activation_are_ready_to_draw_;
143 }; 150 };
144 151
145 SINGLE_AND_MULTI_THREAD_IMPL_TEST_F(LayerTreeHostTestReadyToActivateNonEmpty); 152 SINGLE_AND_MULTI_THREAD_IMPL_TEST_F(LayerTreeHostTestReadyToActivateNonEmpty);
146 153
147 // Test if the LTHI receives ReadyToDraw notifications from the TileManager when 154 // Test if the LTHI receives ReadyToDraw notifications from the TileManager when
148 // no raster tasks get scheduled. 155 // no raster tasks get scheduled.
149 class LayerTreeHostTestReadyToDrawEmpty : public LayerTreeHostTest { 156 class LayerTreeHostTestReadyToDrawEmpty : public LayerTreeHostTest {
150 public: 157 public:
151 LayerTreeHostTestReadyToDrawEmpty() 158 LayerTreeHostTestReadyToDrawEmpty()
152 : did_notify_ready_to_draw_(false), 159 : did_notify_ready_to_draw_(false),
153 all_tiles_required_for_draw_are_ready_to_draw_(false), 160 all_tiles_required_for_draw_are_ready_to_draw_(false) {}
154 required_for_draw_count_(0) {}
155 161
156 void BeginTest() override { PostSetNeedsCommitToMainThread(); } 162 void BeginTest() override { PostSetNeedsCommitToMainThread(); }
157 163
158 void NotifyReadyToDrawOnThread(LayerTreeHostImpl* impl) override { 164 void NotifyReadyToDrawOnThread(LayerTreeHostImpl* impl) override {
159 did_notify_ready_to_draw_ = true; 165 did_notify_ready_to_draw_ = true;
160 const std::vector<PictureLayerImpl*>& layers =
161 impl->active_tree()->picture_layers();
162 all_tiles_required_for_draw_are_ready_to_draw_ = 166 all_tiles_required_for_draw_are_ready_to_draw_ =
163 impl->tile_manager()->IsReadyToDraw(); 167 impl->tile_manager()->IsReadyToDraw();
164 for (const auto& layer : layers) {
165 FakePictureLayerImpl* fake_layer =
166 static_cast<FakePictureLayerImpl*>(layer);
167 required_for_draw_count_ += fake_layer->CountTilesRequiredForDraw();
168 }
169
170 EndTest(); 168 EndTest();
171 } 169 }
172 170
173 void AfterTest() override { 171 void AfterTest() override {
174 EXPECT_TRUE(did_notify_ready_to_draw_); 172 EXPECT_TRUE(did_notify_ready_to_draw_);
175 EXPECT_TRUE(all_tiles_required_for_draw_are_ready_to_draw_); 173 EXPECT_TRUE(all_tiles_required_for_draw_are_ready_to_draw_);
176 EXPECT_EQ(size_t(0), required_for_draw_count_);
177 } 174 }
178 175
179 protected: 176 private:
180 bool did_notify_ready_to_draw_; 177 bool did_notify_ready_to_draw_;
181 bool all_tiles_required_for_draw_are_ready_to_draw_; 178 bool all_tiles_required_for_draw_are_ready_to_draw_;
182 size_t required_for_draw_count_;
183 }; 179 };
184 180
185 SINGLE_AND_MULTI_THREAD_IMPL_TEST_F(LayerTreeHostTestReadyToDrawEmpty); 181 SINGLE_AND_MULTI_THREAD_IMPL_TEST_F(LayerTreeHostTestReadyToDrawEmpty);
186 182
187 // Test if the LTHI receives ReadyToDraw notifications from the TileManager when 183 // Test if the LTHI receives ReadyToDraw notifications from the TileManager when
188 // some raster tasks flagged as REQUIRED_FOR_DRAW got scheduled. 184 // some raster tasks flagged as REQUIRED_FOR_DRAW got scheduled.
189 class LayerTreeHostTestReadyToDrawNonEmpty 185 class LayerTreeHostTestReadyToDrawNonEmpty : public LayerTreeHostTest {
190 : public LayerTreeHostTestReadyToDrawEmpty {
191 public: 186 public:
187 LayerTreeHostTestReadyToDrawNonEmpty()
188 : did_notify_ready_to_draw_(false),
189 all_tiles_required_for_draw_are_ready_to_draw_(false) {}
190
192 void SetupTree() override { 191 void SetupTree() override {
193 client_.set_fill_with_nonsolid_color(true); 192 client_.set_fill_with_nonsolid_color(true);
194 scoped_refptr<FakePictureLayer> root_layer = 193 scoped_refptr<FakePictureLayer> root_layer =
195 FakePictureLayer::Create(&client_); 194 FakePictureLayer::Create(&client_);
196 root_layer->SetBounds(gfx::Size(1024, 1024)); 195 root_layer->SetBounds(gfx::Size(1024, 1024));
197 root_layer->SetIsDrawable(true); 196 root_layer->SetIsDrawable(true);
198 197
199 layer_tree_host()->SetRootLayer(root_layer); 198 layer_tree_host()->SetRootLayer(root_layer);
200 LayerTreeHostTest::SetupTree(); 199 LayerTreeHostTest::SetupTree();
201 } 200 }
202 201
202 void BeginTest() override { PostSetNeedsCommitToMainThread(); }
203
204 void NotifyReadyToDrawOnThread(LayerTreeHostImpl* impl) override {
205 did_notify_ready_to_draw_ = true;
206 all_tiles_required_for_draw_are_ready_to_draw_ =
207 impl->tile_manager()->IsReadyToDraw();
208 EndTest();
209 }
210
203 void AfterTest() override { 211 void AfterTest() override {
204 EXPECT_TRUE(did_notify_ready_to_draw_); 212 EXPECT_TRUE(did_notify_ready_to_draw_);
205 EXPECT_TRUE(all_tiles_required_for_draw_are_ready_to_draw_); 213 EXPECT_TRUE(all_tiles_required_for_draw_are_ready_to_draw_);
206 EXPECT_LE(size_t(1), required_for_draw_count_);
207 } 214 }
208 215
209 private: 216 private:
210 FakeContentLayerClient client_; 217 FakeContentLayerClient client_;
218 bool did_notify_ready_to_draw_;
219 bool all_tiles_required_for_draw_are_ready_to_draw_;
211 }; 220 };
212 221
213 // Note: With this test setup, we only get tiles flagged as REQUIRED_FOR_DRAW in 222 // Note: With this test setup, we only get tiles flagged as REQUIRED_FOR_DRAW in
214 // single threaded mode. 223 // single threaded mode.
215 SINGLE_THREAD_IMPL_TEST_F(LayerTreeHostTestReadyToDrawNonEmpty); 224 SINGLE_THREAD_IMPL_TEST_F(LayerTreeHostTestReadyToDrawNonEmpty);
216 225
217 // Two setNeedsCommits in a row should lead to at least 1 commit and at least 1 226 // Two setNeedsCommits in a row should lead to at least 1 commit and at least 1
218 // draw with frame 0. 227 // draw with frame 0.
219 class LayerTreeHostTestSetNeedsCommit1 : public LayerTreeHostTest { 228 class LayerTreeHostTestSetNeedsCommit1 : public LayerTreeHostTest {
220 public: 229 public:
(...skipping 5631 matching lines...) Expand 10 before | Expand all | Expand 10 after
5852 void BeginTest() override { PostSetNeedsCommitToMainThread(); } 5861 void BeginTest() override { PostSetNeedsCommitToMainThread(); }
5853 5862
5854 DrawResult PrepareToDrawOnThread(LayerTreeHostImpl* host_impl, 5863 DrawResult PrepareToDrawOnThread(LayerTreeHostImpl* host_impl,
5855 LayerTreeHostImpl::FrameData* frame_data, 5864 LayerTreeHostImpl::FrameData* frame_data,
5856 DrawResult draw_result) override { 5865 DrawResult draw_result) override {
5857 EXPECT_EQ(4u, host_impl->resource_provider()->num_resources()); 5866 EXPECT_EQ(4u, host_impl->resource_provider()->num_resources());
5858 5867
5859 // Verify which tiles got resources using an eviction iterator, which has to 5868 // Verify which tiles got resources using an eviction iterator, which has to
5860 // return all tiles that have resources. 5869 // return all tiles that have resources.
5861 scoped_ptr<EvictionTilePriorityQueue> eviction_queue( 5870 scoped_ptr<EvictionTilePriorityQueue> eviction_queue(
5862 host_impl->BuildEvictionQueue(SAME_PRIORITY_FOR_BOTH_TREES)); 5871 host_impl->tile_manager()->BuildEvictionQueue());
5863 int tile_count = 0; 5872 int tile_count = 0;
5864 for (; !eviction_queue->IsEmpty(); eviction_queue->Pop()) { 5873 for (; !eviction_queue->IsEmpty(); eviction_queue->Pop()) {
5865 Tile* tile = eviction_queue->Top(); 5874 Tile* tile = eviction_queue->Top();
5866 // Ensure this tile is within the viewport. 5875 // Ensure this tile is within the viewport.
5867 EXPECT_TRUE(tile->content_rect().Intersects(gfx::Rect(viewport_size_))); 5876 EXPECT_TRUE(tile->content_rect().Intersects(gfx::Rect(viewport_size_)));
5868 // Ensure that the tile is 1/4 of the viewport tall (plus padding). 5877 // Ensure that the tile is 1/4 of the viewport tall (plus padding).
5869 EXPECT_EQ(tile->content_rect().height(), 5878 EXPECT_EQ(tile->content_rect().height(),
5870 (viewport_size_.height() / 4) + 2); 5879 (viewport_size_.height() / 4) + 2);
5871 ++tile_count; 5880 ++tile_count;
5872 } 5881 }
(...skipping 388 matching lines...) Expand 10 before | Expand all | Expand 10 after
6261 6270
6262 void AfterTest() override { EXPECT_TRUE(did_commit_); } 6271 void AfterTest() override { EXPECT_TRUE(did_commit_); }
6263 6272
6264 private: 6273 private:
6265 bool did_commit_; 6274 bool did_commit_;
6266 }; 6275 };
6267 6276
6268 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestNoTasksBetweenWillAndDidCommit); 6277 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestNoTasksBetweenWillAndDidCommit);
6269 6278
6270 } // namespace cc 6279 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/layer_tree_host_impl_unittest.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698