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 |