12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 2012 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/layers/layer_iterator.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include <vector> 8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/layers/layer.h" 10a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "cc/test/fake_layer_tree_host.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/trees/layer_tree_host_common.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gfx/transform.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using ::testing::Mock; 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using ::testing::_; 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using ::testing::AtLeast; 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using ::testing::AnyNumber; 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace cc { 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class TestLayer : public Layer { 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static scoped_refptr<TestLayer> Create() { 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return make_scoped_refptr(new TestLayer()); 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int count_representing_target_surface_; 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int count_representing_contributing_surface_; 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int count_representing_itself_; 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool DrawsContent() const OVERRIDE { return draws_content_; } 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_draws_content(bool draws_content) { draws_content_ = draws_content; } 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestLayer() : Layer(), draws_content_(true) { 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetBounds(gfx::Size(100, 100)); 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetPosition(gfx::Point()); 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~TestLayer() {} 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool draws_content_; 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define EXPECT_COUNT(layer, target, contrib, itself) \ 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(target, layer->count_representing_target_surface_); \ 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(contrib, layer->count_representing_contributing_surface_); \ 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(itself, layer->count_representing_itself_); 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)typedef LayerIterator<Layer> FrontToBack; 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 54ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochvoid ResetCounts(RenderSurfaceLayerList* render_surface_layer_list) { 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (unsigned surface_index = 0; 56ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch surface_index < render_surface_layer_list->size(); 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ++surface_index) { 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestLayer* render_surface_layer = static_cast<TestLayer*>( 59ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch render_surface_layer_list->at(surface_index)); 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RenderSurface* render_surface = render_surface_layer->render_surface(); 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) render_surface_layer->count_representing_target_surface_ = -1; 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) render_surface_layer->count_representing_contributing_surface_ = -1; 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) render_surface_layer->count_representing_itself_ = -1; 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (unsigned layer_index = 0; 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_index < render_surface->layer_list().size(); 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ++layer_index) { 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestLayer* layer = static_cast<TestLayer*>( 705c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu render_surface->layer_list().at(layer_index).get()); 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer->count_representing_target_surface_ = -1; 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer->count_representing_contributing_surface_ = -1; 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer->count_representing_itself_ = -1; 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void IterateFrontToBack( 80ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch RenderSurfaceLayerList* render_surface_layer_list) { 81ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch ResetCounts(render_surface_layer_list); 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int count = 0; 83ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch for (FrontToBack it = FrontToBack::Begin(render_surface_layer_list); 84ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch it != FrontToBack::End(render_surface_layer_list); 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ++it, ++count) { 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestLayer* layer = static_cast<TestLayer*>(*it); 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (it.represents_target_render_surface()) 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer->count_representing_target_surface_ = count; 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (it.represents_contributing_render_surface()) 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer->count_representing_contributing_surface_ = count; 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (it.represents_itself()) 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer->count_representing_itself_ = count; 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(LayerIteratorTest, EmptyTree) { 97ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch RenderSurfaceLayerList render_surface_layer_list; 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 99ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch IterateFrontToBack(&render_surface_layer_list); 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(LayerIteratorTest, SimpleTree) { 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<TestLayer> root_layer = TestLayer::Create(); 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<TestLayer> first = TestLayer::Create(); 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<TestLayer> second = TestLayer::Create(); 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<TestLayer> third = TestLayer::Create(); 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<TestLayer> fourth = TestLayer::Create(); 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) root_layer->AddChild(first); 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) root_layer->AddChild(second); 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) root_layer->AddChild(third); 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) root_layer->AddChild(fourth); 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci FakeLayerTreeHostClient client(FakeLayerTreeHostClient::DIRECT_3D); 1151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<FakeLayerTreeHost> host = FakeLayerTreeHost::Create(&client); 116a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) host->SetRootLayer(root_layer); 117a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 118ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch RenderSurfaceLayerList render_surface_layer_list; 119558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting inputs( 120558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch root_layer.get(), root_layer->bounds(), &render_surface_layer_list); 121558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch LayerTreeHostCommon::CalculateDrawProperties(&inputs); 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 123ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch IterateFrontToBack(&render_surface_layer_list); 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_COUNT(root_layer, 5, -1, 4); 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_COUNT(first, -1, -1, 3); 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_COUNT(second, -1, -1, 2); 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_COUNT(third, -1, -1, 1); 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_COUNT(fourth, -1, -1, 0); 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(LayerIteratorTest, ComplexTree) { 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<TestLayer> root_layer = TestLayer::Create(); 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<TestLayer> root1 = TestLayer::Create(); 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<TestLayer> root2 = TestLayer::Create(); 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<TestLayer> root3 = TestLayer::Create(); 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<TestLayer> root21 = TestLayer::Create(); 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<TestLayer> root22 = TestLayer::Create(); 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<TestLayer> root23 = TestLayer::Create(); 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<TestLayer> root221 = TestLayer::Create(); 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<TestLayer> root231 = TestLayer::Create(); 1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) root_layer->AddChild(root1); 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) root_layer->AddChild(root2); 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) root_layer->AddChild(root3); 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) root2->AddChild(root21); 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) root2->AddChild(root22); 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) root2->AddChild(root23); 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) root22->AddChild(root221); 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) root23->AddChild(root231); 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci FakeLayerTreeHostClient client(FakeLayerTreeHostClient::DIRECT_3D); 1521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<FakeLayerTreeHost> host = FakeLayerTreeHost::Create(&client); 153a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) host->SetRootLayer(root_layer); 154a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 155ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch RenderSurfaceLayerList render_surface_layer_list; 156558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting inputs( 157558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch root_layer.get(), root_layer->bounds(), &render_surface_layer_list); 158558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch LayerTreeHostCommon::CalculateDrawProperties(&inputs); 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 160ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch IterateFrontToBack(&render_surface_layer_list); 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_COUNT(root_layer, 9, -1, 8); 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_COUNT(root1, -1, -1, 7); 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_COUNT(root2, -1, -1, 6); 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_COUNT(root21, -1, -1, 5); 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_COUNT(root22, -1, -1, 4); 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_COUNT(root221, -1, -1, 3); 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_COUNT(root23, -1, -1, 2); 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_COUNT(root231, -1, -1, 1); 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_COUNT(root3, -1, -1, 0); 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(LayerIteratorTest, ComplexTreeMultiSurface) { 1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<TestLayer> root_layer = TestLayer::Create(); 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<TestLayer> root1 = TestLayer::Create(); 1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<TestLayer> root2 = TestLayer::Create(); 1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<TestLayer> root3 = TestLayer::Create(); 1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<TestLayer> root21 = TestLayer::Create(); 1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<TestLayer> root22 = TestLayer::Create(); 1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<TestLayer> root23 = TestLayer::Create(); 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<TestLayer> root221 = TestLayer::Create(); 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<TestLayer> root231 = TestLayer::Create(); 1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) root_layer->AddChild(root1); 1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) root_layer->AddChild(root2); 1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) root_layer->AddChild(root3); 1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) root2->set_draws_content(false); 1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) root2->SetOpacity(0.5f); 1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) root2->SetForceRenderSurface(true); // Force the layer to own a new surface. 1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) root2->AddChild(root21); 1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) root2->AddChild(root22); 1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) root2->AddChild(root23); 1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) root22->SetOpacity(0.5f); 1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) root22->AddChild(root221); 1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) root23->SetOpacity(0.5f); 1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) root23->AddChild(root231); 1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci FakeLayerTreeHostClient client(FakeLayerTreeHostClient::DIRECT_3D); 1981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<FakeLayerTreeHost> host = FakeLayerTreeHost::Create(&client); 199a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) host->SetRootLayer(root_layer); 200a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 201ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch RenderSurfaceLayerList render_surface_layer_list; 202558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting inputs( 203558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch root_layer.get(), root_layer->bounds(), &render_surface_layer_list); 204558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch LayerTreeHostCommon::CalculateDrawProperties(&inputs); 2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 206ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch IterateFrontToBack(&render_surface_layer_list); 2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_COUNT(root_layer, 14, -1, 13); 2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_COUNT(root1, -1, -1, 12); 2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_COUNT(root2, 10, 11, -1); 2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_COUNT(root21, -1, -1, 9); 2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_COUNT(root22, 7, 8, 6); 2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_COUNT(root221, -1, -1, 5); 2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_COUNT(root23, 3, 4, 2); 2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_COUNT(root231, -1, -1, 1); 2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_COUNT(root3, -1, -1, 0); 2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace cc 220