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

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

Issue 786123002: Update from https://crrev.com/307330 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 6 years 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') | cc/trees/layer_tree_impl.h » ('j') | 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 424 matching lines...) Expand 10 before | Expand all | Expand 10 after
435 LayerTreeHostImpl::FrameData* frame_data, 435 LayerTreeHostImpl::FrameData* frame_data,
436 DrawResult draw_result) override { 436 DrawResult draw_result) override {
437 EXPECT_EQ(DRAW_SUCCESS, draw_result); 437 EXPECT_EQ(DRAW_SUCCESS, draw_result);
438 438
439 gfx::RectF root_damage_rect; 439 gfx::RectF root_damage_rect;
440 if (!frame_data->render_passes.empty()) 440 if (!frame_data->render_passes.empty())
441 root_damage_rect = frame_data->render_passes.back()->damage_rect; 441 root_damage_rect = frame_data->render_passes.back()->damage_rect;
442 442
443 if (!num_draws_) { 443 if (!num_draws_) {
444 // If this is the first frame, expect full frame damage. 444 // If this is the first frame, expect full frame damage.
445 EXPECT_RECT_EQ(root_damage_rect, gfx::Rect(bounds_)); 445 EXPECT_EQ(root_damage_rect, gfx::Rect(bounds_));
446 } else { 446 } else {
447 // Check that invalid_rect_ is indeed repainted. 447 // Check that invalid_rect_ is indeed repainted.
448 EXPECT_TRUE(root_damage_rect.Contains(invalid_rect_)); 448 EXPECT_TRUE(root_damage_rect.Contains(invalid_rect_));
449 } 449 }
450 450
451 return draw_result; 451 return draw_result;
452 } 452 }
453 453
454 void DrawLayersOnThread(LayerTreeHostImpl* impl) override { 454 void DrawLayersOnThread(LayerTreeHostImpl* impl) override {
455 if (!num_draws_) { 455 if (!num_draws_) {
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
617 LayerTreeHostImpl::FrameData* frame_data, 617 LayerTreeHostImpl::FrameData* frame_data,
618 DrawResult draw_result) override { 618 DrawResult draw_result) override {
619 EXPECT_EQ(DRAW_SUCCESS, draw_result); 619 EXPECT_EQ(DRAW_SUCCESS, draw_result);
620 620
621 gfx::RectF root_damage_rect; 621 gfx::RectF root_damage_rect;
622 if (!frame_data->render_passes.empty()) 622 if (!frame_data->render_passes.empty())
623 root_damage_rect = frame_data->render_passes.back()->damage_rect; 623 root_damage_rect = frame_data->render_passes.back()->damage_rect;
624 624
625 switch (num_draws_) { 625 switch (num_draws_) {
626 case 0: 626 case 0:
627 EXPECT_RECT_EQ(gfx::Rect(bounds_), root_damage_rect); 627 EXPECT_EQ(gfx::Rect(bounds_), root_damage_rect);
628 break; 628 break;
629 case 1: 629 case 1:
630 case 2: 630 case 2:
631 EXPECT_RECT_EQ(gfx::Rect(0, 0, 0, 0), root_damage_rect); 631 EXPECT_EQ(gfx::Rect(0, 0, 0, 0), root_damage_rect);
632 break; 632 break;
633 case 3: 633 case 3:
634 EXPECT_RECT_EQ(invalid_rect_, root_damage_rect); 634 EXPECT_EQ(invalid_rect_, root_damage_rect);
635 break; 635 break;
636 case 4: 636 case 4:
637 EXPECT_RECT_EQ(gfx::Rect(bounds_), root_damage_rect); 637 EXPECT_EQ(gfx::Rect(bounds_), root_damage_rect);
638 break; 638 break;
639 default: 639 default:
640 NOTREACHED(); 640 NOTREACHED();
641 } 641 }
642 642
643 return draw_result; 643 return draw_result;
644 } 644 }
645 645
646 void DrawLayersOnThread(LayerTreeHostImpl* host_impl) override { 646 void DrawLayersOnThread(LayerTreeHostImpl* host_impl) override {
647 switch (num_draws_) { 647 switch (num_draws_) {
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
729 if (!frame_data->render_passes.empty()) 729 if (!frame_data->render_passes.empty())
730 root_damage_rect = frame_data->render_passes.back()->damage_rect; 730 root_damage_rect = frame_data->render_passes.back()->damage_rect;
731 731
732 // The first time, the whole view needs be drawn. 732 // The first time, the whole view needs be drawn.
733 // Afterwards, just the opacity of surface_layer1 is changed a few times, 733 // Afterwards, just the opacity of surface_layer1 is changed a few times,
734 // and each damage should be the bounding box of it and its child. If this 734 // and each damage should be the bounding box of it and its child. If this
735 // was working improperly, the damage might not include its childs bounding 735 // was working improperly, the damage might not include its childs bounding
736 // box. 736 // box.
737 switch (host_impl->active_tree()->source_frame_number()) { 737 switch (host_impl->active_tree()->source_frame_number()) {
738 case 0: 738 case 0:
739 EXPECT_RECT_EQ(gfx::Rect(root_layer_->bounds()), root_damage_rect); 739 EXPECT_EQ(gfx::Rect(root_layer_->bounds()), root_damage_rect);
740 break; 740 break;
741 case 1: 741 case 1:
742 case 2: 742 case 2:
743 case 3: 743 case 3:
744 EXPECT_RECT_EQ(gfx::Rect(child_layer_->bounds()), root_damage_rect); 744 EXPECT_EQ(gfx::Rect(child_layer_->bounds()), root_damage_rect);
745 break; 745 break;
746 default: 746 default:
747 NOTREACHED(); 747 NOTREACHED();
748 } 748 }
749 749
750 return draw_result; 750 return draw_result;
751 } 751 }
752 752
753 void DidCommitAndDrawFrame() override { 753 void DidCommitAndDrawFrame() override {
754 switch (layer_tree_host()->source_frame_number()) { 754 switch (layer_tree_host()->source_frame_number()) {
(...skipping 507 matching lines...) Expand 10 before | Expand all | Expand 10 after
1262 const LayerImplList& render_surface_layer_list = 1262 const LayerImplList& render_surface_layer_list =
1263 *frame_data.render_surface_layer_list; 1263 *frame_data.render_surface_layer_list;
1264 1264
1265 // Both layers should be drawing into the root render surface. 1265 // Both layers should be drawing into the root render surface.
1266 ASSERT_EQ(1u, render_surface_layer_list.size()); 1266 ASSERT_EQ(1u, render_surface_layer_list.size());
1267 ASSERT_EQ(root->render_surface(), 1267 ASSERT_EQ(root->render_surface(),
1268 render_surface_layer_list[0]->render_surface()); 1268 render_surface_layer_list[0]->render_surface());
1269 ASSERT_EQ(2u, root->render_surface()->layer_list().size()); 1269 ASSERT_EQ(2u, root->render_surface()->layer_list().size());
1270 1270
1271 // The root render surface is the size of the viewport. 1271 // The root render surface is the size of the viewport.
1272 EXPECT_RECT_EQ(gfx::Rect(0, 0, 60, 60), 1272 EXPECT_EQ(gfx::Rect(0, 0, 60, 60), root->render_surface()->content_rect());
1273 root->render_surface()->content_rect());
1274 1273
1275 // The max tiling scale of the child should be scaled. 1274 // The max tiling scale of the child should be scaled.
1276 EXPECT_FLOAT_EQ(1.5f, child->MaximumTilingContentsScale()); 1275 EXPECT_FLOAT_EQ(1.5f, child->MaximumTilingContentsScale());
1277 1276
1278 gfx::Transform scale_transform; 1277 gfx::Transform scale_transform;
1279 scale_transform.Scale(impl->device_scale_factor(), 1278 scale_transform.Scale(impl->device_scale_factor(),
1280 impl->device_scale_factor()); 1279 impl->device_scale_factor());
1281 1280
1282 // The root layer is scaled by 2x. 1281 // The root layer is scaled by 2x.
1283 gfx::Transform root_screen_space_transform = scale_transform; 1282 gfx::Transform root_screen_space_transform = scale_transform;
(...skipping 1352 matching lines...) Expand 10 before | Expand all | Expand 10 after
2636 LayerTreeHostTest::SetupTree(); 2635 LayerTreeHostTest::SetupTree();
2637 } 2636 }
2638 2637
2639 void BeginTest() override { PostSetNeedsCommitToMainThread(); } 2638 void BeginTest() override { PostSetNeedsCommitToMainThread(); }
2640 void AfterTest() override {} 2639 void AfterTest() override {}
2641 2640
2642 void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override { 2641 void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override {
2643 num_commits_++; 2642 num_commits_++;
2644 if (num_commits_ == 1) { 2643 if (num_commits_ == 1) {
2645 LayerImpl* root_layer = host_impl->active_tree()->root_layer(); 2644 LayerImpl* root_layer = host_impl->active_tree()->root_layer();
2646 EXPECT_SIZE_EQ(gfx::Size(1, 1), root_layer->bounds()); 2645 EXPECT_EQ(gfx::Size(1, 1), root_layer->bounds());
2647 } else { 2646 } else {
2648 LayerImpl* root_layer = host_impl->active_tree()->root_layer(); 2647 LayerImpl* root_layer = host_impl->active_tree()->root_layer();
2649 EXPECT_SIZE_EQ(gfx::Size(2, 2), root_layer->bounds()); 2648 EXPECT_EQ(gfx::Size(2, 2), root_layer->bounds());
2650 EndTest(); 2649 EndTest();
2651 } 2650 }
2652 } 2651 }
2653 2652
2654 private: 2653 private:
2655 SetBoundsClient client_; 2654 SetBoundsClient client_;
2656 int num_commits_; 2655 int num_commits_;
2657 }; 2656 };
2658 2657
2659 SINGLE_AND_MULTI_THREAD_TEST_F( 2658 SINGLE_AND_MULTI_THREAD_TEST_F(
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
2762 DrawResult draw_result) override { 2761 DrawResult draw_result) override {
2763 Mock::VerifyAndClearExpectations(&mock_context_); 2762 Mock::VerifyAndClearExpectations(&mock_context_);
2764 ResourceProvider* resource_provider = host_impl->resource_provider(); 2763 ResourceProvider* resource_provider = host_impl->resource_provider();
2765 EXPECT_EQ(1u, resource_provider->num_resources()); 2764 EXPECT_EQ(1u, resource_provider->num_resources());
2766 CHECK_EQ(1u, frame->render_passes.size()); 2765 CHECK_EQ(1u, frame->render_passes.size());
2767 CHECK_LE(1u, frame->render_passes[0]->quad_list.size()); 2766 CHECK_LE(1u, frame->render_passes[0]->quad_list.size());
2768 const DrawQuad* quad = frame->render_passes[0]->quad_list.front(); 2767 const DrawQuad* quad = frame->render_passes[0]->quad_list.front();
2769 CHECK_EQ(DrawQuad::IO_SURFACE_CONTENT, quad->material); 2768 CHECK_EQ(DrawQuad::IO_SURFACE_CONTENT, quad->material);
2770 const IOSurfaceDrawQuad* io_surface_draw_quad = 2769 const IOSurfaceDrawQuad* io_surface_draw_quad =
2771 IOSurfaceDrawQuad::MaterialCast(quad); 2770 IOSurfaceDrawQuad::MaterialCast(quad);
2772 EXPECT_SIZE_EQ(io_surface_size_, io_surface_draw_quad->io_surface_size); 2771 EXPECT_EQ(io_surface_size_, io_surface_draw_quad->io_surface_size);
2773 EXPECT_NE(0u, io_surface_draw_quad->io_surface_resource_id); 2772 EXPECT_NE(0u, io_surface_draw_quad->io_surface_resource_id);
2774 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_RECTANGLE_ARB), 2773 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_RECTANGLE_ARB),
2775 resource_provider->TargetForTesting( 2774 resource_provider->TargetForTesting(
2776 io_surface_draw_quad->io_surface_resource_id)); 2775 io_surface_draw_quad->io_surface_resource_id));
2777 2776
2778 EXPECT_CALL(*mock_context_, bindTexture(GL_TEXTURE_RECTANGLE_ARB, 1)) 2777 EXPECT_CALL(*mock_context_, bindTexture(GL_TEXTURE_RECTANGLE_ARB, 1))
2779 .Times(1); 2778 .Times(1);
2780 if (delegating_renderer()) { 2779 if (delegating_renderer()) {
2781 // The io surface layer's resource should be sent to the parent. 2780 // The io surface layer's resource should be sent to the parent.
2782 EXPECT_CALL(*mock_context_, 2781 EXPECT_CALL(*mock_context_,
(...skipping 1929 matching lines...) Expand 10 before | Expand all | Expand 10 after
4712 } 4711 }
4713 } 4712 }
4714 4713
4715 int commit_count_; 4714 int commit_count_;
4716 int commit_complete_count_; 4715 int commit_complete_count_;
4717 TestSwapPromiseResult swap_promise_result_[3]; 4716 TestSwapPromiseResult swap_promise_result_[3];
4718 }; 4717 };
4719 4718
4720 MULTI_THREAD_TEST_F(LayerTreeHostTestBreakSwapPromise); 4719 MULTI_THREAD_TEST_F(LayerTreeHostTestBreakSwapPromise);
4721 4720
4721 class LayerTreeHostTestKeepSwapPromise : public LayerTreeTest {
4722 public:
4723 LayerTreeHostTestKeepSwapPromise() {}
4724
4725 void BeginTest() override {
4726 layer_ = SolidColorLayer::Create();
4727 layer_->SetIsDrawable(true);
4728 layer_->SetBounds(gfx::Size(10, 10));
4729 layer_tree_host()->SetRootLayer(layer_);
4730 gfx::Size bounds(100, 100);
4731 layer_tree_host()->SetViewportSize(bounds);
4732 PostSetNeedsCommitToMainThread();
4733 }
4734
4735 void DidCommit() override {
4736 MainThreadTaskRunner()->PostTask(
4737 FROM_HERE, base::Bind(&LayerTreeHostTestKeepSwapPromise::ChangeFrame,
4738 base::Unretained(this)));
4739 }
4740
4741 void ChangeFrame() {
4742 switch (layer_tree_host()->source_frame_number()) {
4743 case 1:
4744 layer_->SetBounds(gfx::Size(10, 11));
4745 layer_tree_host()->QueueSwapPromise(
4746 make_scoped_ptr(new TestSwapPromise(&swap_promise_result_)));
4747 break;
4748 case 2:
4749 break;
4750 default:
4751 NOTREACHED();
4752 break;
4753 }
4754 }
4755
4756 void SwapBuffersOnThread(LayerTreeHostImpl* host_impl, bool result) override {
4757 EXPECT_TRUE(result);
4758 if (host_impl->active_tree()->source_frame_number() >= 1) {
4759 // The commit changes layers so it should cause a swap.
4760 base::AutoLock lock(swap_promise_result_.lock);
4761 EXPECT_TRUE(swap_promise_result_.did_swap_called);
4762 EXPECT_FALSE(swap_promise_result_.did_not_swap_called);
4763 EXPECT_TRUE(swap_promise_result_.dtor_called);
4764 EndTest();
4765 }
4766 }
4767
4768 void AfterTest() override {}
4769
4770 private:
4771 scoped_refptr<Layer> layer_;
4772 TestSwapPromiseResult swap_promise_result_;
4773 };
4774
4775 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestKeepSwapPromise);
4776
4722 class LayerTreeHostTestBreakSwapPromiseForVisibilityAbortedCommit 4777 class LayerTreeHostTestBreakSwapPromiseForVisibilityAbortedCommit
4723 : public LayerTreeHostTest { 4778 : public LayerTreeHostTest {
4724 protected: 4779 protected:
4725 void BeginTest() override { PostSetNeedsCommitToMainThread(); } 4780 void BeginTest() override { PostSetNeedsCommitToMainThread(); }
4726 4781
4727 void DidCommit() override { 4782 void DidCommit() override {
4728 layer_tree_host()->SetDeferCommits(true); 4783 layer_tree_host()->SetDeferCommits(true);
4729 layer_tree_host()->SetNeedsCommit(); 4784 layer_tree_host()->SetNeedsCommit();
4730 } 4785 }
4731 4786
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
4773 void DidDeferCommit() override { 4828 void DidDeferCommit() override {
4774 layer_tree_host()->DidLoseOutputSurface(); 4829 layer_tree_host()->DidLoseOutputSurface();
4775 scoped_ptr<SwapPromise> swap_promise( 4830 scoped_ptr<SwapPromise> swap_promise(
4776 new TestSwapPromise(&swap_promise_result_)); 4831 new TestSwapPromise(&swap_promise_result_));
4777 layer_tree_host()->QueueSwapPromise(swap_promise.Pass()); 4832 layer_tree_host()->QueueSwapPromise(swap_promise.Pass());
4778 layer_tree_host()->SetDeferCommits(false); 4833 layer_tree_host()->SetDeferCommits(false);
4779 } 4834 }
4780 4835
4781 void BeginMainFrameAbortedOnThread(LayerTreeHostImpl* host_impl, 4836 void BeginMainFrameAbortedOnThread(LayerTreeHostImpl* host_impl,
4782 bool did_handle) override { 4837 bool did_handle) override {
4838 // This is needed so that the impl-thread state matches main-thread state.
4839 host_impl->DidLoseOutputSurface();
4783 EndTest(); 4840 EndTest();
4784 // This lets the test finally commit and exit.
4785 MainThreadTaskRunner()->PostTask(
4786 FROM_HERE,
4787 base::Bind(&LayerTreeHostTestBreakSwapPromiseForContextAbortedCommit::
4788 FindOutputSurface,
4789 base::Unretained(this)));
4790 }
4791
4792 void FindOutputSurface() {
4793 layer_tree_host()->OnCreateAndInitializeOutputSurfaceAttempted(true);
4794 } 4841 }
4795 4842
4796 void AfterTest() override { 4843 void AfterTest() override {
4797 { 4844 {
4798 base::AutoLock lock(swap_promise_result_.lock); 4845 base::AutoLock lock(swap_promise_result_.lock);
4799 EXPECT_FALSE(swap_promise_result_.did_swap_called); 4846 EXPECT_FALSE(swap_promise_result_.did_swap_called);
4800 EXPECT_TRUE(swap_promise_result_.did_not_swap_called); 4847 EXPECT_TRUE(swap_promise_result_.did_not_swap_called);
4801 EXPECT_EQ(SwapPromise::COMMIT_FAILS, swap_promise_result_.reason); 4848 EXPECT_EQ(SwapPromise::COMMIT_FAILS, swap_promise_result_.reason);
4802 EXPECT_TRUE(swap_promise_result_.dtor_called); 4849 EXPECT_TRUE(swap_promise_result_.dtor_called);
4803 } 4850 }
(...skipping 1108 matching lines...) Expand 10 before | Expand all | Expand 10 after
5912 5959
5913 protected: 5960 protected:
5914 FakeContentLayerClient client_; 5961 FakeContentLayerClient client_;
5915 size_t notify_ready_to_activate_count_; 5962 size_t notify_ready_to_activate_count_;
5916 size_t scheduled_manage_tiles_count_; 5963 size_t scheduled_manage_tiles_count_;
5917 }; 5964 };
5918 5965
5919 MULTI_THREAD_IMPL_TEST_F(LayerTreeHostTestOneActivatePerManageTiles); 5966 MULTI_THREAD_IMPL_TEST_F(LayerTreeHostTestOneActivatePerManageTiles);
5920 5967
5921 } // namespace cc 5968 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/layer_tree_host_impl_unittest.cc ('k') | cc/trees/layer_tree_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698