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/solid_color_layer_impl.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <vector> 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/layers/append_quads_data.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/layers/solid_color_layer.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/quads/solid_color_draw_quad.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/test/fake_impl_proxy.h" 13a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "cc/test/fake_layer_tree_host.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/test/layer_test_common.h" 1523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "cc/test/test_shared_bitmap_manager.h" 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/trees/single_thread_proxy.h" 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h" 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace cc { 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(SolidColorLayerImplTest, VerifyTilingCompleteAndNoOverlap) { 24f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) MockOcclusionTracker<LayerImpl> occlusion_tracker; 25f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) scoped_ptr<RenderPass> render_pass = RenderPass::Create(); 26f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Size layer_size = gfx::Size(800, 600); 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Rect visible_content_rect = gfx::Rect(layer_size); 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FakeImplProxy proxy; 3123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) TestSharedBitmapManager shared_bitmap_manager; 3223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) FakeLayerTreeHostImpl host_impl(&proxy, &shared_bitmap_manager); 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<SolidColorLayerImpl> layer = 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SolidColorLayerImpl::Create(host_impl.active_tree(), 1); 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer->draw_properties().visible_content_rect = visible_content_rect; 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer->SetBounds(layer_size); 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer->SetContentBounds(layer_size); 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer->CreateRenderSurface(); 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer->draw_properties().render_target = layer.get(); 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AppendQuadsData data; 42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch layer->AppendQuads(render_pass.get(), occlusion_tracker, &data); 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch LayerTestCommon::VerifyQuadsExactlyCoverRect(render_pass->quad_list, 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) visible_content_rect); 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(SolidColorLayerImplTest, VerifyCorrectBackgroundColorInQuad) { 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SkColor test_color = 0xFFA55AFF; 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 51f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) MockOcclusionTracker<LayerImpl> occlusion_tracker; 52f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) scoped_ptr<RenderPass> render_pass = RenderPass::Create(); 53f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Size layer_size = gfx::Size(100, 100); 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Rect visible_content_rect = gfx::Rect(layer_size); 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FakeImplProxy proxy; 5823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) TestSharedBitmapManager shared_bitmap_manager; 5923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) FakeLayerTreeHostImpl host_impl(&proxy, &shared_bitmap_manager); 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<SolidColorLayerImpl> layer = 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SolidColorLayerImpl::Create(host_impl.active_tree(), 1); 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer->draw_properties().visible_content_rect = visible_content_rect; 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer->SetBounds(layer_size); 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer->SetContentBounds(layer_size); 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer->SetBackgroundColor(test_color); 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer->CreateRenderSurface(); 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer->draw_properties().render_target = layer.get(); 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AppendQuadsData data; 70116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch layer->AppendQuads(render_pass.get(), occlusion_tracker, &data); 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 72116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_EQ(render_pass->quad_list.size(), 1U); 731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ( 741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SolidColorDrawQuad::MaterialCast(render_pass->quad_list.front())->color, 751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci test_color); 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(SolidColorLayerImplTest, VerifyCorrectOpacityInQuad) { 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const float opacity = 0.5f; 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 81f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) MockOcclusionTracker<LayerImpl> occlusion_tracker; 82f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) scoped_ptr<RenderPass> render_pass = RenderPass::Create(); 83f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Size layer_size = gfx::Size(100, 100); 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Rect visible_content_rect = gfx::Rect(layer_size); 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FakeImplProxy proxy; 8823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) TestSharedBitmapManager shared_bitmap_manager; 8923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) FakeLayerTreeHostImpl host_impl(&proxy, &shared_bitmap_manager); 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<SolidColorLayerImpl> layer = 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SolidColorLayerImpl::Create(host_impl.active_tree(), 1); 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer->draw_properties().visible_content_rect = visible_content_rect; 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer->SetBounds(layer_size); 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer->SetContentBounds(layer_size); 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer->draw_properties().opacity = opacity; 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer->CreateRenderSurface(); 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer->draw_properties().render_target = layer.get(); 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AppendQuadsData data; 100116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch layer->AppendQuads(render_pass.get(), occlusion_tracker, &data); 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 102116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_EQ(render_pass->quad_list.size(), 1U); 1031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(opacity, 1041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SolidColorDrawQuad::MaterialCast(render_pass->quad_list.front()) 1051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ->opacity()); 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(SolidColorLayerImplTest, VerifyOpaqueRect) { 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Size layer_size = gfx::Size(100, 100); 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Rect visible_content_rect = gfx::Rect(layer_size); 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<SolidColorLayer> layer = SolidColorLayer::Create(); 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer->SetBounds(layer_size); 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer->SetForceRenderSurface(true); 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<Layer> root = Layer::Create(); 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) root->AddChild(layer); 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci FakeLayerTreeHostClient client(FakeLayerTreeHostClient::DIRECT_3D); 1201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<FakeLayerTreeHost> host = FakeLayerTreeHost::Create(&client); 121a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) host->SetRootLayer(root); 122a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 123ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch RenderSurfaceLayerList render_surface_layer_list; 124558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting inputs( 1251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci root.get(), gfx::Size(500, 500), &render_surface_layer_list); 126558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch LayerTreeHostCommon::CalculateDrawProperties(&inputs); 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(layer->contents_opaque()); 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer->SetBackgroundColor(SkColorSetARGBInline(255, 10, 20, 30)); 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(layer->contents_opaque()); 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<SolidColorLayerImpl> layer_impl = 133a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) SolidColorLayerImpl::Create(host->host_impl()->active_tree(), 134a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) layer->id()); 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer->PushPropertiesTo(layer_impl.get()); 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The impl layer should call itself opaque as well. 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(layer_impl->contents_opaque()); 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Impl layer has 1 opacity, and the color is opaque, so the opaque_rect 1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // should be the full tile. 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_impl->draw_properties().opacity = 1; 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 144f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) MockOcclusionTracker<LayerImpl> occlusion_tracker; 145f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) scoped_ptr<RenderPass> render_pass = RenderPass::Create(); 146f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AppendQuadsData data; 148116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch layer_impl->AppendQuads(render_pass.get(), occlusion_tracker, &data); 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 150116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_EQ(render_pass->quad_list.size(), 1U); 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(visible_content_rect.ToString(), 1521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci render_pass->quad_list.front()->opaque_rect.ToString()); 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(layer->contents_opaque()); 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer->SetBackgroundColor(SkColorSetARGBInline(254, 10, 20, 30)); 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(layer->contents_opaque()); 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<SolidColorLayerImpl> layer_impl = 160a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) SolidColorLayerImpl::Create(host->host_impl()->active_tree(), 161a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) layer->id()); 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer->PushPropertiesTo(layer_impl.get()); 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The impl layer should callnot itself opaque anymore. 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(layer_impl->contents_opaque()); 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Impl layer has 1 opacity, but the color is not opaque, so the opaque_rect 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // should be empty. 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer_impl->draw_properties().opacity = 1; 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 171f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) MockOcclusionTracker<LayerImpl> occlusion_tracker; 172f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) scoped_ptr<RenderPass> render_pass = RenderPass::Create(); 173f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AppendQuadsData data; 175116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch layer_impl->AppendQuads(render_pass.get(), occlusion_tracker, &data); 1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 177116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_EQ(render_pass->quad_list.size(), 1U); 1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(gfx::Rect().ToString(), 1791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci render_pass->quad_list.front()->opaque_rect.ToString()); 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 183a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)TEST(SolidColorLayerImplTest, Occlusion) { 184a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gfx::Size layer_size(1000, 1000); 185a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gfx::Size viewport_size(1000, 1000); 186a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 187a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) LayerTestCommon::LayerImplTest impl; 188a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 189a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SolidColorLayerImpl* solid_color_layer_impl = 190a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) impl.AddChildToRoot<SolidColorLayerImpl>(); 191a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) solid_color_layer_impl->SetBackgroundColor(SkColorSetARGB(255, 10, 20, 30)); 192a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) solid_color_layer_impl->SetBounds(layer_size); 193a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) solid_color_layer_impl->SetContentBounds(layer_size); 194a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) solid_color_layer_impl->SetDrawsContent(true); 195a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 196a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) impl.CalcDrawProps(viewport_size); 197a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 198a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) { 19923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) SCOPED_TRACE("No occlusion"); 200a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gfx::Rect occluded; 20123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) impl.AppendQuadsWithOcclusion(solid_color_layer_impl, occluded); 202a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 20323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) LayerTestCommon::VerifyQuadsExactlyCoverRect(impl.quad_list(), 20423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) gfx::Rect(layer_size)); 20523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) EXPECT_EQ(16u, impl.quad_list().size()); 206a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 207a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 208a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) { 20923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) SCOPED_TRACE("Full occlusion"); 21023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) gfx::Rect occluded(solid_color_layer_impl->visible_content_rect()); 21123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) impl.AppendQuadsWithOcclusion(solid_color_layer_impl, occluded); 21223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 21323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) LayerTestCommon::VerifyQuadsExactlyCoverRect(impl.quad_list(), gfx::Rect()); 21423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) EXPECT_EQ(impl.quad_list().size(), 0u); 215a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 216a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 217a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) { 21823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) SCOPED_TRACE("Partial occlusion"); 219a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gfx::Rect occluded(200, 200, 256 * 3, 256 * 3); 22023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) impl.AppendQuadsWithOcclusion(solid_color_layer_impl, occluded); 221a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 222a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) size_t partially_occluded_count = 0; 2231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci LayerTestCommon::VerifyQuadsAreOccluded( 2241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci impl.quad_list(), occluded, &partially_occluded_count); 225a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // 4 quads are completely occluded, 8 are partially occluded. 22623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) EXPECT_EQ(16u - 4u, impl.quad_list().size()); 227a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(8u, partially_occluded_count); 228a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 229a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 230a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 2322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace cc 233