| 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/message_loop/message_loop_proxy.h" | 10 #include "base/message_loop/message_loop_proxy.h" |
| (...skipping 511 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 522 } | 522 } |
| 523 } | 523 } |
| 524 | 524 |
| 525 void AfterTest() override { EXPECT_EQ(3, did_swaps_); } | 525 void AfterTest() override { EXPECT_EQ(3, did_swaps_); } |
| 526 | 526 |
| 527 int did_swaps_; | 527 int did_swaps_; |
| 528 }; | 528 }; |
| 529 | 529 |
| 530 MULTI_THREAD_TEST_F(LayerTreeHostDamageTestScrollbarCommitDoesNoDamage); | 530 MULTI_THREAD_TEST_F(LayerTreeHostDamageTestScrollbarCommitDoesNoDamage); |
| 531 | 531 |
| 532 class LayerTreeHostDamageTestVisibleTilesStillTriggerDraws | |
| 533 : public LayerTreeHostDamageTest { | |
| 534 void InitializeSettings(LayerTreeSettings* settings) override { | |
| 535 settings->impl_side_painting = true; | |
| 536 } | |
| 537 | |
| 538 void BeginTest() override { PostSetNeedsCommitToMainThread(); } | |
| 539 | |
| 540 void SetupTree() override { | |
| 541 scoped_refptr<FakePictureLayer> root = FakePictureLayer::Create(&client_); | |
| 542 root->SetBounds(gfx::Size(500, 500)); | |
| 543 layer_tree_host()->SetRootLayer(root); | |
| 544 LayerTreeHostDamageTest::SetupTree(); | |
| 545 | |
| 546 swap_count_ = 0; | |
| 547 prepare_to_draw_count_ = 0; | |
| 548 update_visible_tile_count_ = 0; | |
| 549 } | |
| 550 | |
| 551 DrawResult PrepareToDrawOnThread(LayerTreeHostImpl* host_impl, | |
| 552 LayerTreeHostImpl::FrameData* frame_data, | |
| 553 DrawResult draw_result) override { | |
| 554 EXPECT_EQ(DRAW_SUCCESS, draw_result); | |
| 555 prepare_to_draw_count_++; | |
| 556 switch (prepare_to_draw_count_) { | |
| 557 case 1: | |
| 558 // Detect that we have an incomplete tile, during the first frame. | |
| 559 // The first frame should have damage. | |
| 560 frame_data->contains_incomplete_tile = true; | |
| 561 DCHECK(!frame_data->has_no_damage); | |
| 562 break; | |
| 563 case 2: | |
| 564 // Make a no-damage frame. We early out and can't detect | |
| 565 // incomplete tiles, even if they still exist. | |
| 566 frame_data->contains_incomplete_tile = false; | |
| 567 frame_data->has_no_damage = true; | |
| 568 break; | |
| 569 case 3: | |
| 570 // Trigger the last swap for the completed tile. | |
| 571 frame_data->contains_incomplete_tile = false; | |
| 572 frame_data->has_no_damage = false; | |
| 573 EndTest(); | |
| 574 break; | |
| 575 default: | |
| 576 NOTREACHED(); | |
| 577 break; | |
| 578 } | |
| 579 | |
| 580 return draw_result; | |
| 581 } | |
| 582 | |
| 583 void UpdateVisibleTilesOnThread(LayerTreeHostImpl* host_impl) override { | |
| 584 // Simulate creating some visible tiles (that trigger prepare-to-draws). | |
| 585 // The first we make into a no-damage-frame during prepare-to-draw (see | |
| 586 // above). This is to ensure we still get UpdateVisibleTiles calls after | |
| 587 // a no-damage or aborted frame. | |
| 588 update_visible_tile_count_++; | |
| 589 switch (update_visible_tile_count_) { | |
| 590 case 3: | |
| 591 case 6: | |
| 592 host_impl->DidInitializeVisibleTileForTesting(); | |
| 593 break; | |
| 594 case 7: | |
| 595 NOTREACHED(); | |
| 596 break; | |
| 597 } | |
| 598 } | |
| 599 | |
| 600 void SwapBuffersOnThread(LayerTreeHostImpl* host_impl, | |
| 601 bool didSwap) override { | |
| 602 if (!didSwap) | |
| 603 return; | |
| 604 ++swap_count_; | |
| 605 } | |
| 606 | |
| 607 void AfterTest() override { | |
| 608 // We should keep getting update-visible-tiles calls | |
| 609 // until we report there are no more incomplete-tiles. | |
| 610 EXPECT_EQ(update_visible_tile_count_, 6); | |
| 611 // First frame, plus two triggered by DidInitializeVisibleTile() | |
| 612 EXPECT_EQ(prepare_to_draw_count_, 3); | |
| 613 // First swap, plus final swap (contained damage). | |
| 614 EXPECT_EQ(swap_count_, 2); | |
| 615 } | |
| 616 | |
| 617 FakeContentLayerClient client_; | |
| 618 int swap_count_; | |
| 619 int prepare_to_draw_count_; | |
| 620 int update_visible_tile_count_; | |
| 621 }; | |
| 622 | |
| 623 MULTI_THREAD_TEST_F(LayerTreeHostDamageTestVisibleTilesStillTriggerDraws); | |
| 624 | |
| 625 } // namespace | 532 } // namespace |
| 626 } // namespace cc | 533 } // namespace cc |
| OLD | NEW |