diff options
author | ajuma <ajuma@chromium.org> | 2015-11-30 11:43:44 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-11-30 19:45:05 +0000 |
commit | d9432e3c14de1f2a4b04a5fa5c96ab73d9d9d86e (patch) | |
tree | d71b9a227b940decd452f4546361e786a59b3750 /cc/layers/render_surface_impl_unittest.cc | |
parent | 1dd1fc030f7d06669a1de1538edbaa4723c3e4e1 (diff) | |
download | chromium_src-d9432e3c14de1f2a4b04a5fa5c96ab73d9d9d86e.zip chromium_src-d9432e3c14de1f2a4b04a5fa5c96ab73d9d9d86e.tar.gz chromium_src-d9432e3c14de1f2a4b04a5fa5c96ab73d9d9d86e.tar.bz2 |
cc: Fix draw transform computation for non-drawn layers
When property trees are enabled, draw properties are only
computed for drawn layers. This means that when a non-drawn
layer's draw transform is needed, it must be computed
on-demand using the transform tree rather than being read
from the layer's draw properties.
BUG=560275
CQ_INCLUDE_TRYBOTS=tryserver.blink:linux_blink_rel
Review URL: https://codereview.chromium.org/1479883002
Cr-Commit-Position: refs/heads/master@{#362196}
Diffstat (limited to 'cc/layers/render_surface_impl_unittest.cc')
-rw-r--r-- | cc/layers/render_surface_impl_unittest.cc | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/cc/layers/render_surface_impl_unittest.cc b/cc/layers/render_surface_impl_unittest.cc index ac40675..7d026e6 100644 --- a/cc/layers/render_surface_impl_unittest.cc +++ b/cc/layers/render_surface_impl_unittest.cc @@ -4,6 +4,9 @@ #include "cc/layers/render_surface_impl.h" +#include "cc/layers/append_quads_data.h" +#include "cc/quads/render_pass_draw_quad.h" +#include "cc/test/fake_mask_layer_impl.h" #include "cc/test/layer_test_common.h" #include "testing/gtest/include/gtest/gtest.h" @@ -59,5 +62,56 @@ TEST(RenderSurfaceLayerImplTest, Occlusion) { } } +TEST(RenderSurfaceLayerImplTest, AppendQuadsWithScaledMask) { + gfx::Size layer_size(1000, 1000); + gfx::Size viewport_size(1000, 1000); + + LayerTestCommon::LayerImplTest impl; + scoped_ptr<LayerImpl> root = + LayerImpl::Create(impl.host_impl()->active_tree(), 2); + root->SetHasRenderSurface(true); + scoped_ptr<LayerImpl> surface = + LayerImpl::Create(impl.host_impl()->active_tree(), 3); + surface->SetBounds(layer_size); + surface->SetHasRenderSurface(true); + + gfx::Transform scale; + scale.Scale(2, 2); + surface->SetTransform(scale); + + surface->SetMaskLayer( + FakeMaskLayerImpl::Create(impl.host_impl()->active_tree(), 4)); + surface->mask_layer()->SetDrawsContent(true); + surface->mask_layer()->SetBounds(layer_size); + + scoped_ptr<LayerImpl> child = + LayerImpl::Create(impl.host_impl()->active_tree(), 5); + child->SetDrawsContent(true); + child->SetBounds(layer_size); + + surface->AddChild(std::move(child)); + root->AddChild(std::move(surface)); + impl.host_impl()->active_tree()->SetRootLayer(std::move(root)); + + impl.host_impl()->SetViewportSize(viewport_size); + impl.host_impl()->active_tree()->BuildPropertyTreesForTesting(); + impl.host_impl()->active_tree()->UpdateDrawProperties(false); + + LayerImpl* surface_raw = + impl.host_impl()->active_tree()->root_layer()->children()[0].get(); + RenderSurfaceImpl* render_surface_impl = surface_raw->render_surface(); + scoped_ptr<RenderPass> render_pass = RenderPass::Create(); + AppendQuadsData append_quads_data; + render_surface_impl->AppendQuads( + render_pass.get(), render_surface_impl->draw_transform(), Occlusion(), + SK_ColorBLACK, 1.f, surface_raw->mask_layer(), &append_quads_data, + RenderPassId(1, 1)); + + const RenderPassDrawQuad* quad = + RenderPassDrawQuad::MaterialCast(render_pass->quad_list.front()); + EXPECT_EQ(gfx::Vector2dF(1.f, 1.f), quad->mask_uv_scale); + EXPECT_EQ(gfx::Vector2dF(2.f, 2.f), quad->filters_scale); +} + } // namespace } // namespace cc |