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

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

Issue 1413053004: cc: Remove LayerTreeHostImpl::FrameData::render_passes_by_id. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 1 month 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
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_impl.h" 5 #include "cc/trees/layer_tree_host_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <cmath> 8 #include <cmath>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 8646 matching lines...) Expand 10 before | Expand all | Expand 10 after
8657 // Really we just need at least one client notification each time 8657 // Really we just need at least one client notification each time
8658 // we go from having a valid output surface to not having a valid output 8658 // we go from having a valid output surface to not having a valid output
8659 // surface. 8659 // surface.
8660 EXPECT_EQ(0, num_lost_surfaces_); 8660 EXPECT_EQ(0, num_lost_surfaces_);
8661 host_impl_->DidLoseOutputSurface(); 8661 host_impl_->DidLoseOutputSurface();
8662 EXPECT_EQ(1, num_lost_surfaces_); 8662 EXPECT_EQ(1, num_lost_surfaces_);
8663 host_impl_->DidLoseOutputSurface(); 8663 host_impl_->DidLoseOutputSurface();
8664 EXPECT_LE(1, num_lost_surfaces_); 8664 EXPECT_LE(1, num_lost_surfaces_);
8665 } 8665 }
8666 8666
8667 size_t CountRenderPassesWithId(const RenderPassList& list, RenderPassId id) {
8668 return std::count_if(list.begin(), list.end(),
8669 [id](const RenderPass* p) { return p->id == id; });
8670 }
8671
8667 TEST_F(LayerTreeHostImplTest, RemoveUnreferencedRenderPass) { 8672 TEST_F(LayerTreeHostImplTest, RemoveUnreferencedRenderPass) {
8668 LayerTreeHostImpl::FrameData frame; 8673 LayerTreeHostImpl::FrameData frame;
8669 frame.render_passes.push_back(RenderPass::Create()); 8674 frame.render_passes.push_back(RenderPass::Create());
8670 RenderPass* pass3 = frame.render_passes.back(); 8675 RenderPass* pass3 = frame.render_passes.back();
8671 frame.render_passes.push_back(RenderPass::Create()); 8676 frame.render_passes.push_back(RenderPass::Create());
8672 RenderPass* pass2 = frame.render_passes.back(); 8677 RenderPass* pass2 = frame.render_passes.back();
8673 frame.render_passes.push_back(RenderPass::Create()); 8678 frame.render_passes.push_back(RenderPass::Create());
8674 RenderPass* pass1 = frame.render_passes.back(); 8679 RenderPass* pass1 = frame.render_passes.back();
8675 8680
8676 pass1->SetNew(RenderPassId(1, 0), gfx::Rect(), gfx::Rect(), gfx::Transform()); 8681 pass1->SetNew(RenderPassId(1, 0), gfx::Rect(), gfx::Rect(), gfx::Transform());
8677 pass2->SetNew(RenderPassId(2, 0), gfx::Rect(), gfx::Rect(), gfx::Transform()); 8682 pass2->SetNew(RenderPassId(2, 0), gfx::Rect(), gfx::Rect(), gfx::Transform());
8678 pass3->SetNew(RenderPassId(3, 0), gfx::Rect(), gfx::Rect(), gfx::Transform()); 8683 pass3->SetNew(RenderPassId(3, 0), gfx::Rect(), gfx::Rect(), gfx::Transform());
8679 8684
8680 frame.render_passes_by_id[pass1->id] = pass1;
8681 frame.render_passes_by_id[pass2->id] = pass2;
8682 frame.render_passes_by_id[pass3->id] = pass3;
8683
8684 // Add a quad to each pass so they aren't empty. 8685 // Add a quad to each pass so they aren't empty.
8685 SolidColorDrawQuad* color_quad; 8686 SolidColorDrawQuad* color_quad;
8686 color_quad = pass1->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); 8687 color_quad = pass1->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
8687 color_quad->material = DrawQuad::SOLID_COLOR; 8688 color_quad->material = DrawQuad::SOLID_COLOR;
8688 color_quad = pass2->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); 8689 color_quad = pass2->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
8689 color_quad->material = DrawQuad::SOLID_COLOR; 8690 color_quad->material = DrawQuad::SOLID_COLOR;
8690 color_quad = pass3->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); 8691 color_quad = pass3->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
8691 color_quad->material = DrawQuad::SOLID_COLOR; 8692 color_quad->material = DrawQuad::SOLID_COLOR;
8692 8693
8693 // pass3 is referenced by pass2. 8694 // pass3 is referenced by pass2.
8694 RenderPassDrawQuad* rpdq = 8695 RenderPassDrawQuad* rpdq =
8695 pass2->CreateAndAppendDrawQuad<RenderPassDrawQuad>(); 8696 pass2->CreateAndAppendDrawQuad<RenderPassDrawQuad>();
8696 rpdq->material = DrawQuad::RENDER_PASS; 8697 rpdq->material = DrawQuad::RENDER_PASS;
8697 rpdq->render_pass_id = pass3->id; 8698 rpdq->render_pass_id = pass3->id;
8698 8699
8699 // But pass2 is not referenced by pass1. So pass2 and pass3 should be culled. 8700 // But pass2 is not referenced by pass1. So pass2 and pass3 should be culled.
8700 FakeLayerTreeHostImpl::RemoveRenderPasses(&frame); 8701 FakeLayerTreeHostImpl::RemoveRenderPasses(&frame);
8701 EXPECT_EQ(1u, frame.render_passes_by_id.size());
8702 EXPECT_TRUE(frame.render_passes_by_id[RenderPassId(1, 0)]);
8703 EXPECT_FALSE(frame.render_passes_by_id[RenderPassId(2, 0)]);
8704 EXPECT_FALSE(frame.render_passes_by_id[RenderPassId(3, 0)]);
8705 EXPECT_EQ(1u, frame.render_passes.size()); 8702 EXPECT_EQ(1u, frame.render_passes.size());
8703 EXPECT_EQ(1u,
8704 CountRenderPassesWithId(frame.render_passes, RenderPassId(1, 0)));
8705 EXPECT_EQ(0u,
8706 CountRenderPassesWithId(frame.render_passes, RenderPassId(2, 0)));
8707 EXPECT_EQ(0u,
8708 CountRenderPassesWithId(frame.render_passes, RenderPassId(3, 0)));
8706 EXPECT_EQ(RenderPassId(1, 0), frame.render_passes[0]->id); 8709 EXPECT_EQ(RenderPassId(1, 0), frame.render_passes[0]->id);
8707 } 8710 }
8708 8711
8709 TEST_F(LayerTreeHostImplTest, RemoveEmptyRenderPass) { 8712 TEST_F(LayerTreeHostImplTest, RemoveEmptyRenderPass) {
8710 LayerTreeHostImpl::FrameData frame; 8713 LayerTreeHostImpl::FrameData frame;
8711 frame.render_passes.push_back(RenderPass::Create()); 8714 frame.render_passes.push_back(RenderPass::Create());
8712 RenderPass* pass3 = frame.render_passes.back(); 8715 RenderPass* pass3 = frame.render_passes.back();
8713 frame.render_passes.push_back(RenderPass::Create()); 8716 frame.render_passes.push_back(RenderPass::Create());
8714 RenderPass* pass2 = frame.render_passes.back(); 8717 RenderPass* pass2 = frame.render_passes.back();
8715 frame.render_passes.push_back(RenderPass::Create()); 8718 frame.render_passes.push_back(RenderPass::Create());
8716 RenderPass* pass1 = frame.render_passes.back(); 8719 RenderPass* pass1 = frame.render_passes.back();
8717 8720
8718 pass1->SetNew(RenderPassId(1, 0), gfx::Rect(), gfx::Rect(), gfx::Transform()); 8721 pass1->SetNew(RenderPassId(1, 0), gfx::Rect(), gfx::Rect(), gfx::Transform());
8719 pass2->SetNew(RenderPassId(2, 0), gfx::Rect(), gfx::Rect(), gfx::Transform()); 8722 pass2->SetNew(RenderPassId(2, 0), gfx::Rect(), gfx::Rect(), gfx::Transform());
8720 pass3->SetNew(RenderPassId(3, 0), gfx::Rect(), gfx::Rect(), gfx::Transform()); 8723 pass3->SetNew(RenderPassId(3, 0), gfx::Rect(), gfx::Rect(), gfx::Transform());
8721 8724
8722 frame.render_passes_by_id[pass1->id] = pass1;
8723 frame.render_passes_by_id[pass2->id] = pass2;
8724 frame.render_passes_by_id[pass3->id] = pass3;
8725
8726 // pass1 is not empty, but pass2 and pass3 are. 8725 // pass1 is not empty, but pass2 and pass3 are.
8727 SolidColorDrawQuad* color_quad; 8726 SolidColorDrawQuad* color_quad;
8728 color_quad = pass1->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); 8727 color_quad = pass1->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
8729 color_quad->material = DrawQuad::SOLID_COLOR; 8728 color_quad->material = DrawQuad::SOLID_COLOR;
8730 8729
8731 // pass3 is referenced by pass2. 8730 // pass3 is referenced by pass2.
8732 RenderPassDrawQuad* rpdq = 8731 RenderPassDrawQuad* rpdq =
8733 pass2->CreateAndAppendDrawQuad<RenderPassDrawQuad>(); 8732 pass2->CreateAndAppendDrawQuad<RenderPassDrawQuad>();
8734 rpdq->material = DrawQuad::RENDER_PASS; 8733 rpdq->material = DrawQuad::RENDER_PASS;
8735 rpdq->render_pass_id = pass3->id; 8734 rpdq->render_pass_id = pass3->id;
8736 8735
8737 // pass2 is referenced by pass1. 8736 // pass2 is referenced by pass1.
8738 rpdq = pass1->CreateAndAppendDrawQuad<RenderPassDrawQuad>(); 8737 rpdq = pass1->CreateAndAppendDrawQuad<RenderPassDrawQuad>();
8739 rpdq->material = DrawQuad::RENDER_PASS; 8738 rpdq->material = DrawQuad::RENDER_PASS;
8740 rpdq->render_pass_id = pass2->id; 8739 rpdq->render_pass_id = pass2->id;
8741 8740
8742 // Since pass3 is empty it should be removed. Then pass2 is empty too, and 8741 // Since pass3 is empty it should be removed. Then pass2 is empty too, and
8743 // should be removed. 8742 // should be removed.
8744 FakeLayerTreeHostImpl::RemoveRenderPasses(&frame); 8743 FakeLayerTreeHostImpl::RemoveRenderPasses(&frame);
8745 EXPECT_EQ(1u, frame.render_passes_by_id.size());
8746 EXPECT_TRUE(frame.render_passes_by_id[RenderPassId(1, 0)]);
8747 EXPECT_FALSE(frame.render_passes_by_id[RenderPassId(2, 0)]);
8748 EXPECT_FALSE(frame.render_passes_by_id[RenderPassId(3, 0)]);
8749 EXPECT_EQ(1u, frame.render_passes.size()); 8744 EXPECT_EQ(1u, frame.render_passes.size());
8745 EXPECT_EQ(1u,
8746 CountRenderPassesWithId(frame.render_passes, RenderPassId(1, 0)));
8747 EXPECT_EQ(0u,
8748 CountRenderPassesWithId(frame.render_passes, RenderPassId(2, 0)));
8749 EXPECT_EQ(0u,
8750 CountRenderPassesWithId(frame.render_passes, RenderPassId(3, 0)));
8750 EXPECT_EQ(RenderPassId(1, 0), frame.render_passes[0]->id); 8751 EXPECT_EQ(RenderPassId(1, 0), frame.render_passes[0]->id);
8751 // The RenderPassDrawQuad should be removed from pass1. 8752 // The RenderPassDrawQuad should be removed from pass1.
8752 EXPECT_EQ(1u, pass1->quad_list.size()); 8753 EXPECT_EQ(1u, pass1->quad_list.size());
8753 EXPECT_EQ(DrawQuad::SOLID_COLOR, pass1->quad_list.ElementAt(0)->material); 8754 EXPECT_EQ(DrawQuad::SOLID_COLOR, pass1->quad_list.ElementAt(0)->material);
8754 } 8755 }
8755 8756
8756 TEST_F(LayerTreeHostImplTest, DoNotRemoveEmptyRootRenderPass) { 8757 TEST_F(LayerTreeHostImplTest, DoNotRemoveEmptyRootRenderPass) {
8757 LayerTreeHostImpl::FrameData frame; 8758 LayerTreeHostImpl::FrameData frame;
8758 frame.render_passes.push_back(RenderPass::Create()); 8759 frame.render_passes.push_back(RenderPass::Create());
8759 RenderPass* pass3 = frame.render_passes.back(); 8760 RenderPass* pass3 = frame.render_passes.back();
8760 frame.render_passes.push_back(RenderPass::Create()); 8761 frame.render_passes.push_back(RenderPass::Create());
8761 RenderPass* pass2 = frame.render_passes.back(); 8762 RenderPass* pass2 = frame.render_passes.back();
8762 frame.render_passes.push_back(RenderPass::Create()); 8763 frame.render_passes.push_back(RenderPass::Create());
8763 RenderPass* pass1 = frame.render_passes.back(); 8764 RenderPass* pass1 = frame.render_passes.back();
8764 8765
8765 pass1->SetNew(RenderPassId(1, 0), gfx::Rect(), gfx::Rect(), gfx::Transform()); 8766 pass1->SetNew(RenderPassId(1, 0), gfx::Rect(), gfx::Rect(), gfx::Transform());
8766 pass2->SetNew(RenderPassId(2, 0), gfx::Rect(), gfx::Rect(), gfx::Transform()); 8767 pass2->SetNew(RenderPassId(2, 0), gfx::Rect(), gfx::Rect(), gfx::Transform());
8767 pass3->SetNew(RenderPassId(3, 0), gfx::Rect(), gfx::Rect(), gfx::Transform()); 8768 pass3->SetNew(RenderPassId(3, 0), gfx::Rect(), gfx::Rect(), gfx::Transform());
8768 8769
8769 frame.render_passes_by_id[pass1->id] = pass1;
8770 frame.render_passes_by_id[pass2->id] = pass2;
8771 frame.render_passes_by_id[pass3->id] = pass3;
8772
8773 // pass3 is referenced by pass2. 8770 // pass3 is referenced by pass2.
8774 RenderPassDrawQuad* rpdq = 8771 RenderPassDrawQuad* rpdq =
8775 pass2->CreateAndAppendDrawQuad<RenderPassDrawQuad>(); 8772 pass2->CreateAndAppendDrawQuad<RenderPassDrawQuad>();
8776 rpdq->material = DrawQuad::RENDER_PASS; 8773 rpdq->material = DrawQuad::RENDER_PASS;
8777 rpdq->render_pass_id = pass3->id; 8774 rpdq->render_pass_id = pass3->id;
8778 8775
8779 // pass2 is referenced by pass1. 8776 // pass2 is referenced by pass1.
8780 rpdq = pass1->CreateAndAppendDrawQuad<RenderPassDrawQuad>(); 8777 rpdq = pass1->CreateAndAppendDrawQuad<RenderPassDrawQuad>();
8781 rpdq->material = DrawQuad::RENDER_PASS; 8778 rpdq->material = DrawQuad::RENDER_PASS;
8782 rpdq->render_pass_id = pass2->id; 8779 rpdq->render_pass_id = pass2->id;
8783 8780
8784 // Since pass3 is empty it should be removed. Then pass2 is empty too, and 8781 // Since pass3 is empty it should be removed. Then pass2 is empty too, and
8785 // should be removed. Then pass1 is empty too, but it's the root so it should 8782 // should be removed. Then pass1 is empty too, but it's the root so it should
8786 // not be removed. 8783 // not be removed.
8787 FakeLayerTreeHostImpl::RemoveRenderPasses(&frame); 8784 FakeLayerTreeHostImpl::RemoveRenderPasses(&frame);
8788 EXPECT_EQ(1u, frame.render_passes_by_id.size());
8789 EXPECT_TRUE(frame.render_passes_by_id[RenderPassId(1, 0)]);
8790 EXPECT_FALSE(frame.render_passes_by_id[RenderPassId(2, 0)]);
8791 EXPECT_FALSE(frame.render_passes_by_id[RenderPassId(3, 0)]);
8792 EXPECT_EQ(1u, frame.render_passes.size()); 8785 EXPECT_EQ(1u, frame.render_passes.size());
8786 EXPECT_EQ(1u,
8787 CountRenderPassesWithId(frame.render_passes, RenderPassId(1, 0)));
8788 EXPECT_EQ(0u,
8789 CountRenderPassesWithId(frame.render_passes, RenderPassId(2, 0)));
8790 EXPECT_EQ(0u,
8791 CountRenderPassesWithId(frame.render_passes, RenderPassId(3, 0)));
8793 EXPECT_EQ(RenderPassId(1, 0), frame.render_passes[0]->id); 8792 EXPECT_EQ(RenderPassId(1, 0), frame.render_passes[0]->id);
8794 // The RenderPassDrawQuad should be removed from pass1. 8793 // The RenderPassDrawQuad should be removed from pass1.
8795 EXPECT_EQ(0u, pass1->quad_list.size()); 8794 EXPECT_EQ(0u, pass1->quad_list.size());
8796 } 8795 }
8797 8796
8798 class FakeVideoFrameController : public VideoFrameController { 8797 class FakeVideoFrameController : public VideoFrameController {
8799 public: 8798 public:
8800 void OnBeginFrame(const BeginFrameArgs& args) override { 8799 void OnBeginFrame(const BeginFrameArgs& args) override {
8801 begin_frame_args_ = args; 8800 begin_frame_args_ = args;
8802 did_draw_frame_ = false; 8801 did_draw_frame_ = false;
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after
9018 host_impl_->active_tree()->SetPageScaleOnActiveTree(2.f); 9017 host_impl_->active_tree()->SetPageScaleOnActiveTree(2.f);
9019 DrawFrame(); 9018 DrawFrame();
9020 in_subtree_of_page_scale_layer = host_impl_->active_tree()->LayerById(100); 9019 in_subtree_of_page_scale_layer = host_impl_->active_tree()->LayerById(100);
9021 node = host_impl_->active_tree()->property_trees()->transform_tree.Node( 9020 node = host_impl_->active_tree()->property_trees()->transform_tree.Node(
9022 in_subtree_of_page_scale_layer->transform_tree_index()); 9021 in_subtree_of_page_scale_layer->transform_tree_index());
9023 EXPECT_EQ(node->data.sublayer_scale, gfx::Vector2dF(2.f, 2.f)); 9022 EXPECT_EQ(node->data.sublayer_scale, gfx::Vector2dF(2.f, 2.f));
9024 } 9023 }
9025 9024
9026 } // namespace 9025 } // namespace
9027 } // namespace cc 9026 } // namespace cc
OLDNEW
« cc/trees/layer_tree_host_impl.cc ('K') | « cc/trees/layer_tree_host_impl.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698