14e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 24e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 34e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// found in the LICENSE file. 44e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 54e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "cc/layers/append_quads_data.h" 64e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "cc/layers/ui_resource_layer_impl.h" 7116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "cc/quads/draw_quad.h" 84e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "cc/resources/ui_resource_bitmap.h" 94e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "cc/resources/ui_resource_client.h" 104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "cc/test/fake_impl_proxy.h" 114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "cc/test/fake_layer_tree_host_impl.h" 124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "cc/test/fake_ui_resource_layer_tree_host_impl.h" 134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "cc/test/layer_test_common.h" 1423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "cc/test/test_shared_bitmap_manager.h" 154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "cc/trees/single_thread_proxy.h" 164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h" 174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "ui/gfx/transform.h" 194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)namespace cc { 214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)namespace { 224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)scoped_ptr<UIResourceLayerImpl> GenerateUIResourceLayer( 244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) FakeUIResourceLayerTreeHostImpl* host_impl, 255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const gfx::Size& bitmap_size, 265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const gfx::Size& layer_size, 271e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) bool opaque, 284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) UIResourceId uid) { 294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) gfx::Rect visible_content_rect(layer_size); 304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) scoped_ptr<UIResourceLayerImpl> layer = 314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) UIResourceLayerImpl::Create(host_impl->active_tree(), 1); 324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) layer->draw_properties().visible_content_rect = visible_content_rect; 334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) layer->SetBounds(layer_size); 344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) layer->SetContentBounds(layer_size); 354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) layer->CreateRenderSurface(); 364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) layer->draw_properties().render_target = layer.get(); 374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 38effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch UIResourceBitmap bitmap(bitmap_size, opaque); 394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) host_impl->CreateUIResource(uid, bitmap); 414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) layer->SetUIResourceId(uid); 424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return layer.Pass(); 444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void QuadSizeTest(scoped_ptr<UIResourceLayerImpl> layer, 474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) size_t expected_quad_size) { 48f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) MockOcclusionTracker<LayerImpl> occlusion_tracker; 49f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) scoped_ptr<RenderPass> render_pass = RenderPass::Create(); 50f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) AppendQuadsData data; 52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch layer->AppendQuads(render_pass.get(), occlusion_tracker, &data); 534e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Verify quad rects 55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const QuadList& quads = render_pass->quad_list; 564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(expected_quad_size, quads.size()); 574e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 594e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)TEST(UIResourceLayerImplTest, VerifyDrawQuads) { 604e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) FakeImplProxy proxy; 6123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) TestSharedBitmapManager shared_bitmap_manager; 6223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) FakeUIResourceLayerTreeHostImpl host_impl(&proxy, &shared_bitmap_manager); 634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Make sure we're appending quads when there are valid values. 644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) gfx::Size bitmap_size(100, 100); 654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) gfx::Size layer_size(100, 100);; 664e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) size_t expected_quad_size = 1; 671e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) bool opaque = true; 684e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) UIResourceId uid = 1; 694e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) scoped_ptr<UIResourceLayerImpl> layer = GenerateUIResourceLayer(&host_impl, 704e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) bitmap_size, 714e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) layer_size, 721e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) opaque, 734e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) uid); 744e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) QuadSizeTest(layer.Pass(), expected_quad_size); 754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Make sure we're not appending quads when there are invalid values. 774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) expected_quad_size = 0; 784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) uid = 0; 794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) layer = GenerateUIResourceLayer(&host_impl, 804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) bitmap_size, 814e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) layer_size, 821e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) opaque, 834e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) uid); 844e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) QuadSizeTest(layer.Pass(), expected_quad_size); 854e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 864e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 874e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void OpaqueBoundsTest(scoped_ptr<UIResourceLayerImpl> layer, 885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const gfx::Rect& expected_opaque_bounds) { 89f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) MockOcclusionTracker<LayerImpl> occlusion_tracker; 90f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) scoped_ptr<RenderPass> render_pass = RenderPass::Create(); 91f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 924e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) AppendQuadsData data; 93116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch layer->AppendQuads(render_pass.get(), occlusion_tracker, &data); 944e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 954e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Verify quad rects 96116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const QuadList& quads = render_pass->quad_list; 974e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_GE(quads.size(), (size_t)0); 981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci gfx::Rect opaque_rect = quads.front()->opaque_rect; 994e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(expected_opaque_bounds, opaque_rect); 1004e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 1014e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1021e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)TEST(UIResourceLayerImplTest, VerifySetOpaqueOnSkBitmap) { 1034e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) FakeImplProxy proxy; 10423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) TestSharedBitmapManager shared_bitmap_manager; 10523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) FakeUIResourceLayerTreeHostImpl host_impl(&proxy, &shared_bitmap_manager); 1064e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1074e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) gfx::Size bitmap_size(100, 100); 1084e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) gfx::Size layer_size(100, 100);; 1091e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) bool opaque = false; 1104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) UIResourceId uid = 1; 1114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) scoped_ptr<UIResourceLayerImpl> layer = GenerateUIResourceLayer(&host_impl, 1124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) bitmap_size, 1134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) layer_size, 1141e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) opaque, 1154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) uid); 1164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) gfx::Rect expected_opaque_bounds; 1174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) OpaqueBoundsTest(layer.Pass(), expected_opaque_bounds); 1184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1191e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) opaque = true; 1204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) layer = GenerateUIResourceLayer(&host_impl, 1214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) bitmap_size, 1224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) layer_size, 1231e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) opaque, 1244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) uid); 1251e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) expected_opaque_bounds = gfx::Rect(layer->bounds()); 1261e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) OpaqueBoundsTest(layer.Pass(), expected_opaque_bounds); 1271e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 1281e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 1291e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)TEST(UIResourceLayerImplTest, VerifySetOpaqueOnLayer) { 1301e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) FakeImplProxy proxy; 13123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) TestSharedBitmapManager shared_bitmap_manager; 13223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) FakeUIResourceLayerTreeHostImpl host_impl(&proxy, &shared_bitmap_manager); 1331e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 1341e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) gfx::Size bitmap_size(100, 100); 1351e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) gfx::Size layer_size(100, 100); 1361e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) bool skbitmap_opaque = false; 1371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) UIResourceId uid = 1; 1381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) scoped_ptr<UIResourceLayerImpl> layer = GenerateUIResourceLayer( 1391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) &host_impl, bitmap_size, layer_size, skbitmap_opaque, uid); 1401e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) layer->SetContentsOpaque(false); 1411e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) gfx::Rect expected_opaque_bounds; 1421e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) OpaqueBoundsTest(layer.Pass(), expected_opaque_bounds); 1434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1441e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) layer = GenerateUIResourceLayer( 1451e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) &host_impl, bitmap_size, layer_size, skbitmap_opaque, uid); 1464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) layer->SetContentsOpaque(true); 1474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) expected_opaque_bounds = gfx::Rect(layer->bounds()); 1484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) OpaqueBoundsTest(layer.Pass(), expected_opaque_bounds); 1494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 1504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 15123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)TEST(UIResourceLayerImplTest, Occlusion) { 15223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) gfx::Size layer_size(1000, 1000); 15323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) gfx::Size viewport_size(1000, 1000); 15423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 15523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) LayerTestCommon::LayerImplTest impl; 15623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 15723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) SkBitmap sk_bitmap; 15823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) sk_bitmap.allocN32Pixels(10, 10); 15923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) sk_bitmap.setImmutable(); 16023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) UIResourceId uid = 5; 16123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) UIResourceBitmap bitmap(sk_bitmap); 16223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) impl.host_impl()->CreateUIResource(uid, bitmap); 16323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 16423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) UIResourceLayerImpl* ui_resource_layer_impl = 16523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) impl.AddChildToRoot<UIResourceLayerImpl>(); 16623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) ui_resource_layer_impl->SetBounds(layer_size); 16723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) ui_resource_layer_impl->SetContentBounds(layer_size); 16823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) ui_resource_layer_impl->SetDrawsContent(true); 16923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) ui_resource_layer_impl->SetUIResourceId(uid); 17023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 17123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) impl.CalcDrawProps(viewport_size); 17223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 17323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) { 17423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) SCOPED_TRACE("No occlusion"); 17523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) gfx::Rect occluded; 17623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) impl.AppendQuadsWithOcclusion(ui_resource_layer_impl, occluded); 17723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 17823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) LayerTestCommon::VerifyQuadsExactlyCoverRect(impl.quad_list(), 17923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) gfx::Rect(layer_size)); 18023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) EXPECT_EQ(1u, impl.quad_list().size()); 18123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) } 18223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 18323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) { 18423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) SCOPED_TRACE("Full occlusion"); 18523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) gfx::Rect occluded(ui_resource_layer_impl->visible_content_rect()); 18623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) impl.AppendQuadsWithOcclusion(ui_resource_layer_impl, occluded); 18723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 18823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) LayerTestCommon::VerifyQuadsExactlyCoverRect(impl.quad_list(), gfx::Rect()); 18923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) EXPECT_EQ(impl.quad_list().size(), 0u); 19023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) } 19123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 19223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) { 19323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) SCOPED_TRACE("Partial occlusion"); 19423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) gfx::Rect occluded(200, 0, 800, 1000); 19523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) impl.AppendQuadsWithOcclusion(ui_resource_layer_impl, occluded); 19623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 19723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) size_t partially_occluded_count = 0; 1981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci LayerTestCommon::VerifyQuadsAreOccluded( 1991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci impl.quad_list(), occluded, &partially_occluded_count); 20023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // The layer outputs one quad, which is partially occluded. 20123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) EXPECT_EQ(1u, impl.quad_list().size()); 20223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) EXPECT_EQ(1u, partially_occluded_count); 20323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) } 20423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 20523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 2064e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} // namespace 2074e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} // namespace cc 208