Chromium Code Reviews| 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_); |
| 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_; |
|
enne (OOO)
2016/07/13 22:51:14
did_swaps <_<
I hate to nit did_swaps here, but L
danakj
2016/07/13 23:11:53
Done. num_draws_ instead throughout this file.
| |
| 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 |