| 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 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 46 // visibility of the entire layer size. | 46 // visibility of the entire layer size. |
| 47 scoped_ptr<TiledLayerImpl> CreateLayer( | 47 scoped_ptr<TiledLayerImpl> CreateLayer( |
| 48 const gfx::Size& tile_size, | 48 const gfx::Size& tile_size, |
| 49 const gfx::Size& layer_size, | 49 const gfx::Size& layer_size, |
| 50 LayerTilingData::BorderTexelOption border_texels) { | 50 LayerTilingData::BorderTexelOption border_texels) { |
| 51 scoped_ptr<TiledLayerImpl> layer = | 51 scoped_ptr<TiledLayerImpl> layer = |
| 52 CreateLayerNoTiles(tile_size, layer_size, border_texels); | 52 CreateLayerNoTiles(tile_size, layer_size, border_texels); |
| 53 | 53 |
| 54 ResourceProvider::ResourceId resource_id = 1; | 54 ResourceProvider::ResourceId resource_id = 1; |
| 55 for (int i = 0; i < layer->TilingForTesting()->num_tiles_x(); ++i) { | 55 for (int i = 0; i < layer->TilingForTesting()->num_tiles_x(); ++i) { |
| 56 for (int j = 0; j < layer->TilingForTesting()->num_tiles_y(); ++j) { | 56 for (int j = 0; j < layer->TilingForTesting()->num_tiles_y(); ++j) |
| 57 gfx::Rect opaque_rect( | 57 layer->PushTileProperties(i, j, resource_id++, false); |
| 58 layer->TilingForTesting()->tile_bounds(i, j).origin(), | |
| 59 gfx::Size(1, 1)); | |
| 60 layer->PushTileProperties(i, j, resource_id++, opaque_rect, false); | |
| 61 } | |
| 62 } | 58 } |
| 63 | 59 |
| 64 return layer.Pass(); | 60 return layer.Pass(); |
| 65 } | 61 } |
| 66 | 62 |
| 67 void GetQuads(RenderPass* render_pass, | 63 void GetQuads(RenderPass* render_pass, |
| 68 const gfx::Size& tile_size, | 64 const gfx::Size& tile_size, |
| 69 const gfx::Size& layer_size, | 65 const gfx::Size& layer_size, |
| 70 LayerTilingData::BorderTexelOption border_texel_option, | 66 LayerTilingData::BorderTexelOption border_texel_option, |
| 71 const gfx::Rect& visible_content_rect) { | 67 const gfx::Rect& visible_content_rect) { |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 171 layer->AppendQuads(render_pass.get(), occlusion_tracker, &data); | 167 layer->AppendQuads(render_pass.get(), occlusion_tracker, &data); |
| 172 EXPECT_EQ(render_pass->quad_list.size(), 4u); | 168 EXPECT_EQ(render_pass->quad_list.size(), 4u); |
| 173 EXPECT_EQ(0u, data.num_missing_tiles); | 169 EXPECT_EQ(0u, data.num_missing_tiles); |
| 174 | 170 |
| 175 for (size_t i = 0; i < render_pass->quad_list.size(); ++i) | 171 for (size_t i = 0; i < render_pass->quad_list.size(); ++i) |
| 176 EXPECT_EQ(render_pass->quad_list[i]->material, DrawQuad::TILED_CONTENT); | 172 EXPECT_EQ(render_pass->quad_list[i]->material, DrawQuad::TILED_CONTENT); |
| 177 } | 173 } |
| 178 | 174 |
| 179 for (int i = 0; i < num_tiles_x; ++i) | 175 for (int i = 0; i < num_tiles_x; ++i) |
| 180 for (int j = 0; j < num_tiles_y; ++j) | 176 for (int j = 0; j < num_tiles_y; ++j) |
| 181 layer->PushTileProperties(i, j, 0, gfx::Rect(), false); | 177 layer->PushTileProperties(i, j, 0, false); |
| 182 | 178 |
| 183 // All checkerboarding | 179 // All checkerboarding |
| 184 { | 180 { |
| 185 MockOcclusionTracker<LayerImpl> occlusion_tracker; | 181 MockOcclusionTracker<LayerImpl> occlusion_tracker; |
| 186 scoped_ptr<RenderPass> render_pass = RenderPass::Create(); | 182 scoped_ptr<RenderPass> render_pass = RenderPass::Create(); |
| 187 | 183 |
| 188 AppendQuadsData data; | 184 AppendQuadsData data; |
| 189 layer->AppendQuads(render_pass.get(), occlusion_tracker, &data); | 185 layer->AppendQuads(render_pass.get(), occlusion_tracker, &data); |
| 190 EXPECT_LT(0u, data.num_missing_tiles); | 186 EXPECT_LT(0u, data.num_missing_tiles); |
| 191 EXPECT_EQ(render_pass->quad_list.size(), 4u); | 187 EXPECT_EQ(render_pass->quad_list.size(), 4u); |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 268 | 264 |
| 269 for (size_t i = 0; i < render_pass->quad_list.size(); ++i) { | 265 for (size_t i = 0; i < render_pass->quad_list.size(); ++i) { |
| 270 const TileDrawQuad* quad = | 266 const TileDrawQuad* quad = |
| 271 TileDrawQuad::MaterialCast(render_pass->quad_list[i]); | 267 TileDrawQuad::MaterialCast(render_pass->quad_list[i]); |
| 272 | 268 |
| 273 EXPECT_NE(0u, quad->resource_id) << LayerTestCommon::quad_string << i; | 269 EXPECT_NE(0u, quad->resource_id) << LayerTestCommon::quad_string << i; |
| 274 EXPECT_EQ(gfx::RectF(gfx::PointF(), tile_size), quad->tex_coord_rect) | 270 EXPECT_EQ(gfx::RectF(gfx::PointF(), tile_size), quad->tex_coord_rect) |
| 275 << LayerTestCommon::quad_string << i; | 271 << LayerTestCommon::quad_string << i; |
| 276 EXPECT_EQ(tile_size, quad->texture_size) << LayerTestCommon::quad_string | 272 EXPECT_EQ(tile_size, quad->texture_size) << LayerTestCommon::quad_string |
| 277 << i; | 273 << i; |
| 278 EXPECT_EQ(gfx::Size(1, 1).ToString(), quad->opaque_rect.size().ToString()) | |
| 279 << LayerTestCommon::quad_string << i; | |
| 280 } | 274 } |
| 281 } | 275 } |
| 282 | 276 |
| 283 TEST_F(TiledLayerImplTest, GPUMemoryUsage) { | 277 TEST_F(TiledLayerImplTest, GPUMemoryUsage) { |
| 284 gfx::Size tile_size(20, 30); | 278 gfx::Size tile_size(20, 30); |
| 285 int num_tiles_x = 12; | 279 int num_tiles_x = 12; |
| 286 int num_tiles_y = 32; | 280 int num_tiles_y = 32; |
| 287 gfx::Size layer_size(tile_size.width() * num_tiles_x, | 281 gfx::Size layer_size(tile_size.width() * num_tiles_x, |
| 288 tile_size.height() * num_tiles_y); | 282 tile_size.height() * num_tiles_y); |
| 289 | 283 |
| 290 scoped_ptr<TiledLayerImpl> layer = CreateLayerNoTiles( | 284 scoped_ptr<TiledLayerImpl> layer = CreateLayerNoTiles( |
| 291 tile_size, layer_size, LayerTilingData::NO_BORDER_TEXELS); | 285 tile_size, layer_size, LayerTilingData::NO_BORDER_TEXELS); |
| 292 | 286 |
| 293 EXPECT_EQ(layer->GPUMemoryUsageInBytes(), 0u); | 287 EXPECT_EQ(layer->GPUMemoryUsageInBytes(), 0u); |
| 294 | 288 |
| 295 ResourceProvider::ResourceId resource_id = 1; | 289 ResourceProvider::ResourceId resource_id = 1; |
| 296 layer->PushTileProperties(0, 1, resource_id++, gfx::Rect(0, 0, 1, 1), false); | 290 layer->PushTileProperties(0, 1, resource_id++, false); |
| 297 layer->PushTileProperties(2, 3, resource_id++, gfx::Rect(0, 0, 1, 1), false); | 291 layer->PushTileProperties(2, 3, resource_id++, false); |
| 298 layer->PushTileProperties(2, 0, resource_id++, gfx::Rect(0, 0, 1, 1), false); | 292 layer->PushTileProperties(2, 0, resource_id++, false); |
| 299 | 293 |
| 300 EXPECT_EQ( | 294 EXPECT_EQ( |
| 301 layer->GPUMemoryUsageInBytes(), | 295 layer->GPUMemoryUsageInBytes(), |
| 302 static_cast<size_t>(3 * 4 * tile_size.width() * tile_size.height())); | 296 static_cast<size_t>(3 * 4 * tile_size.width() * tile_size.height())); |
| 303 | 297 |
| 304 ResourceProvider::ResourceId empty_resource(0); | 298 ResourceProvider::ResourceId empty_resource(0); |
| 305 layer->PushTileProperties(0, 1, empty_resource, gfx::Rect(0, 0, 1, 1), false); | 299 layer->PushTileProperties(0, 1, empty_resource, false); |
| 306 layer->PushTileProperties(2, 3, empty_resource, gfx::Rect(0, 0, 1, 1), false); | 300 layer->PushTileProperties(2, 3, empty_resource, false); |
| 307 layer->PushTileProperties(2, 0, empty_resource, gfx::Rect(0, 0, 1, 1), false); | 301 layer->PushTileProperties(2, 0, empty_resource, false); |
| 308 | 302 |
| 309 EXPECT_EQ(layer->GPUMemoryUsageInBytes(), 0u); | 303 EXPECT_EQ(layer->GPUMemoryUsageInBytes(), 0u); |
| 310 } | 304 } |
| 311 | 305 |
| 312 TEST_F(TiledLayerImplTest, EmptyMask) { | 306 TEST_F(TiledLayerImplTest, EmptyMask) { |
| 313 gfx::Size tile_size(20, 20); | 307 gfx::Size tile_size(20, 20); |
| 314 gfx::Size layer_size(0, 0); | 308 gfx::Size layer_size(0, 0); |
| 315 scoped_ptr<TiledLayerImpl> layer = | 309 scoped_ptr<TiledLayerImpl> layer = |
| 316 CreateLayer(tile_size, layer_size, LayerTilingData::NO_BORDER_TEXELS); | 310 CreateLayer(tile_size, layer_size, LayerTilingData::NO_BORDER_TEXELS); |
| 317 | 311 |
| (...skipping 16 matching lines...) Expand all Loading... |
| 334 tiled_layer->set_skips_draw(false); | 328 tiled_layer->set_skips_draw(false); |
| 335 | 329 |
| 336 scoped_ptr<LayerTilingData> tiler = | 330 scoped_ptr<LayerTilingData> tiler = |
| 337 LayerTilingData::Create(tile_size, LayerTilingData::NO_BORDER_TEXELS); | 331 LayerTilingData::Create(tile_size, LayerTilingData::NO_BORDER_TEXELS); |
| 338 tiler->SetTilingSize(layer_bounds); | 332 tiler->SetTilingSize(layer_bounds); |
| 339 tiled_layer->SetTilingData(*tiler); | 333 tiled_layer->SetTilingData(*tiler); |
| 340 | 334 |
| 341 ResourceProvider::ResourceId resource_id = 1; | 335 ResourceProvider::ResourceId resource_id = 1; |
| 342 for (int i = 0; i < tiled_layer->TilingForTesting()->num_tiles_x(); ++i) { | 336 for (int i = 0; i < tiled_layer->TilingForTesting()->num_tiles_x(); ++i) { |
| 343 for (int j = 0; j < tiled_layer->TilingForTesting()->num_tiles_y(); ++j) | 337 for (int j = 0; j < tiled_layer->TilingForTesting()->num_tiles_y(); ++j) |
| 344 tiled_layer->PushTileProperties(i, j, resource_id++, gfx::Rect(), false); | 338 tiled_layer->PushTileProperties(i, j, resource_id++, false); |
| 345 } | 339 } |
| 346 | 340 |
| 347 impl.CalcDrawProps(viewport_size); | 341 impl.CalcDrawProps(viewport_size); |
| 348 | 342 |
| 349 { | 343 { |
| 350 SCOPED_TRACE("No occlusion"); | 344 SCOPED_TRACE("No occlusion"); |
| 351 gfx::Rect occluded; | 345 gfx::Rect occluded; |
| 352 impl.AppendQuadsWithOcclusion(tiled_layer, occluded); | 346 impl.AppendQuadsWithOcclusion(tiled_layer, occluded); |
| 353 | 347 |
| 354 LayerTestCommon::VerifyQuadsExactlyCoverRect(impl.quad_list(), | 348 LayerTestCommon::VerifyQuadsExactlyCoverRect(impl.quad_list(), |
| (...skipping 22 matching lines...) Expand all Loading... |
| 377 occluded, | 371 occluded, |
| 378 &partially_occluded_count); | 372 &partially_occluded_count); |
| 379 // The layer outputs one quad, which is partially occluded. | 373 // The layer outputs one quad, which is partially occluded. |
| 380 EXPECT_EQ(100u - 10u, impl.quad_list().size()); | 374 EXPECT_EQ(100u - 10u, impl.quad_list().size()); |
| 381 EXPECT_EQ(10u + 10u, partially_occluded_count); | 375 EXPECT_EQ(10u + 10u, partially_occluded_count); |
| 382 } | 376 } |
| 383 } | 377 } |
| 384 | 378 |
| 385 } // namespace | 379 } // namespace |
| 386 } // namespace cc | 380 } // namespace cc |
| OLD | NEW |