OLD | NEW |
---|---|
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 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 "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/callback.h" | 8 #include "base/callback.h" |
9 #include "base/location.h" | 9 #include "base/location.h" |
10 #include "base/time/time.h" | 10 #include "base/time/time.h" |
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
142 | 142 |
143 int draw_count_; | 143 int draw_count_; |
144 FakeContentLayerClient client_; | 144 FakeContentLayerClient client_; |
145 }; | 145 }; |
146 | 146 |
147 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostDamageTestSetViewportSize); | 147 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostDamageTestSetViewportSize); |
148 | 148 |
149 class LayerTreeHostDamageTestNoDamageDoesNotSwap | 149 class LayerTreeHostDamageTestNoDamageDoesNotSwap |
150 : public LayerTreeHostDamageTest { | 150 : public LayerTreeHostDamageTest { |
151 void BeginTest() override { | 151 void BeginTest() override { |
152 expect_swap_and_succeed_ = 0; | |
153 did_swaps_ = 0; | |
154 did_swap_and_succeed_ = 0; | |
155 PostSetNeedsCommitToMainThread(); | 152 PostSetNeedsCommitToMainThread(); |
156 } | 153 } |
157 | 154 |
158 void SetupTree() override { | 155 void SetupTree() override { |
159 scoped_refptr<FakePictureLayer> root = FakePictureLayer::Create(&client_); | 156 scoped_refptr<FakePictureLayer> root = FakePictureLayer::Create(&client_); |
160 root->SetBounds(gfx::Size(10, 10)); | 157 root->SetBounds(gfx::Size(10, 10)); |
161 | 158 |
162 // Most of the layer isn't visible. | 159 // Most of the layer isn't visible. |
163 content_ = FakePictureLayer::Create(&client_); | 160 content_ = FakePictureLayer::Create(&client_); |
164 content_->SetBounds(gfx::Size(2000, 100)); | 161 content_->SetBounds(gfx::Size(2000, 100)); |
165 root->AddChild(content_); | 162 root->AddChild(content_); |
166 | 163 |
167 layer_tree_host()->SetRootLayer(root); | 164 layer_tree_host()->SetRootLayer(root); |
168 LayerTreeHostDamageTest::SetupTree(); | 165 LayerTreeHostDamageTest::SetupTree(); |
169 client_.set_bounds(root->bounds()); | 166 client_.set_bounds(root->bounds()); |
170 } | 167 } |
171 | 168 |
172 DrawResult PrepareToDrawOnThread(LayerTreeHostImpl* host_impl, | 169 DrawResult PrepareToDrawOnThread(LayerTreeHostImpl* host_impl, |
173 LayerTreeHostImpl::FrameData* frame_data, | 170 LayerTreeHostImpl::FrameData* frame_data, |
174 DrawResult draw_result) override { | 171 DrawResult draw_result) override { |
175 EXPECT_EQ(DRAW_SUCCESS, draw_result); | 172 EXPECT_EQ(DRAW_SUCCESS, draw_result); |
176 | 173 |
177 int source_frame = host_impl->active_tree()->source_frame_number(); | 174 int source_frame = host_impl->active_tree()->source_frame_number(); |
178 switch (source_frame) { | 175 switch (source_frame) { |
179 case 0: | 176 case 0: |
180 // The first frame has damage, so we should draw and swap. | 177 // The first frame has damage, so we should draw and swap. |
181 ++expect_swap_and_succeed_; | 178 EXPECT_FALSE(frame_data->has_no_damage); |
179 ++expect_swap_; | |
182 break; | 180 break; |
183 case 1: | 181 case 1: |
184 // The second frame has no damage, so we should not draw and swap. | 182 // The second frame has no damage, so we should not draw and swap. |
183 EXPECT_TRUE(frame_data->has_no_damage); | |
185 break; | 184 break; |
186 case 2: | 185 case 2: |
187 // The third frame has damage again, so we should draw and swap. | 186 // The third frame has damage again, so we should draw and swap. |
188 ++expect_swap_and_succeed_; | 187 EXPECT_FALSE(frame_data->has_no_damage); |
188 ++expect_swap_; | |
189 break; | 189 break; |
190 case 3: | 190 case 3: |
191 // The fourth frame has no visible damage, so we should not draw and | 191 // The fourth frame has no visible damage, so we should not draw and |
192 // swap. | 192 // swap. |
193 EXPECT_TRUE(frame_data->has_no_damage); | |
193 EndTest(); | 194 EndTest(); |
194 break; | 195 break; |
195 } | 196 } |
196 return draw_result; | 197 return draw_result; |
197 } | 198 } |
198 | 199 |
199 void SwapBuffersOnThread(LayerTreeHostImpl* host_impl, bool result) override { | 200 void SwapBuffersCompleteOnThread() override { |
200 ++did_swaps_; | 201 ++did_swap_; |
201 if (result) | 202 EXPECT_EQ(expect_swap_, did_swap_); |
danakj
2016/07/13 21:50:18
This just isn't called if result was false. So we
| |
202 ++did_swap_and_succeed_; | |
203 EXPECT_EQ(expect_swap_and_succeed_, did_swap_and_succeed_); | |
204 } | 203 } |
205 | 204 |
206 void DidCommit() override { | 205 void DidCommit() override { |
207 int next_frame = layer_tree_host()->source_frame_number(); | 206 int next_frame = layer_tree_host()->source_frame_number(); |
208 switch (next_frame) { | 207 switch (next_frame) { |
209 case 1: | 208 case 1: |
210 layer_tree_host()->SetNeedsCommit(); | 209 layer_tree_host()->SetNeedsCommit(); |
211 break; | 210 break; |
212 case 2: | 211 case 2: |
213 // Cause visible damage. | 212 // Cause visible damage. |
214 content_->SetNeedsDisplayRect( | 213 content_->SetNeedsDisplayRect( |
215 gfx::Rect(layer_tree_host()->device_viewport_size())); | 214 gfx::Rect(layer_tree_host()->device_viewport_size())); |
216 break; | 215 break; |
217 case 3: | 216 case 3: |
218 // Cause non-visible damage. | 217 // Cause non-visible damage. |
219 content_->SetNeedsDisplayRect(gfx::Rect(1990, 1990, 10, 10)); | 218 content_->SetNeedsDisplayRect(gfx::Rect(1990, 1990, 10, 10)); |
220 layer_tree_host()->SetNeedsCommit(); | 219 layer_tree_host()->SetNeedsCommit(); |
221 break; | 220 break; |
222 } | 221 } |
223 } | 222 } |
224 | 223 |
225 void AfterTest() override { | 224 void AfterTest() override { |
226 EXPECT_EQ(4, did_swaps_); | 225 EXPECT_EQ(2, expect_swap_); |
227 EXPECT_EQ(2, expect_swap_and_succeed_); | 226 EXPECT_EQ(expect_swap_, did_swap_); |
228 EXPECT_EQ(expect_swap_and_succeed_, did_swap_and_succeed_); | |
229 } | 227 } |
230 | 228 |
231 FakeContentLayerClient client_; | 229 FakeContentLayerClient client_; |
232 scoped_refptr<FakePictureLayer> content_; | 230 scoped_refptr<FakePictureLayer> content_; |
233 int expect_swap_and_succeed_; | 231 int expect_swap_ = 0; |
234 int did_swaps_; | 232 int did_swap_ = 0; |
235 int did_swap_and_succeed_; | |
236 }; | 233 }; |
237 | 234 |
238 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostDamageTestNoDamageDoesNotSwap); | 235 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostDamageTestNoDamageDoesNotSwap); |
239 | 236 |
240 class LayerTreeHostDamageTestForcedFullDamage : public LayerTreeHostDamageTest { | 237 class LayerTreeHostDamageTestForcedFullDamage : public LayerTreeHostDamageTest { |
241 void BeginTest() override { PostSetNeedsCommitToMainThread(); } | 238 void BeginTest() override { PostSetNeedsCommitToMainThread(); } |
242 | 239 |
243 void SetupTree() override { | 240 void SetupTree() override { |
244 root_ = FakePictureLayer::Create(&client_); | 241 root_ = FakePictureLayer::Create(&client_); |
245 child_ = FakePictureLayer::Create(&client_); | 242 child_ = FakePictureLayer::Create(&client_); |
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
403 break; | 400 break; |
404 case 3: | 401 case 3: |
405 // The fourth frame should damage the scrollbars. | 402 // The fourth frame should damage the scrollbars. |
406 EXPECT_TRUE(root_damage.Contains(gfx::Rect(300, 300, 10, 100))); | 403 EXPECT_TRUE(root_damage.Contains(gfx::Rect(300, 300, 10, 100))); |
407 EndTest(); | 404 EndTest(); |
408 break; | 405 break; |
409 } | 406 } |
410 return draw_result; | 407 return draw_result; |
411 } | 408 } |
412 | 409 |
413 void SwapBuffersOnThread(LayerTreeHostImpl* host_impl, bool result) override { | 410 void DrawLayersOnThread(LayerTreeHostImpl* host_impl) override { |
414 ++did_swaps_; | 411 ++did_swaps_; |
415 EXPECT_TRUE(result); | |
416 LayerImpl* scroll_layer = | 412 LayerImpl* scroll_layer = |
417 host_impl->active_tree()->LayerById(content_layer_->id()); | 413 host_impl->active_tree()->LayerById(content_layer_->id()); |
418 switch (did_swaps_) { | 414 switch (did_swaps_) { |
419 case 1: | 415 case 1: |
420 // Test that modifying the position of the content layer (not | 416 // Test that modifying the position of the content layer (not |
421 // scrolling) won't damage the scrollbar. | 417 // scrolling) won't damage the scrollbar. |
422 MainThreadTaskRunner()->PostTask( | 418 MainThreadTaskRunner()->PostTask( |
423 FROM_HERE, base::Bind(&LayerTreeHostDamageTestScrollbarDoesDamage:: | 419 FROM_HERE, base::Bind(&LayerTreeHostDamageTestScrollbarDoesDamage:: |
424 ModifyContentLayerPosition, | 420 ModifyContentLayerPosition, |
425 base::Unretained(this))); | 421 base::Unretained(this))); |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
490 EXPECT_EQ(1, frame); | 486 EXPECT_EQ(1, frame); |
491 EXPECT_FALSE(root_damage.Intersects(gfx::Rect(300, 300, 10, 100))); | 487 EXPECT_FALSE(root_damage.Intersects(gfx::Rect(300, 300, 10, 100))); |
492 break; | 488 break; |
493 default: | 489 default: |
494 NOTREACHED(); | 490 NOTREACHED(); |
495 break; | 491 break; |
496 } | 492 } |
497 return draw_result; | 493 return draw_result; |
498 } | 494 } |
499 | 495 |
500 void SwapBuffersOnThread(LayerTreeHostImpl* host_impl, bool result) override { | 496 void DrawLayersOnThread(LayerTreeHostImpl* host_impl) override { |
501 ++did_swaps_; | 497 ++did_swaps_; |
502 EXPECT_TRUE(result); | |
503 LayerImpl* scroll_layer = | 498 LayerImpl* scroll_layer = |
504 host_impl->active_tree()->LayerById(content_layer_->id()); | 499 host_impl->active_tree()->LayerById(content_layer_->id()); |
505 switch (did_swaps_) { | 500 switch (did_swaps_) { |
506 case 1: | 501 case 1: |
507 // Scroll on the thread. This should damage the scrollbar for the | 502 // Scroll on the thread. This should damage the scrollbar for the |
508 // next draw on the thread. | 503 // next draw on the thread. |
509 scroll_layer->ScrollBy(gfx::Vector2dF(10.f, 10.f)); | 504 scroll_layer->ScrollBy(gfx::Vector2dF(10.f, 10.f)); |
510 host_impl->SetNeedsRedraw(); | 505 host_impl->SetNeedsRedraw(); |
511 break; | 506 break; |
512 case 2: | 507 case 2: |
(...skipping 12 matching lines...) Expand all Loading... | |
525 | 520 |
526 void AfterTest() override { EXPECT_EQ(3, did_swaps_); } | 521 void AfterTest() override { EXPECT_EQ(3, did_swaps_); } |
527 | 522 |
528 int did_swaps_; | 523 int did_swaps_; |
529 }; | 524 }; |
530 | 525 |
531 MULTI_THREAD_TEST_F(LayerTreeHostDamageTestScrollbarCommitDoesNoDamage); | 526 MULTI_THREAD_TEST_F(LayerTreeHostDamageTestScrollbarCommitDoesNoDamage); |
532 | 527 |
533 } // namespace | 528 } // namespace |
534 } // namespace cc | 529 } // namespace cc |
OLD | NEW |