| 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 <algorithm> | 7 #include <algorithm> |
| 8 #include <limits> | 8 #include <limits> |
| 9 #include <set> | 9 #include <set> |
| 10 #include <utility> | 10 #include <utility> |
| (...skipping 3234 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3245 | 3245 |
| 3246 TEST_F(PictureLayerImplTest, LowResReadyToDrawNotEnoughToActivate) { | 3246 TEST_F(PictureLayerImplTest, LowResReadyToDrawNotEnoughToActivate) { |
| 3247 gfx::Size tile_size(100, 100); | 3247 gfx::Size tile_size(100, 100); |
| 3248 gfx::Size layer_bounds(1000, 1000); | 3248 gfx::Size layer_bounds(1000, 1000); |
| 3249 | 3249 |
| 3250 // Make sure some tiles are not shared. | 3250 // Make sure some tiles are not shared. |
| 3251 gfx::Rect invalidation(gfx::Point(50, 50), tile_size); | 3251 gfx::Rect invalidation(gfx::Point(50, 50), tile_size); |
| 3252 SetupDefaultTreesWithFixedTileSize(layer_bounds, tile_size, invalidation); | 3252 SetupDefaultTreesWithFixedTileSize(layer_bounds, tile_size, invalidation); |
| 3253 | 3253 |
| 3254 // All pending layer tiles required are not ready. | 3254 // All pending layer tiles required are not ready. |
| 3255 EXPECT_FALSE(pending_layer_->AllTilesRequiredForActivationAreReadyToDraw()); | 3255 EXPECT_FALSE(host_impl_.tile_manager()->IsReadyToActivate()); |
| 3256 | 3256 |
| 3257 // Initialize all low-res tiles. | 3257 // Initialize all low-res tiles. |
| 3258 pending_layer_->SetAllTilesReadyInTiling(pending_layer_->LowResTiling()); | 3258 pending_layer_->SetAllTilesReadyInTiling(pending_layer_->LowResTiling()); |
| 3259 | 3259 |
| 3260 // Low-res tiles should not be enough. | 3260 // Low-res tiles should not be enough. |
| 3261 EXPECT_FALSE(pending_layer_->AllTilesRequiredForActivationAreReadyToDraw()); | 3261 EXPECT_FALSE(host_impl_.tile_manager()->IsReadyToActivate()); |
| 3262 | 3262 |
| 3263 // Initialize remaining tiles. | 3263 // Initialize remaining tiles. |
| 3264 pending_layer_->SetAllTilesReady(); | 3264 pending_layer_->SetAllTilesReady(); |
| 3265 | 3265 |
| 3266 EXPECT_TRUE(pending_layer_->AllTilesRequiredForActivationAreReadyToDraw()); | 3266 EXPECT_TRUE(host_impl_.tile_manager()->IsReadyToActivate()); |
| 3267 } | 3267 } |
| 3268 | 3268 |
| 3269 TEST_F(PictureLayerImplTest, HighResReadyToDrawEnoughToActivate) { | 3269 TEST_F(PictureLayerImplTest, HighResReadyToDrawEnoughToActivate) { |
| 3270 gfx::Size tile_size(100, 100); | 3270 gfx::Size tile_size(100, 100); |
| 3271 gfx::Size layer_bounds(1000, 1000); | 3271 gfx::Size layer_bounds(1000, 1000); |
| 3272 | 3272 |
| 3273 // Make sure some tiles are not shared. | 3273 // Make sure some tiles are not shared. |
| 3274 gfx::Rect invalidation(gfx::Point(50, 50), tile_size); | 3274 gfx::Rect invalidation(gfx::Point(50, 50), tile_size); |
| 3275 SetupDefaultTreesWithFixedTileSize(layer_bounds, tile_size, invalidation); | 3275 SetupDefaultTreesWithFixedTileSize(layer_bounds, tile_size, invalidation); |
| 3276 | 3276 |
| 3277 // All pending layer tiles required are not ready. | 3277 // All pending layer tiles required are not ready. |
| 3278 EXPECT_FALSE(pending_layer_->AllTilesRequiredForActivationAreReadyToDraw()); | 3278 EXPECT_FALSE(host_impl_.tile_manager()->IsReadyToActivate()); |
| 3279 | 3279 |
| 3280 // Initialize all high-res tiles. | 3280 // Initialize all high-res tiles. |
| 3281 pending_layer_->SetAllTilesReadyInTiling(pending_layer_->HighResTiling()); | 3281 pending_layer_->SetAllTilesReadyInTiling(pending_layer_->HighResTiling()); |
| 3282 | 3282 |
| 3283 // High-res tiles should be enough, since they cover everything visible. | 3283 // High-res tiles should be enough, since they cover everything visible. |
| 3284 EXPECT_TRUE(pending_layer_->AllTilesRequiredForActivationAreReadyToDraw()); | 3284 EXPECT_TRUE(host_impl_.tile_manager()->IsReadyToActivate()); |
| 3285 } | 3285 } |
| 3286 | 3286 |
| 3287 TEST_F(PictureLayerImplTest, | 3287 TEST_F(PictureLayerImplTest, |
| 3288 SharedActiveHighResReadyAndPendingLowResReadyNotEnoughToActivate) { | 3288 SharedActiveHighResReadyAndPendingLowResReadyNotEnoughToActivate) { |
| 3289 gfx::Size tile_size(100, 100); | 3289 gfx::Size tile_size(100, 100); |
| 3290 gfx::Size layer_bounds(1000, 1000); | 3290 gfx::Size layer_bounds(1000, 1000); |
| 3291 | 3291 |
| 3292 // Make sure some tiles are not shared. | 3292 // Make sure some tiles are not shared. |
| 3293 gfx::Rect invalidation(gfx::Point(50, 50), tile_size); | 3293 gfx::Rect invalidation(gfx::Point(50, 50), tile_size); |
| 3294 SetupDefaultTreesWithFixedTileSize(layer_bounds, tile_size, invalidation); | 3294 SetupDefaultTreesWithFixedTileSize(layer_bounds, tile_size, invalidation); |
| 3295 | 3295 |
| 3296 // Initialize all high-res tiles in the active layer. | 3296 // Initialize all high-res tiles in the active layer. |
| 3297 active_layer_->SetAllTilesReadyInTiling(active_layer_->HighResTiling()); | 3297 active_layer_->SetAllTilesReadyInTiling(active_layer_->HighResTiling()); |
| 3298 // And all the low-res tiles in the pending layer. | 3298 // And all the low-res tiles in the pending layer. |
| 3299 pending_layer_->SetAllTilesReadyInTiling(pending_layer_->LowResTiling()); | 3299 pending_layer_->SetAllTilesReadyInTiling(pending_layer_->LowResTiling()); |
| 3300 | 3300 |
| 3301 // The unshared high-res tiles are not ready, so we cannot activate. | 3301 // The unshared high-res tiles are not ready, so we cannot activate. |
| 3302 EXPECT_FALSE(pending_layer_->AllTilesRequiredForActivationAreReadyToDraw()); | 3302 EXPECT_FALSE(host_impl_.tile_manager()->IsReadyToActivate()); |
| 3303 | 3303 |
| 3304 // When the unshared pending high-res tiles are ready, we can activate. | 3304 // When the unshared pending high-res tiles are ready, we can activate. |
| 3305 pending_layer_->SetAllTilesReadyInTiling(pending_layer_->HighResTiling()); | 3305 pending_layer_->SetAllTilesReadyInTiling(pending_layer_->HighResTiling()); |
| 3306 EXPECT_TRUE(pending_layer_->AllTilesRequiredForActivationAreReadyToDraw()); | 3306 EXPECT_TRUE(host_impl_.tile_manager()->IsReadyToActivate()); |
| 3307 } | 3307 } |
| 3308 | 3308 |
| 3309 TEST_F(PictureLayerImplTest, SharedActiveHighResReadyNotEnoughToActivate) { | 3309 TEST_F(PictureLayerImplTest, SharedActiveHighResReadyNotEnoughToActivate) { |
| 3310 gfx::Size tile_size(100, 100); | 3310 gfx::Size tile_size(100, 100); |
| 3311 gfx::Size layer_bounds(1000, 1000); | 3311 gfx::Size layer_bounds(1000, 1000); |
| 3312 | 3312 |
| 3313 // Make sure some tiles are not shared. | 3313 // Make sure some tiles are not shared. |
| 3314 gfx::Rect invalidation(gfx::Point(50, 50), tile_size); | 3314 gfx::Rect invalidation(gfx::Point(50, 50), tile_size); |
| 3315 SetupDefaultTreesWithFixedTileSize(layer_bounds, tile_size, invalidation); | 3315 SetupDefaultTreesWithFixedTileSize(layer_bounds, tile_size, invalidation); |
| 3316 | 3316 |
| 3317 // Initialize all high-res tiles in the active layer. | 3317 // Initialize all high-res tiles in the active layer. |
| 3318 active_layer_->SetAllTilesReadyInTiling(active_layer_->HighResTiling()); | 3318 active_layer_->SetAllTilesReadyInTiling(active_layer_->HighResTiling()); |
| 3319 | 3319 |
| 3320 // The unshared high-res tiles are not ready, so we cannot activate. | 3320 // The unshared high-res tiles are not ready, so we cannot activate. |
| 3321 EXPECT_FALSE(pending_layer_->AllTilesRequiredForActivationAreReadyToDraw()); | 3321 EXPECT_FALSE(host_impl_.tile_manager()->IsReadyToActivate()); |
| 3322 | 3322 |
| 3323 // When the unshared pending high-res tiles are ready, we can activate. | 3323 // When the unshared pending high-res tiles are ready, we can activate. |
| 3324 pending_layer_->SetAllTilesReadyInTiling(pending_layer_->HighResTiling()); | 3324 pending_layer_->SetAllTilesReadyInTiling(pending_layer_->HighResTiling()); |
| 3325 EXPECT_TRUE(pending_layer_->AllTilesRequiredForActivationAreReadyToDraw()); | 3325 EXPECT_TRUE(host_impl_.tile_manager()->IsReadyToActivate()); |
| 3326 } | 3326 } |
| 3327 | 3327 |
| 3328 TEST_F(NoLowResPictureLayerImplTest, ManageTilingsCreatesTilings) { | 3328 TEST_F(NoLowResPictureLayerImplTest, ManageTilingsCreatesTilings) { |
| 3329 gfx::Size tile_size(400, 400); | 3329 gfx::Size tile_size(400, 400); |
| 3330 gfx::Size layer_bounds(1300, 1900); | 3330 gfx::Size layer_bounds(1300, 1900); |
| 3331 | 3331 |
| 3332 scoped_refptr<FakePicturePileImpl> pending_pile = | 3332 scoped_refptr<FakePicturePileImpl> pending_pile = |
| 3333 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); | 3333 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); |
| 3334 scoped_refptr<FakePicturePileImpl> active_pile = | 3334 scoped_refptr<FakePicturePileImpl> active_pile = |
| 3335 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); | 3335 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); |
| (...skipping 1386 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4722 | 4722 |
| 4723 host_impl_.SetRequiresHighResToDraw(); | 4723 host_impl_.SetRequiresHighResToDraw(); |
| 4724 | 4724 |
| 4725 // Update tiles. | 4725 // Update tiles. |
| 4726 pending_layer_->draw_properties().visible_content_rect = viewport; | 4726 pending_layer_->draw_properties().visible_content_rect = viewport; |
| 4727 pending_layer_->draw_properties().screen_space_transform = transform; | 4727 pending_layer_->draw_properties().screen_space_transform = transform; |
| 4728 SetupDrawPropertiesAndUpdateTiles(pending_layer_, 1.f, 1.f, 1.f, 1.f, false); | 4728 SetupDrawPropertiesAndUpdateTiles(pending_layer_, 1.f, 1.f, 1.f, 1.f, false); |
| 4729 pending_layer_->HighResTiling()->UpdateAllTilePrioritiesForTesting(); | 4729 pending_layer_->HighResTiling()->UpdateAllTilePrioritiesForTesting(); |
| 4730 | 4730 |
| 4731 // Ensure we can't activate. | 4731 // Ensure we can't activate. |
| 4732 EXPECT_FALSE(pending_layer_->AllTilesRequiredForActivationAreReadyToDraw()); | 4732 EXPECT_FALSE(host_impl_.tile_manager()->IsReadyToActivate()); |
| 4733 | 4733 |
| 4734 // Now in the same frame, move the viewport (this can happen during | 4734 // Now in the same frame, move the viewport (this can happen during |
| 4735 // animation). | 4735 // animation). |
| 4736 viewport = gfx::Rect(0, 2000, 100, 100); | 4736 viewport = gfx::Rect(0, 2000, 100, 100); |
| 4737 | 4737 |
| 4738 // Update tiles. | 4738 // Update tiles. |
| 4739 pending_layer_->draw_properties().visible_content_rect = viewport; | 4739 pending_layer_->draw_properties().visible_content_rect = viewport; |
| 4740 pending_layer_->draw_properties().screen_space_transform = transform; | 4740 pending_layer_->draw_properties().screen_space_transform = transform; |
| 4741 SetupDrawPropertiesAndUpdateTiles(pending_layer_, 1.f, 1.f, 1.f, 1.f, false); | 4741 SetupDrawPropertiesAndUpdateTiles(pending_layer_, 1.f, 1.f, 1.f, 1.f, false); |
| 4742 pending_layer_->HighResTiling()->UpdateAllTilePrioritiesForTesting(); | 4742 pending_layer_->HighResTiling()->UpdateAllTilePrioritiesForTesting(); |
| 4743 | 4743 |
| 4744 // Make sure all viewport tiles (viewport from the tiling) are ready to draw. | 4744 // Make sure all viewport tiles (viewport from the tiling) are ready to draw. |
| 4745 std::vector<Tile*> tiles; | 4745 std::vector<Tile*> tiles; |
| 4746 for (PictureLayerTiling::CoverageIterator iter( | 4746 for (PictureLayerTiling::CoverageIterator iter( |
| 4747 pending_layer_->HighResTiling(), | 4747 pending_layer_->HighResTiling(), |
| 4748 1.f, | 4748 1.f, |
| 4749 pending_layer_->HighResTiling()->GetCurrentVisibleRectForTesting()); | 4749 pending_layer_->HighResTiling()->GetCurrentVisibleRectForTesting()); |
| 4750 iter; | 4750 iter; |
| 4751 ++iter) { | 4751 ++iter) { |
| 4752 if (*iter) | 4752 if (*iter) |
| 4753 tiles.push_back(*iter); | 4753 tiles.push_back(*iter); |
| 4754 } | 4754 } |
| 4755 | 4755 |
| 4756 host_impl_.tile_manager()->InitializeTilesWithResourcesForTesting(tiles); | 4756 host_impl_.tile_manager()->InitializeTilesWithResourcesForTesting(tiles); |
| 4757 | 4757 |
| 4758 // Ensure we can activate. | 4758 // Ensure we can activate. |
| 4759 EXPECT_TRUE(pending_layer_->AllTilesRequiredForActivationAreReadyToDraw()); | 4759 EXPECT_TRUE(host_impl_.tile_manager()->IsReadyToActivate()); |
| 4760 } | 4760 } |
| 4761 | 4761 |
| 4762 TEST_F(PictureLayerImplTest, CloneMissingRecordings) { | 4762 TEST_F(PictureLayerImplTest, CloneMissingRecordings) { |
| 4763 gfx::Size tile_size(100, 100); | 4763 gfx::Size tile_size(100, 100); |
| 4764 gfx::Size layer_bounds(400, 400); | 4764 gfx::Size layer_bounds(400, 400); |
| 4765 | 4765 |
| 4766 scoped_refptr<FakePicturePileImpl> filled_pile = | 4766 scoped_refptr<FakePicturePileImpl> filled_pile = |
| 4767 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); | 4767 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); |
| 4768 scoped_refptr<FakePicturePileImpl> partial_pile = | 4768 scoped_refptr<FakePicturePileImpl> partial_pile = |
| 4769 FakePicturePileImpl::CreateEmptyPile(tile_size, layer_bounds); | 4769 FakePicturePileImpl::CreateEmptyPile(tile_size, layer_bounds); |
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4879 result = layer->CalculateTileSize(gfx::Size(447, 400)); | 4879 result = layer->CalculateTileSize(gfx::Size(447, 400)); |
| 4880 EXPECT_EQ(result.width(), 448); | 4880 EXPECT_EQ(result.width(), 448); |
| 4881 EXPECT_EQ(result.height(), 448); | 4881 EXPECT_EQ(result.height(), 448); |
| 4882 result = layer->CalculateTileSize(gfx::Size(500, 499)); | 4882 result = layer->CalculateTileSize(gfx::Size(500, 499)); |
| 4883 EXPECT_EQ(result.width(), 512); | 4883 EXPECT_EQ(result.width(), 512); |
| 4884 EXPECT_EQ(result.height(), 500 + 2); | 4884 EXPECT_EQ(result.height(), 500 + 2); |
| 4885 } | 4885 } |
| 4886 | 4886 |
| 4887 } // namespace | 4887 } // namespace |
| 4888 } // namespace cc | 4888 } // namespace cc |
| OLD | NEW |