| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/layers/picture_layer_impl.h" | 5 #include "cc/layers/picture_layer_impl.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <limits> | 8 #include <limits> |
| 9 #include <set> | 9 #include <set> |
| 10 #include <utility> | 10 #include <utility> |
| 11 | 11 |
| 12 #include "cc/layers/append_quads_data.h" | 12 #include "cc/layers/append_quads_data.h" |
| 13 #include "cc/layers/picture_layer.h" | 13 #include "cc/layers/picture_layer.h" |
| 14 #include "cc/quads/draw_quad.h" |
| 14 #include "cc/test/fake_content_layer_client.h" | 15 #include "cc/test/fake_content_layer_client.h" |
| 15 #include "cc/test/fake_impl_proxy.h" | 16 #include "cc/test/fake_impl_proxy.h" |
| 16 #include "cc/test/fake_layer_tree_host_impl.h" | 17 #include "cc/test/fake_layer_tree_host_impl.h" |
| 17 #include "cc/test/fake_output_surface.h" | 18 #include "cc/test/fake_output_surface.h" |
| 18 #include "cc/test/fake_picture_layer_impl.h" | 19 #include "cc/test/fake_picture_layer_impl.h" |
| 19 #include "cc/test/fake_picture_pile_impl.h" | 20 #include "cc/test/fake_picture_pile_impl.h" |
| 20 #include "cc/test/geometry_test_utils.h" | 21 #include "cc/test/geometry_test_utils.h" |
| 21 #include "cc/test/impl_side_painting_settings.h" | 22 #include "cc/test/impl_side_painting_settings.h" |
| 22 #include "cc/test/layer_test_common.h" | 23 #include "cc/test/layer_test_common.h" |
| 23 #include "cc/test/mock_quad_culler.h" | |
| 24 #include "cc/test/test_shared_bitmap_manager.h" | 24 #include "cc/test/test_shared_bitmap_manager.h" |
| 25 #include "cc/test/test_web_graphics_context_3d.h" | 25 #include "cc/test/test_web_graphics_context_3d.h" |
| 26 #include "cc/trees/layer_tree_impl.h" | 26 #include "cc/trees/layer_tree_impl.h" |
| 27 #include "testing/gtest/include/gtest/gtest.h" | 27 #include "testing/gtest/include/gtest/gtest.h" |
| 28 #include "ui/gfx/rect_conversions.h" | 28 #include "ui/gfx/rect_conversions.h" |
| 29 #include "ui/gfx/size_conversions.h" | 29 #include "ui/gfx/size_conversions.h" |
| 30 | 30 |
| 31 namespace cc { | 31 namespace cc { |
| 32 namespace { | 32 namespace { |
| 33 | 33 |
| (...skipping 1171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1205 | 1205 |
| 1206 // Verify the tiles are not larger than the context's max texture size. | 1206 // Verify the tiles are not larger than the context's max texture size. |
| 1207 Tile* tile = pending_layer_->tilings()->tiling_at(0)->AllTilesForTesting()[0]; | 1207 Tile* tile = pending_layer_->tilings()->tiling_at(0)->AllTilesForTesting()[0]; |
| 1208 EXPECT_GE(140, tile->content_rect().width()); | 1208 EXPECT_GE(140, tile->content_rect().width()); |
| 1209 EXPECT_GE(140, tile->content_rect().height()); | 1209 EXPECT_GE(140, tile->content_rect().height()); |
| 1210 } | 1210 } |
| 1211 | 1211 |
| 1212 TEST_F(PictureLayerImplTest, DisallowTileDrawQuads) { | 1212 TEST_F(PictureLayerImplTest, DisallowTileDrawQuads) { |
| 1213 MockOcclusionTracker<LayerImpl> occlusion_tracker; | 1213 MockOcclusionTracker<LayerImpl> occlusion_tracker; |
| 1214 scoped_ptr<RenderPass> render_pass = RenderPass::Create(); | 1214 scoped_ptr<RenderPass> render_pass = RenderPass::Create(); |
| 1215 MockQuadCuller quad_culler(render_pass.get(), &occlusion_tracker); | |
| 1216 | 1215 |
| 1217 gfx::Size tile_size(400, 400); | 1216 gfx::Size tile_size(400, 400); |
| 1218 gfx::Size layer_bounds(1300, 1900); | 1217 gfx::Size layer_bounds(1300, 1900); |
| 1219 | 1218 |
| 1220 scoped_refptr<FakePicturePileImpl> pending_pile = | 1219 scoped_refptr<FakePicturePileImpl> pending_pile = |
| 1221 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); | 1220 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); |
| 1222 scoped_refptr<FakePicturePileImpl> active_pile = | 1221 scoped_refptr<FakePicturePileImpl> active_pile = |
| 1223 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); | 1222 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); |
| 1224 | 1223 |
| 1225 SetupTrees(pending_pile, active_pile); | 1224 SetupTrees(pending_pile, active_pile); |
| 1226 | 1225 |
| 1227 active_layer_->draw_properties().visible_content_rect = | 1226 active_layer_->draw_properties().visible_content_rect = |
| 1228 gfx::Rect(layer_bounds); | 1227 gfx::Rect(layer_bounds); |
| 1229 | 1228 |
| 1230 gfx::Rect layer_invalidation(150, 200, 30, 180); | 1229 gfx::Rect layer_invalidation(150, 200, 30, 180); |
| 1231 Region invalidation(layer_invalidation); | 1230 Region invalidation(layer_invalidation); |
| 1232 AddDefaultTilingsWithInvalidation(invalidation); | 1231 AddDefaultTilingsWithInvalidation(invalidation); |
| 1233 | 1232 |
| 1234 AppendQuadsData data; | 1233 AppendQuadsData data; |
| 1235 active_layer_->WillDraw(DRAW_MODE_RESOURCELESS_SOFTWARE, NULL); | 1234 active_layer_->WillDraw(DRAW_MODE_RESOURCELESS_SOFTWARE, NULL); |
| 1236 active_layer_->AppendQuads(&quad_culler, &data); | 1235 active_layer_->AppendQuads(render_pass.get(), occlusion_tracker, &data); |
| 1237 active_layer_->DidDraw(NULL); | 1236 active_layer_->DidDraw(NULL); |
| 1238 | 1237 |
| 1239 ASSERT_EQ(1U, quad_culler.quad_list().size()); | 1238 ASSERT_EQ(1U, render_pass->quad_list.size()); |
| 1240 EXPECT_EQ(DrawQuad::PICTURE_CONTENT, quad_culler.quad_list()[0]->material); | 1239 EXPECT_EQ(DrawQuad::PICTURE_CONTENT, render_pass->quad_list[0]->material); |
| 1241 } | 1240 } |
| 1242 | 1241 |
| 1243 TEST_F(PictureLayerImplTest, MarkRequiredNullTiles) { | 1242 TEST_F(PictureLayerImplTest, MarkRequiredNullTiles) { |
| 1244 gfx::Size tile_size(100, 100); | 1243 gfx::Size tile_size(100, 100); |
| 1245 gfx::Size layer_bounds(1000, 1000); | 1244 gfx::Size layer_bounds(1000, 1000); |
| 1246 | 1245 |
| 1247 scoped_refptr<FakePicturePileImpl> pending_pile = | 1246 scoped_refptr<FakePicturePileImpl> pending_pile = |
| 1248 FakePicturePileImpl::CreateEmptyPile(tile_size, layer_bounds); | 1247 FakePicturePileImpl::CreateEmptyPile(tile_size, layer_bounds); |
| 1249 // Layers with entirely empty piles can't get tilings. | 1248 // Layers with entirely empty piles can't get tilings. |
| 1250 pending_pile->AddRecordingAt(0, 0); | 1249 pending_pile->AddRecordingAt(0, 0); |
| (...skipping 1461 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2712 2.7f, // device scale | 2711 2.7f, // device scale |
| 2713 3.2f, // page scale | 2712 3.2f, // page scale |
| 2714 1.f, // maximum animation scale | 2713 1.f, // maximum animation scale |
| 2715 false); | 2714 false); |
| 2716 EXPECT_EQ(1u, pending_layer_->tilings()->num_tilings()); | 2715 EXPECT_EQ(1u, pending_layer_->tilings()->num_tilings()); |
| 2717 } | 2716 } |
| 2718 | 2717 |
| 2719 TEST_F(PictureLayerImplTest, SharedQuadStateContainsMaxTilingScale) { | 2718 TEST_F(PictureLayerImplTest, SharedQuadStateContainsMaxTilingScale) { |
| 2720 MockOcclusionTracker<LayerImpl> occlusion_tracker; | 2719 MockOcclusionTracker<LayerImpl> occlusion_tracker; |
| 2721 scoped_ptr<RenderPass> render_pass = RenderPass::Create(); | 2720 scoped_ptr<RenderPass> render_pass = RenderPass::Create(); |
| 2722 MockQuadCuller quad_culler(render_pass.get(), &occlusion_tracker); | |
| 2723 | 2721 |
| 2724 gfx::Size tile_size(400, 400); | 2722 gfx::Size tile_size(400, 400); |
| 2725 gfx::Size layer_bounds(1000, 2000); | 2723 gfx::Size layer_bounds(1000, 2000); |
| 2726 | 2724 |
| 2727 scoped_refptr<FakePicturePileImpl> pending_pile = | 2725 scoped_refptr<FakePicturePileImpl> pending_pile = |
| 2728 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); | 2726 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); |
| 2729 scoped_refptr<FakePicturePileImpl> active_pile = | 2727 scoped_refptr<FakePicturePileImpl> active_pile = |
| 2730 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); | 2728 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); |
| 2731 | 2729 |
| 2732 SetupTrees(pending_pile, active_pile); | 2730 SetupTrees(pending_pile, active_pile); |
| 2733 | 2731 |
| 2734 SetupDrawPropertiesAndUpdateTiles(pending_layer_, 2.5f, 1.f, 1.f, 1.f, false); | 2732 SetupDrawPropertiesAndUpdateTiles(pending_layer_, 2.5f, 1.f, 1.f, 1.f, false); |
| 2735 host_impl_.pending_tree()->UpdateDrawProperties(); | 2733 host_impl_.pending_tree()->UpdateDrawProperties(); |
| 2736 | 2734 |
| 2737 active_layer_->draw_properties().visible_content_rect = | 2735 active_layer_->draw_properties().visible_content_rect = |
| 2738 gfx::Rect(layer_bounds); | 2736 gfx::Rect(layer_bounds); |
| 2739 host_impl_.active_tree()->UpdateDrawProperties(); | 2737 host_impl_.active_tree()->UpdateDrawProperties(); |
| 2740 | 2738 |
| 2741 float max_contents_scale = active_layer_->MaximumTilingContentsScale(); | 2739 float max_contents_scale = active_layer_->MaximumTilingContentsScale(); |
| 2742 gfx::Transform scaled_draw_transform = active_layer_->draw_transform(); | 2740 gfx::Transform scaled_draw_transform = active_layer_->draw_transform(); |
| 2743 scaled_draw_transform.Scale(SK_MScalar1 / max_contents_scale, | 2741 scaled_draw_transform.Scale(SK_MScalar1 / max_contents_scale, |
| 2744 SK_MScalar1 / max_contents_scale); | 2742 SK_MScalar1 / max_contents_scale); |
| 2745 | 2743 |
| 2746 AppendQuadsData data; | 2744 AppendQuadsData data; |
| 2747 active_layer_->AppendQuads(&quad_culler, &data); | 2745 active_layer_->AppendQuads(render_pass.get(), occlusion_tracker, &data); |
| 2748 | 2746 |
| 2749 // SharedQuadState should have be of size 1, as we are doing AppenQuad once. | 2747 // SharedQuadState should have be of size 1, as we are doing AppenQuad once. |
| 2750 EXPECT_EQ(1u, quad_culler.shared_quad_state_list().size()); | 2748 EXPECT_EQ(1u, render_pass->shared_quad_state_list.size()); |
| 2751 // The content_to_target_transform should be scaled by the | 2749 // The content_to_target_transform should be scaled by the |
| 2752 // MaximumTilingContentsScale on the layer. | 2750 // MaximumTilingContentsScale on the layer. |
| 2753 EXPECT_EQ(scaled_draw_transform.ToString(), | 2751 EXPECT_EQ(scaled_draw_transform.ToString(), |
| 2754 quad_culler.shared_quad_state_list()[0] | 2752 render_pass->shared_quad_state_list[0] |
| 2755 ->content_to_target_transform.ToString()); | 2753 ->content_to_target_transform.ToString()); |
| 2756 // The content_bounds should be scaled by the | 2754 // The content_bounds should be scaled by the |
| 2757 // MaximumTilingContentsScale on the layer. | 2755 // MaximumTilingContentsScale on the layer. |
| 2758 EXPECT_EQ(gfx::Size(2500u, 5000u).ToString(), | 2756 EXPECT_EQ(gfx::Size(2500u, 5000u).ToString(), |
| 2759 quad_culler.shared_quad_state_list()[0]->content_bounds.ToString()); | 2757 render_pass->shared_quad_state_list[0]->content_bounds.ToString()); |
| 2760 // The visible_content_rect should be scaled by the | 2758 // The visible_content_rect should be scaled by the |
| 2761 // MaximumTilingContentsScale on the layer. | 2759 // MaximumTilingContentsScale on the layer. |
| 2762 EXPECT_EQ( | 2760 EXPECT_EQ( |
| 2763 gfx::Rect(0u, 0u, 2500u, 5000u).ToString(), | 2761 gfx::Rect(0u, 0u, 2500u, 5000u).ToString(), |
| 2764 quad_culler.shared_quad_state_list()[0]->visible_content_rect.ToString()); | 2762 render_pass->shared_quad_state_list[0]->visible_content_rect.ToString()); |
| 2765 } | 2763 } |
| 2766 | 2764 |
| 2767 TEST_F(PictureLayerImplTest, UpdateTilesForMasksWithNoVisibleContent) { | 2765 TEST_F(PictureLayerImplTest, UpdateTilesForMasksWithNoVisibleContent) { |
| 2768 gfx::Size tile_size(400, 400); | 2766 gfx::Size tile_size(400, 400); |
| 2769 gfx::Size bounds(100000, 100); | 2767 gfx::Size bounds(100000, 100); |
| 2770 | 2768 |
| 2771 host_impl_.CreatePendingTree(); | 2769 host_impl_.CreatePendingTree(); |
| 2772 | 2770 |
| 2773 scoped_ptr<LayerImpl> root = LayerImpl::Create(host_impl_.pending_tree(), 1); | 2771 scoped_ptr<LayerImpl> root = LayerImpl::Create(host_impl_.pending_tree(), 1); |
| 2774 | 2772 |
| (...skipping 29 matching lines...) Expand all Loading... |
| 2804 | 2802 |
| 2805 host_impl_.pending_tree()->SetRootLayer(root.Pass()); | 2803 host_impl_.pending_tree()->SetRootLayer(root.Pass()); |
| 2806 | 2804 |
| 2807 EXPECT_FALSE(pending_mask_content->tilings()); | 2805 EXPECT_FALSE(pending_mask_content->tilings()); |
| 2808 host_impl_.pending_tree()->UpdateDrawProperties(); | 2806 host_impl_.pending_tree()->UpdateDrawProperties(); |
| 2809 EXPECT_NE(0u, pending_mask_content->num_tilings()); | 2807 EXPECT_NE(0u, pending_mask_content->num_tilings()); |
| 2810 } | 2808 } |
| 2811 | 2809 |
| 2812 } // namespace | 2810 } // namespace |
| 2813 } // namespace cc | 2811 } // namespace cc |
| OLD | NEW |