| 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 <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <algorithm> | 9 #include <algorithm> |
| 10 #include <limits> | 10 #include <limits> |
| (...skipping 1212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1223 ActivateTree(); | 1223 ActivateTree(); |
| 1224 | 1224 |
| 1225 FakePictureLayerImpl* active_mask = static_cast<FakePictureLayerImpl*>( | 1225 FakePictureLayerImpl* active_mask = static_cast<FakePictureLayerImpl*>( |
| 1226 host_impl()->active_tree()->LayerById(pending_mask->id())); | 1226 host_impl()->active_tree()->LayerById(pending_mask->id())); |
| 1227 | 1227 |
| 1228 // Mask layers have a tiling with a single tile in it. | 1228 // Mask layers have a tiling with a single tile in it. |
| 1229 EXPECT_EQ(1u, active_mask->HighResTiling()->AllTilesForTesting().size()); | 1229 EXPECT_EQ(1u, active_mask->HighResTiling()->AllTilesForTesting().size()); |
| 1230 // The mask resource exists. | 1230 // The mask resource exists. |
| 1231 ResourceId mask_resource_id; | 1231 ResourceId mask_resource_id; |
| 1232 gfx::Size mask_texture_size; | 1232 gfx::Size mask_texture_size; |
| 1233 active_mask->GetContentsResourceId(&mask_resource_id, &mask_texture_size); | 1233 gfx::SizeF mask_uv_size; |
| 1234 active_mask->GetContentsResourceId(&mask_resource_id, &mask_texture_size, |
| 1235 &mask_uv_size); |
| 1234 EXPECT_NE(0u, mask_resource_id); | 1236 EXPECT_NE(0u, mask_resource_id); |
| 1235 EXPECT_EQ(active_mask->bounds(), mask_texture_size); | 1237 EXPECT_EQ(active_mask->bounds(), mask_texture_size); |
| 1238 EXPECT_EQ(gfx::SizeF(1.0f, 1.0f), mask_uv_size); |
| 1236 | 1239 |
| 1237 // Drop resources and recreate them, still the same. | 1240 // Drop resources and recreate them, still the same. |
| 1238 pending_mask->ReleaseTileResources(); | 1241 pending_mask->ReleaseTileResources(); |
| 1239 active_mask->ReleaseTileResources(); | 1242 active_mask->ReleaseTileResources(); |
| 1240 pending_mask->RecreateTileResources(); | 1243 pending_mask->RecreateTileResources(); |
| 1241 active_mask->RecreateTileResources(); | 1244 active_mask->RecreateTileResources(); |
| 1242 SetupDrawPropertiesAndUpdateTiles(active_mask, 1.f, 1.f, 1.f, 1.f, 0.f, | 1245 SetupDrawPropertiesAndUpdateTiles(active_mask, 1.f, 1.f, 1.f, 1.f, 0.f, |
| 1243 false); | 1246 false); |
| 1244 active_mask->HighResTiling()->CreateAllTilesForTesting(); | 1247 active_mask->HighResTiling()->CreateAllTilesForTesting(); |
| 1245 EXPECT_EQ(1u, active_mask->HighResTiling()->AllTilesForTesting().size()); | 1248 EXPECT_EQ(1u, active_mask->HighResTiling()->AllTilesForTesting().size()); |
| 1246 EXPECT_NE(0u, mask_resource_id); | |
| 1247 EXPECT_EQ(active_mask->bounds(), mask_texture_size); | |
| 1248 | 1249 |
| 1249 // Resize larger than the max texture size. | 1250 // Resize larger than the max texture size. |
| 1250 int max_texture_size = host_impl()->resource_provider()->max_texture_size(); | 1251 int max_texture_size = host_impl()->resource_provider()->max_texture_size(); |
| 1251 gfx::Size huge_bounds(max_texture_size + 1, 10); | 1252 gfx::Size huge_bounds(max_texture_size + 1, 10); |
| 1252 scoped_refptr<FakeRasterSource> huge_raster_source = | 1253 scoped_refptr<FakeRasterSource> huge_raster_source = |
| 1253 FakeRasterSource::CreateFilled(huge_bounds); | 1254 FakeRasterSource::CreateFilled(huge_bounds); |
| 1254 | 1255 |
| 1255 SetupPendingTree(huge_raster_source); | 1256 SetupPendingTree(huge_raster_source); |
| 1256 pending_mask->SetBounds(huge_bounds); | 1257 pending_mask->SetBounds(huge_bounds); |
| 1257 pending_mask->SetRasterSourceOnPending(huge_raster_source, Region()); | 1258 pending_mask->SetRasterSourceOnPending(huge_raster_source, Region()); |
| 1258 | 1259 |
| 1259 host_impl()->AdvanceToNextFrame(base::TimeDelta::FromMilliseconds(1)); | 1260 host_impl()->AdvanceToNextFrame(base::TimeDelta::FromMilliseconds(1)); |
| 1260 host_impl()->pending_tree()->UpdateDrawProperties(update_lcd_text); | 1261 host_impl()->pending_tree()->UpdateDrawProperties(update_lcd_text); |
| 1261 | 1262 |
| 1262 // The mask tiling gets scaled down. | 1263 // The mask tiling gets scaled down. |
| 1263 EXPECT_LT(pending_mask->HighResTiling()->contents_scale_key(), 1.f); | 1264 EXPECT_LT(pending_mask->HighResTiling()->contents_scale_key(), 1.f); |
| 1264 EXPECT_EQ(1u, pending_mask->num_tilings()); | 1265 EXPECT_EQ(1u, pending_mask->num_tilings()); |
| 1265 | 1266 |
| 1266 host_impl()->tile_manager()->InitializeTilesWithResourcesForTesting( | 1267 host_impl()->tile_manager()->InitializeTilesWithResourcesForTesting( |
| 1267 pending_mask->HighResTiling()->AllTilesForTesting()); | 1268 pending_mask->HighResTiling()->AllTilesForTesting()); |
| 1268 | 1269 |
| 1269 ActivateTree(); | 1270 ActivateTree(); |
| 1270 | 1271 |
| 1271 // Mask layers have a tiling with a single tile in it. | 1272 // Mask layers have a tiling with a single tile in it. |
| 1272 EXPECT_EQ(1u, active_mask->HighResTiling()->AllTilesForTesting().size()); | 1273 EXPECT_EQ(1u, active_mask->HighResTiling()->AllTilesForTesting().size()); |
| 1273 // The mask resource exists. | 1274 // The mask resource exists. |
| 1274 active_mask->GetContentsResourceId(&mask_resource_id, &mask_texture_size); | 1275 active_mask->GetContentsResourceId(&mask_resource_id, &mask_texture_size, |
| 1276 &mask_uv_size); |
| 1275 EXPECT_NE(0u, mask_resource_id); | 1277 EXPECT_NE(0u, mask_resource_id); |
| 1276 gfx::Size expected_size = active_mask->bounds(); | 1278 gfx::Size expected_size = active_mask->bounds(); |
| 1277 expected_size.SetToMin(gfx::Size(max_texture_size, max_texture_size)); | 1279 expected_size.SetToMin(gfx::Size(max_texture_size, max_texture_size)); |
| 1278 EXPECT_EQ(expected_size, mask_texture_size); | 1280 EXPECT_EQ(expected_size, mask_texture_size); |
| 1281 EXPECT_EQ(gfx::SizeF(1.0f, 1.0f), mask_uv_size); |
| 1279 | 1282 |
| 1280 // Drop resources and recreate them, still the same. | 1283 // Drop resources and recreate them, still the same. |
| 1281 pending_mask->ReleaseTileResources(); | 1284 pending_mask->ReleaseTileResources(); |
| 1282 active_mask->ReleaseTileResources(); | 1285 active_mask->ReleaseTileResources(); |
| 1283 pending_mask->RecreateTileResources(); | 1286 pending_mask->RecreateTileResources(); |
| 1284 active_mask->RecreateTileResources(); | 1287 active_mask->RecreateTileResources(); |
| 1285 SetupDrawPropertiesAndUpdateTiles(active_mask, 1.f, 1.f, 1.f, 1.f, 0.f, | 1288 SetupDrawPropertiesAndUpdateTiles(active_mask, 1.f, 1.f, 1.f, 1.f, 0.f, |
| 1286 false); | 1289 false); |
| 1287 active_mask->HighResTiling()->CreateAllTilesForTesting(); | 1290 active_mask->HighResTiling()->CreateAllTilesForTesting(); |
| 1288 EXPECT_EQ(1u, active_mask->HighResTiling()->AllTilesForTesting().size()); | 1291 EXPECT_EQ(1u, active_mask->HighResTiling()->AllTilesForTesting().size()); |
| 1289 EXPECT_NE(0u, mask_resource_id); | 1292 EXPECT_NE(0u, mask_resource_id); |
| 1290 EXPECT_EQ(expected_size, mask_texture_size); | 1293 EXPECT_EQ(expected_size, mask_texture_size); |
| 1291 | 1294 |
| 1292 // Do another activate, the same holds. | 1295 // Do another activate, the same holds. |
| 1293 SetupPendingTree(huge_raster_source); | 1296 SetupPendingTree(huge_raster_source); |
| 1294 ActivateTree(); | 1297 ActivateTree(); |
| 1295 EXPECT_EQ(1u, active_mask->HighResTiling()->AllTilesForTesting().size()); | 1298 EXPECT_EQ(1u, active_mask->HighResTiling()->AllTilesForTesting().size()); |
| 1296 active_layer()->GetContentsResourceId(&mask_resource_id, &mask_texture_size); | 1299 active_layer()->GetContentsResourceId(&mask_resource_id, &mask_texture_size, |
| 1300 &mask_uv_size); |
| 1297 EXPECT_EQ(expected_size, mask_texture_size); | 1301 EXPECT_EQ(expected_size, mask_texture_size); |
| 1298 EXPECT_EQ(0u, mask_resource_id); | 1302 EXPECT_EQ(0u, mask_resource_id); |
| 1303 EXPECT_EQ(gfx::SizeF(1.0f, 1.0f), mask_uv_size); |
| 1299 | 1304 |
| 1300 // Resize even larger, so that the scale would be smaller than the minimum | 1305 // Resize even larger, so that the scale would be smaller than the minimum |
| 1301 // contents scale. Then the layer should no longer have any tiling. | 1306 // contents scale. Then the layer should no longer have any tiling. |
| 1302 float min_contents_scale = host_impl()->settings().minimum_contents_scale; | 1307 float min_contents_scale = host_impl()->settings().minimum_contents_scale; |
| 1303 gfx::Size extra_huge_bounds(max_texture_size / min_contents_scale + 1, 10); | 1308 gfx::Size extra_huge_bounds(max_texture_size / min_contents_scale + 1, 10); |
| 1304 scoped_refptr<FakeRasterSource> extra_huge_raster_source = | 1309 scoped_refptr<FakeRasterSource> extra_huge_raster_source = |
| 1305 FakeRasterSource::CreateFilled(extra_huge_bounds); | 1310 FakeRasterSource::CreateFilled(extra_huge_bounds); |
| 1306 | 1311 |
| 1307 SetupPendingTree(extra_huge_raster_source); | 1312 SetupPendingTree(extra_huge_raster_source); |
| 1308 pending_mask->SetBounds(extra_huge_bounds); | 1313 pending_mask->SetBounds(extra_huge_bounds); |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1353 ActivateTree(); | 1358 ActivateTree(); |
| 1354 | 1359 |
| 1355 FakePictureLayerImpl* active_mask = static_cast<FakePictureLayerImpl*>( | 1360 FakePictureLayerImpl* active_mask = static_cast<FakePictureLayerImpl*>( |
| 1356 host_impl()->active_tree()->LayerById(pending_mask->id())); | 1361 host_impl()->active_tree()->LayerById(pending_mask->id())); |
| 1357 | 1362 |
| 1358 // Mask layers have a tiling with a single tile in it. | 1363 // Mask layers have a tiling with a single tile in it. |
| 1359 EXPECT_EQ(1u, active_mask->HighResTiling()->AllTilesForTesting().size()); | 1364 EXPECT_EQ(1u, active_mask->HighResTiling()->AllTilesForTesting().size()); |
| 1360 // The mask resource exists. | 1365 // The mask resource exists. |
| 1361 ResourceId mask_resource_id; | 1366 ResourceId mask_resource_id; |
| 1362 gfx::Size mask_texture_size; | 1367 gfx::Size mask_texture_size; |
| 1363 active_mask->GetContentsResourceId(&mask_resource_id, &mask_texture_size); | 1368 gfx::SizeF mask_uv_size; |
| 1369 active_mask->GetContentsResourceId(&mask_resource_id, &mask_texture_size, |
| 1370 &mask_uv_size); |
| 1364 EXPECT_NE(0u, mask_resource_id); | 1371 EXPECT_NE(0u, mask_resource_id); |
| 1365 gfx::Size expected_mask_texture_size = | 1372 gfx::Size expected_mask_texture_size = |
| 1366 gfx::ScaleToCeiledSize(active_mask->bounds(), 1.3f); | 1373 gfx::ScaleToCeiledSize(active_mask->bounds(), 1.3f); |
| 1367 EXPECT_EQ(mask_texture_size, expected_mask_texture_size); | 1374 EXPECT_EQ(mask_texture_size, expected_mask_texture_size); |
| 1375 EXPECT_EQ(gfx::SizeF(1.0f, 1.0f), mask_uv_size); |
| 1368 } | 1376 } |
| 1369 | 1377 |
| 1370 TEST_F(PictureLayerImplTest, ReleaseTileResources) { | 1378 TEST_F(PictureLayerImplTest, ReleaseTileResources) { |
| 1371 gfx::Size layer_bounds(1300, 1900); | 1379 gfx::Size layer_bounds(1300, 1900); |
| 1372 SetupDefaultTrees(layer_bounds); | 1380 SetupDefaultTrees(layer_bounds); |
| 1373 EXPECT_EQ(1u, pending_layer()->tilings()->num_tilings()); | 1381 EXPECT_EQ(1u, pending_layer()->tilings()->num_tilings()); |
| 1374 | 1382 |
| 1375 // All tilings should be removed when losing output surface. | 1383 // All tilings should be removed when losing output surface. |
| 1376 active_layer()->ReleaseTileResources(); | 1384 active_layer()->ReleaseTileResources(); |
| 1377 EXPECT_FALSE(active_layer()->tilings()); | 1385 EXPECT_FALSE(active_layer()->tilings()); |
| (...skipping 3617 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4995 EXPECT_FLOAT_EQ(expected_contents_scale, | 5003 EXPECT_FLOAT_EQ(expected_contents_scale, |
| 4996 pending_layer_ptr->picture_layer_tiling_set() | 5004 pending_layer_ptr->picture_layer_tiling_set() |
| 4997 ->FindTilingWithResolution(HIGH_RESOLUTION) | 5005 ->FindTilingWithResolution(HIGH_RESOLUTION) |
| 4998 ->contents_scale_key()) | 5006 ->contents_scale_key()) |
| 4999 << "ideal_contents_scale: " << ideal_contents_scale; | 5007 << "ideal_contents_scale: " << ideal_contents_scale; |
| 5000 } | 5008 } |
| 5001 } | 5009 } |
| 5002 | 5010 |
| 5003 } // namespace | 5011 } // namespace |
| 5004 } // namespace cc | 5012 } // namespace cc |
| OLD | NEW |