| OLD | NEW |
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 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/tiled_layer_impl.h" | 5 #include "cc/layers/tiled_layer_impl.h" |
| 6 | 6 |
| 7 #include "cc/layers/append_quads_data.h" | 7 #include "cc/layers/append_quads_data.h" |
| 8 #include "cc/quads/tile_draw_quad.h" | 8 #include "cc/quads/tile_draw_quad.h" |
| 9 #include "cc/resources/layer_tiling_data.h" | 9 #include "cc/resources/layer_tiling_data.h" |
| 10 #include "cc/test/fake_impl_proxy.h" | 10 #include "cc/test/fake_impl_proxy.h" |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 64 const gfx::Size& tile_size, | 64 const gfx::Size& tile_size, |
| 65 const gfx::Size& layer_size, | 65 const gfx::Size& layer_size, |
| 66 LayerTilingData::BorderTexelOption border_texel_option, | 66 LayerTilingData::BorderTexelOption border_texel_option, |
| 67 const gfx::Rect& visible_content_rect) { | 67 const gfx::Rect& visible_content_rect) { |
| 68 scoped_ptr<TiledLayerImpl> layer = | 68 scoped_ptr<TiledLayerImpl> layer = |
| 69 CreateLayer(tile_size, layer_size, border_texel_option); | 69 CreateLayer(tile_size, layer_size, border_texel_option); |
| 70 layer->draw_properties().visible_content_rect = visible_content_rect; | 70 layer->draw_properties().visible_content_rect = visible_content_rect; |
| 71 layer->SetBounds(layer_size); | 71 layer->SetBounds(layer_size); |
| 72 | 72 |
| 73 AppendQuadsData data; | 73 AppendQuadsData data; |
| 74 layer->AppendQuads(render_pass, Occlusion(), &data); | 74 layer->AppendQuads(render_pass, &data); |
| 75 } | 75 } |
| 76 | 76 |
| 77 protected: | 77 protected: |
| 78 FakeImplProxy proxy_; | 78 FakeImplProxy proxy_; |
| 79 TestSharedBitmapManager shared_bitmap_manager_; | 79 TestSharedBitmapManager shared_bitmap_manager_; |
| 80 FakeLayerTreeHostImpl host_impl_; | 80 FakeLayerTreeHostImpl host_impl_; |
| 81 }; | 81 }; |
| 82 | 82 |
| 83 TEST_F(TiledLayerImplTest, EmptyQuadList) { | 83 TEST_F(TiledLayerImplTest, EmptyQuadList) { |
| 84 gfx::Size tile_size(90, 90); | 84 gfx::Size tile_size(90, 90); |
| 85 int num_tiles_x = 8; | 85 int num_tiles_x = 8; |
| 86 int num_tiles_y = 4; | 86 int num_tiles_y = 4; |
| 87 gfx::Size layer_size(tile_size.width() * num_tiles_x, | 87 gfx::Size layer_size(tile_size.width() * num_tiles_x, |
| 88 tile_size.height() * num_tiles_y); | 88 tile_size.height() * num_tiles_y); |
| 89 | 89 |
| 90 // Verify default layer does creates quads | 90 // Verify default layer does creates quads |
| 91 { | 91 { |
| 92 scoped_ptr<TiledLayerImpl> layer = | 92 scoped_ptr<TiledLayerImpl> layer = |
| 93 CreateLayer(tile_size, layer_size, LayerTilingData::NO_BORDER_TEXELS); | 93 CreateLayer(tile_size, layer_size, LayerTilingData::NO_BORDER_TEXELS); |
| 94 scoped_ptr<RenderPass> render_pass = RenderPass::Create(); | 94 scoped_ptr<RenderPass> render_pass = RenderPass::Create(); |
| 95 | 95 |
| 96 AppendQuadsData data; | 96 AppendQuadsData data; |
| 97 EXPECT_TRUE(layer->WillDraw(DRAW_MODE_HARDWARE, nullptr)); | 97 EXPECT_TRUE(layer->WillDraw(DRAW_MODE_HARDWARE, nullptr)); |
| 98 layer->AppendQuads(render_pass.get(), Occlusion(), &data); | 98 layer->AppendQuads(render_pass.get(), &data); |
| 99 layer->DidDraw(nullptr); | 99 layer->DidDraw(nullptr); |
| 100 unsigned num_tiles = num_tiles_x * num_tiles_y; | 100 unsigned num_tiles = num_tiles_x * num_tiles_y; |
| 101 EXPECT_EQ(render_pass->quad_list.size(), num_tiles); | 101 EXPECT_EQ(render_pass->quad_list.size(), num_tiles); |
| 102 } | 102 } |
| 103 | 103 |
| 104 // Layer with empty visible layer rect produces no quads | 104 // Layer with empty visible layer rect produces no quads |
| 105 { | 105 { |
| 106 scoped_ptr<TiledLayerImpl> layer = | 106 scoped_ptr<TiledLayerImpl> layer = |
| 107 CreateLayer(tile_size, layer_size, LayerTilingData::NO_BORDER_TEXELS); | 107 CreateLayer(tile_size, layer_size, LayerTilingData::NO_BORDER_TEXELS); |
| 108 layer->draw_properties().visible_content_rect = gfx::Rect(); | 108 layer->draw_properties().visible_content_rect = gfx::Rect(); |
| 109 | 109 |
| 110 scoped_ptr<RenderPass> render_pass = RenderPass::Create(); | 110 scoped_ptr<RenderPass> render_pass = RenderPass::Create(); |
| 111 | 111 |
| 112 EXPECT_FALSE(layer->WillDraw(DRAW_MODE_HARDWARE, nullptr)); | 112 EXPECT_FALSE(layer->WillDraw(DRAW_MODE_HARDWARE, nullptr)); |
| 113 } | 113 } |
| 114 | 114 |
| 115 // Layer with non-intersecting visible layer rect produces no quads | 115 // Layer with non-intersecting visible layer rect produces no quads |
| 116 { | 116 { |
| 117 scoped_ptr<TiledLayerImpl> layer = | 117 scoped_ptr<TiledLayerImpl> layer = |
| 118 CreateLayer(tile_size, layer_size, LayerTilingData::NO_BORDER_TEXELS); | 118 CreateLayer(tile_size, layer_size, LayerTilingData::NO_BORDER_TEXELS); |
| 119 | 119 |
| 120 gfx::Rect outside_bounds(-100, -100, 50, 50); | 120 gfx::Rect outside_bounds(-100, -100, 50, 50); |
| 121 layer->draw_properties().visible_content_rect = outside_bounds; | 121 layer->draw_properties().visible_content_rect = outside_bounds; |
| 122 | 122 |
| 123 scoped_ptr<RenderPass> render_pass = RenderPass::Create(); | 123 scoped_ptr<RenderPass> render_pass = RenderPass::Create(); |
| 124 | 124 |
| 125 AppendQuadsData data; | 125 AppendQuadsData data; |
| 126 EXPECT_TRUE(layer->WillDraw(DRAW_MODE_HARDWARE, nullptr)); | 126 EXPECT_TRUE(layer->WillDraw(DRAW_MODE_HARDWARE, nullptr)); |
| 127 layer->AppendQuads(render_pass.get(), Occlusion(), &data); | 127 layer->AppendQuads(render_pass.get(), &data); |
| 128 layer->DidDraw(nullptr); | 128 layer->DidDraw(nullptr); |
| 129 EXPECT_EQ(render_pass->quad_list.size(), 0u); | 129 EXPECT_EQ(render_pass->quad_list.size(), 0u); |
| 130 } | 130 } |
| 131 | 131 |
| 132 // Layer with skips draw produces no quads | 132 // Layer with skips draw produces no quads |
| 133 { | 133 { |
| 134 scoped_ptr<TiledLayerImpl> layer = | 134 scoped_ptr<TiledLayerImpl> layer = |
| 135 CreateLayer(tile_size, layer_size, LayerTilingData::NO_BORDER_TEXELS); | 135 CreateLayer(tile_size, layer_size, LayerTilingData::NO_BORDER_TEXELS); |
| 136 layer->set_skips_draw(true); | 136 layer->set_skips_draw(true); |
| 137 | 137 |
| 138 scoped_ptr<RenderPass> render_pass = RenderPass::Create(); | 138 scoped_ptr<RenderPass> render_pass = RenderPass::Create(); |
| 139 | 139 |
| 140 AppendQuadsData data; | 140 AppendQuadsData data; |
| 141 layer->AppendQuads(render_pass.get(), Occlusion(), &data); | 141 layer->AppendQuads(render_pass.get(), &data); |
| 142 EXPECT_EQ(render_pass->quad_list.size(), 0u); | 142 EXPECT_EQ(render_pass->quad_list.size(), 0u); |
| 143 } | 143 } |
| 144 } | 144 } |
| 145 | 145 |
| 146 TEST_F(TiledLayerImplTest, Checkerboarding) { | 146 TEST_F(TiledLayerImplTest, Checkerboarding) { |
| 147 gfx::Size tile_size(10, 10); | 147 gfx::Size tile_size(10, 10); |
| 148 int num_tiles_x = 2; | 148 int num_tiles_x = 2; |
| 149 int num_tiles_y = 2; | 149 int num_tiles_y = 2; |
| 150 gfx::Size layer_size(tile_size.width() * num_tiles_x, | 150 gfx::Size layer_size(tile_size.width() * num_tiles_x, |
| 151 tile_size.height() * num_tiles_y); | 151 tile_size.height() * num_tiles_y); |
| 152 | 152 |
| 153 scoped_ptr<TiledLayerImpl> layer = | 153 scoped_ptr<TiledLayerImpl> layer = |
| 154 CreateLayer(tile_size, layer_size, LayerTilingData::NO_BORDER_TEXELS); | 154 CreateLayer(tile_size, layer_size, LayerTilingData::NO_BORDER_TEXELS); |
| 155 | 155 |
| 156 // No checkerboarding | 156 // No checkerboarding |
| 157 { | 157 { |
| 158 scoped_ptr<RenderPass> render_pass = RenderPass::Create(); | 158 scoped_ptr<RenderPass> render_pass = RenderPass::Create(); |
| 159 | 159 |
| 160 AppendQuadsData data; | 160 AppendQuadsData data; |
| 161 layer->AppendQuads(render_pass.get(), Occlusion(), &data); | 161 layer->AppendQuads(render_pass.get(), &data); |
| 162 EXPECT_EQ(render_pass->quad_list.size(), 4u); | 162 EXPECT_EQ(render_pass->quad_list.size(), 4u); |
| 163 EXPECT_EQ(0u, data.num_missing_tiles); | 163 EXPECT_EQ(0u, data.num_missing_tiles); |
| 164 | 164 |
| 165 for (const auto& quad : render_pass->quad_list) | 165 for (const auto& quad : render_pass->quad_list) |
| 166 EXPECT_EQ(quad->material, DrawQuad::TILED_CONTENT); | 166 EXPECT_EQ(quad->material, DrawQuad::TILED_CONTENT); |
| 167 } | 167 } |
| 168 | 168 |
| 169 for (int i = 0; i < num_tiles_x; ++i) | 169 for (int i = 0; i < num_tiles_x; ++i) |
| 170 for (int j = 0; j < num_tiles_y; ++j) | 170 for (int j = 0; j < num_tiles_y; ++j) |
| 171 layer->PushTileProperties(i, j, 0, false); | 171 layer->PushTileProperties(i, j, 0, false); |
| 172 | 172 |
| 173 // All checkerboarding | 173 // All checkerboarding |
| 174 { | 174 { |
| 175 scoped_ptr<RenderPass> render_pass = RenderPass::Create(); | 175 scoped_ptr<RenderPass> render_pass = RenderPass::Create(); |
| 176 | 176 |
| 177 AppendQuadsData data; | 177 AppendQuadsData data; |
| 178 layer->AppendQuads(render_pass.get(), Occlusion(), &data); | 178 layer->AppendQuads(render_pass.get(), &data); |
| 179 EXPECT_LT(0u, data.num_missing_tiles); | 179 EXPECT_LT(0u, data.num_missing_tiles); |
| 180 EXPECT_EQ(render_pass->quad_list.size(), 4u); | 180 EXPECT_EQ(render_pass->quad_list.size(), 4u); |
| 181 for (const auto& quad : render_pass->quad_list) | 181 for (const auto& quad : render_pass->quad_list) |
| 182 EXPECT_NE(quad->material, DrawQuad::TILED_CONTENT); | 182 EXPECT_NE(quad->material, DrawQuad::TILED_CONTENT); |
| 183 } | 183 } |
| 184 } | 184 } |
| 185 | 185 |
| 186 // Test with both border texels and without. | 186 // Test with both border texels and without. |
| 187 #define WITH_AND_WITHOUT_BORDER_TEST(text_fixture_name) \ | 187 #define WITH_AND_WITHOUT_BORDER_TEST(text_fixture_name) \ |
| 188 TEST_F(TiledLayerImplBorderTest, text_fixture_name##NoBorders) { \ | 188 TEST_F(TiledLayerImplBorderTest, text_fixture_name##NoBorders) { \ |
| (...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 366 LayerTestCommon::VerifyQuadsAreOccluded( | 366 LayerTestCommon::VerifyQuadsAreOccluded( |
| 367 impl.quad_list(), occluded, &partially_occluded_count); | 367 impl.quad_list(), occluded, &partially_occluded_count); |
| 368 // The layer outputs one quad, which is partially occluded. | 368 // The layer outputs one quad, which is partially occluded. |
| 369 EXPECT_EQ(100u - 10u, impl.quad_list().size()); | 369 EXPECT_EQ(100u - 10u, impl.quad_list().size()); |
| 370 EXPECT_EQ(10u + 10u, partially_occluded_count); | 370 EXPECT_EQ(10u + 10u, partially_occluded_count); |
| 371 } | 371 } |
| 372 } | 372 } |
| 373 | 373 |
| 374 } // namespace | 374 } // namespace |
| 375 } // namespace cc | 375 } // namespace cc |
| OLD | NEW |