| 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 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 51 // visibility of the entire layer size. | 51 // visibility of the entire layer size. |
| 52 scoped_ptr<TiledLayerImpl> CreateLayer( | 52 scoped_ptr<TiledLayerImpl> CreateLayer( |
| 53 const gfx::Size& tile_size, | 53 const gfx::Size& tile_size, |
| 54 const gfx::Size& layer_size, | 54 const gfx::Size& layer_size, |
| 55 LayerTilingData::BorderTexelOption border_texels) { | 55 LayerTilingData::BorderTexelOption border_texels) { |
| 56 scoped_ptr<TiledLayerImpl> layer = | 56 scoped_ptr<TiledLayerImpl> layer = |
| 57 CreateLayerNoTiles(tile_size, layer_size, border_texels); | 57 CreateLayerNoTiles(tile_size, layer_size, border_texels); |
| 58 | 58 |
| 59 for (int i = 0; i < layer->TilingForTesting()->num_tiles_x(); ++i) { | 59 for (int i = 0; i < layer->TilingForTesting()->num_tiles_x(); ++i) { |
| 60 for (int j = 0; j < layer->TilingForTesting()->num_tiles_y(); ++j) { | 60 for (int j = 0; j < layer->TilingForTesting()->num_tiles_y(); ++j) { |
| 61 ResourceProvider::ResourceId resource_id = | 61 ResourceId resource_id = host_impl_.resource_provider()->CreateResource( |
| 62 host_impl_.resource_provider()->CreateResource( | 62 gfx::Size(1, 1), GL_CLAMP_TO_EDGE, |
| 63 gfx::Size(1, 1), GL_CLAMP_TO_EDGE, | 63 ResourceProvider::TEXTURE_HINT_IMMUTABLE, RGBA_8888); |
| 64 ResourceProvider::TEXTURE_HINT_IMMUTABLE, RGBA_8888); | |
| 65 layer->PushTileProperties(i, j, resource_id, false); | 64 layer->PushTileProperties(i, j, resource_id, false); |
| 66 } | 65 } |
| 67 } | 66 } |
| 68 | 67 |
| 69 return layer.Pass(); | 68 return layer.Pass(); |
| 70 } | 69 } |
| 71 | 70 |
| 72 void GetQuads(RenderPass* render_pass, | 71 void GetQuads(RenderPass* render_pass, |
| 73 const gfx::Size& tile_size, | 72 const gfx::Size& tile_size, |
| 74 const gfx::Size& layer_size, | 73 const gfx::Size& layer_size, |
| (...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 284 int num_tiles_x = 12; | 283 int num_tiles_x = 12; |
| 285 int num_tiles_y = 32; | 284 int num_tiles_y = 32; |
| 286 gfx::Size layer_size(tile_size.width() * num_tiles_x, | 285 gfx::Size layer_size(tile_size.width() * num_tiles_x, |
| 287 tile_size.height() * num_tiles_y); | 286 tile_size.height() * num_tiles_y); |
| 288 | 287 |
| 289 scoped_ptr<TiledLayerImpl> layer = CreateLayerNoTiles( | 288 scoped_ptr<TiledLayerImpl> layer = CreateLayerNoTiles( |
| 290 tile_size, layer_size, LayerTilingData::NO_BORDER_TEXELS); | 289 tile_size, layer_size, LayerTilingData::NO_BORDER_TEXELS); |
| 291 | 290 |
| 292 EXPECT_EQ(layer->GPUMemoryUsageInBytes(), 0u); | 291 EXPECT_EQ(layer->GPUMemoryUsageInBytes(), 0u); |
| 293 | 292 |
| 294 ResourceProvider::ResourceId resource_id = 1; | 293 ResourceId resource_id = 1; |
| 295 layer->PushTileProperties(0, 1, resource_id++, false); | 294 layer->PushTileProperties(0, 1, resource_id++, false); |
| 296 layer->PushTileProperties(2, 3, resource_id++, false); | 295 layer->PushTileProperties(2, 3, resource_id++, false); |
| 297 layer->PushTileProperties(2, 0, resource_id++, false); | 296 layer->PushTileProperties(2, 0, resource_id++, false); |
| 298 | 297 |
| 299 EXPECT_EQ( | 298 EXPECT_EQ( |
| 300 layer->GPUMemoryUsageInBytes(), | 299 layer->GPUMemoryUsageInBytes(), |
| 301 static_cast<size_t>(3 * 4 * tile_size.width() * tile_size.height())); | 300 static_cast<size_t>(3 * 4 * tile_size.width() * tile_size.height())); |
| 302 | 301 |
| 303 ResourceProvider::ResourceId empty_resource(0); | 302 ResourceId empty_resource(0); |
| 304 layer->PushTileProperties(0, 1, empty_resource, false); | 303 layer->PushTileProperties(0, 1, empty_resource, false); |
| 305 layer->PushTileProperties(2, 3, empty_resource, false); | 304 layer->PushTileProperties(2, 3, empty_resource, false); |
| 306 layer->PushTileProperties(2, 0, empty_resource, false); | 305 layer->PushTileProperties(2, 0, empty_resource, false); |
| 307 | 306 |
| 308 EXPECT_EQ(layer->GPUMemoryUsageInBytes(), 0u); | 307 EXPECT_EQ(layer->GPUMemoryUsageInBytes(), 0u); |
| 309 } | 308 } |
| 310 | 309 |
| 311 TEST_F(TiledLayerImplTest, EmptyMask) { | 310 TEST_F(TiledLayerImplTest, EmptyMask) { |
| 312 gfx::Size tile_size(20, 20); | 311 gfx::Size tile_size(20, 20); |
| 313 gfx::Size layer_size(0, 0); | 312 gfx::Size layer_size(0, 0); |
| 314 scoped_ptr<TiledLayerImpl> layer = | 313 scoped_ptr<TiledLayerImpl> layer = |
| 315 CreateLayer(tile_size, layer_size, LayerTilingData::NO_BORDER_TEXELS); | 314 CreateLayer(tile_size, layer_size, LayerTilingData::NO_BORDER_TEXELS); |
| 316 | 315 |
| 317 ResourceProvider::ResourceId mask_resource_id; | 316 ResourceId mask_resource_id; |
| 318 gfx::Size mask_texture_size; | 317 gfx::Size mask_texture_size; |
| 319 layer->GetContentsResourceId(&mask_resource_id, &mask_texture_size); | 318 layer->GetContentsResourceId(&mask_resource_id, &mask_texture_size); |
| 320 EXPECT_EQ(0u, mask_resource_id); | 319 EXPECT_EQ(0u, mask_resource_id); |
| 321 EXPECT_EQ(0, layer->TilingForTesting()->num_tiles_x()); | 320 EXPECT_EQ(0, layer->TilingForTesting()->num_tiles_x()); |
| 322 EXPECT_EQ(0, layer->TilingForTesting()->num_tiles_y()); | 321 EXPECT_EQ(0, layer->TilingForTesting()->num_tiles_y()); |
| 323 } | 322 } |
| 324 | 323 |
| 325 TEST_F(TiledLayerImplTest, Occlusion) { | 324 TEST_F(TiledLayerImplTest, Occlusion) { |
| 326 gfx::Size tile_size(100, 100); | 325 gfx::Size tile_size(100, 100); |
| 327 gfx::Size layer_bounds(1000, 1000); | 326 gfx::Size layer_bounds(1000, 1000); |
| 328 gfx::Size viewport_size(1000, 1000); | 327 gfx::Size viewport_size(1000, 1000); |
| 329 | 328 |
| 330 LayerTestCommon::LayerImplTest impl; | 329 LayerTestCommon::LayerImplTest impl; |
| 331 | 330 |
| 332 TiledLayerImpl* tiled_layer = impl.AddChildToRoot<TiledLayerImpl>(); | 331 TiledLayerImpl* tiled_layer = impl.AddChildToRoot<TiledLayerImpl>(); |
| 333 tiled_layer->SetBounds(layer_bounds); | 332 tiled_layer->SetBounds(layer_bounds); |
| 334 tiled_layer->SetContentBounds(layer_bounds); | 333 tiled_layer->SetContentBounds(layer_bounds); |
| 335 tiled_layer->SetDrawsContent(true); | 334 tiled_layer->SetDrawsContent(true); |
| 336 tiled_layer->set_skips_draw(false); | 335 tiled_layer->set_skips_draw(false); |
| 337 | 336 |
| 338 scoped_ptr<LayerTilingData> tiler = | 337 scoped_ptr<LayerTilingData> tiler = |
| 339 LayerTilingData::Create(tile_size, LayerTilingData::NO_BORDER_TEXELS); | 338 LayerTilingData::Create(tile_size, LayerTilingData::NO_BORDER_TEXELS); |
| 340 tiler->SetTilingSize(layer_bounds); | 339 tiler->SetTilingSize(layer_bounds); |
| 341 tiled_layer->SetTilingData(*tiler); | 340 tiled_layer->SetTilingData(*tiler); |
| 342 | 341 |
| 343 for (int i = 0; i < tiled_layer->TilingForTesting()->num_tiles_x(); ++i) { | 342 for (int i = 0; i < tiled_layer->TilingForTesting()->num_tiles_x(); ++i) { |
| 344 for (int j = 0; j < tiled_layer->TilingForTesting()->num_tiles_y(); ++j) { | 343 for (int j = 0; j < tiled_layer->TilingForTesting()->num_tiles_y(); ++j) { |
| 345 ResourceProvider::ResourceId resource_id = | 344 ResourceId resource_id = impl.resource_provider()->CreateResource( |
| 346 impl.resource_provider()->CreateResource( | 345 gfx::Size(1, 1), GL_CLAMP_TO_EDGE, |
| 347 gfx::Size(1, 1), GL_CLAMP_TO_EDGE, | 346 ResourceProvider::TEXTURE_HINT_IMMUTABLE, RGBA_8888); |
| 348 ResourceProvider::TEXTURE_HINT_IMMUTABLE, RGBA_8888); | |
| 349 tiled_layer->PushTileProperties(i, j, resource_id, false); | 347 tiled_layer->PushTileProperties(i, j, resource_id, false); |
| 350 } | 348 } |
| 351 } | 349 } |
| 352 | 350 |
| 353 impl.CalcDrawProps(viewport_size); | 351 impl.CalcDrawProps(viewport_size); |
| 354 | 352 |
| 355 { | 353 { |
| 356 SCOPED_TRACE("No occlusion"); | 354 SCOPED_TRACE("No occlusion"); |
| 357 gfx::Rect occluded; | 355 gfx::Rect occluded; |
| 358 impl.AppendQuadsWithOcclusion(tiled_layer, occluded); | 356 impl.AppendQuadsWithOcclusion(tiled_layer, occluded); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 380 LayerTestCommon::VerifyQuadsAreOccluded( | 378 LayerTestCommon::VerifyQuadsAreOccluded( |
| 381 impl.quad_list(), occluded, &partially_occluded_count); | 379 impl.quad_list(), occluded, &partially_occluded_count); |
| 382 // The layer outputs one quad, which is partially occluded. | 380 // The layer outputs one quad, which is partially occluded. |
| 383 EXPECT_EQ(100u - 10u, impl.quad_list().size()); | 381 EXPECT_EQ(100u - 10u, impl.quad_list().size()); |
| 384 EXPECT_EQ(10u + 10u, partially_occluded_count); | 382 EXPECT_EQ(10u + 10u, partially_occluded_count); |
| 385 } | 383 } |
| 386 } | 384 } |
| 387 | 385 |
| 388 } // namespace | 386 } // namespace |
| 389 } // namespace cc | 387 } // namespace cc |
| OLD | NEW |