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 2885 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2896 non_ideal_tile_count += priority.resolution == NON_IDEAL_RESOLUTION; | 2896 non_ideal_tile_count += priority.resolution == NON_IDEAL_RESOLUTION; |
2897 low_res_tile_count += priority.resolution == LOW_RESOLUTION; | 2897 low_res_tile_count += priority.resolution == LOW_RESOLUTION; |
2898 high_res_tile_count += priority.resolution == HIGH_RESOLUTION; | 2898 high_res_tile_count += priority.resolution == HIGH_RESOLUTION; |
2899 } | 2899 } |
2900 | 2900 |
2901 EXPECT_EQ(0u, non_ideal_tile_count); | 2901 EXPECT_EQ(0u, non_ideal_tile_count); |
2902 EXPECT_EQ(1u, low_res_tile_count); | 2902 EXPECT_EQ(1u, low_res_tile_count); |
2903 EXPECT_EQ(0u, high_res_tile_count); | 2903 EXPECT_EQ(0u, high_res_tile_count); |
2904 } | 2904 } |
2905 | 2905 |
2906 TEST_F(PictureLayerImplTest, LayerEvictionTileIterator) { | 2906 TEST_F(PictureLayerImplTest, TilingSetEvictionQueue) { |
2907 gfx::Size tile_size(100, 100); | 2907 gfx::Size tile_size(100, 100); |
2908 gfx::Size layer_bounds(1000, 1000); | 2908 gfx::Size layer_bounds(1000, 1000); |
2909 | 2909 |
2910 scoped_refptr<FakePicturePileImpl> pending_pile = | 2910 scoped_refptr<FakePicturePileImpl> pending_pile = |
2911 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); | 2911 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); |
2912 | 2912 |
2913 SetupPendingTree(pending_pile); | 2913 SetupPendingTree(pending_pile); |
2914 | 2914 |
2915 ASSERT_TRUE(pending_layer_->CanHaveTilings()); | 2915 ASSERT_TRUE(pending_layer_->CanHaveTilings()); |
2916 | 2916 |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2957 mark_required = !mark_required; | 2957 mark_required = !mark_required; |
2958 } | 2958 } |
2959 } | 2959 } |
2960 | 2960 |
2961 // Sanity checks. | 2961 // Sanity checks. |
2962 EXPECT_EQ(91u, all_tiles.size()); | 2962 EXPECT_EQ(91u, all_tiles.size()); |
2963 EXPECT_EQ(91u, all_tiles_set.size()); | 2963 EXPECT_EQ(91u, all_tiles_set.size()); |
2964 EXPECT_GT(number_of_marked_tiles, 1u); | 2964 EXPECT_GT(number_of_marked_tiles, 1u); |
2965 EXPECT_GT(number_of_unmarked_tiles, 1u); | 2965 EXPECT_GT(number_of_unmarked_tiles, 1u); |
2966 | 2966 |
2967 // Empty iterator. | |
2968 PictureLayerImpl::LayerEvictionTileIterator it; | |
2969 EXPECT_FALSE(it); | |
2970 | |
2971 // Tiles don't have resources yet. | 2967 // Tiles don't have resources yet. |
2972 it = PictureLayerImpl::LayerEvictionTileIterator( | 2968 scoped_ptr<TilingSetEvictionQueue> queue = |
2973 pending_layer_, SAME_PRIORITY_FOR_BOTH_TREES); | 2969 pending_layer_->CreateEvictionQueue(SAME_PRIORITY_FOR_BOTH_TREES); |
2974 EXPECT_FALSE(it); | 2970 EXPECT_TRUE(queue->IsEmpty()); |
2975 | 2971 |
2976 host_impl_.tile_manager()->InitializeTilesWithResourcesForTesting(all_tiles); | 2972 host_impl_.tile_manager()->InitializeTilesWithResourcesForTesting(all_tiles); |
2977 | 2973 |
2978 std::set<Tile*> unique_tiles; | 2974 std::set<Tile*> unique_tiles; |
2979 float expected_scales[] = {2.0f, 0.3f, 0.7f, low_res_factor, 1.0f}; | 2975 float expected_scales[] = {2.0f, 0.3f, 0.7f, low_res_factor, 1.0f}; |
2980 size_t scale_index = 0; | 2976 size_t scale_index = 0; |
2981 bool reached_visible = false; | 2977 bool reached_visible = false; |
2982 Tile* last_tile = nullptr; | 2978 Tile* last_tile = nullptr; |
2983 for (it = PictureLayerImpl::LayerEvictionTileIterator( | 2979 queue = pending_layer_->CreateEvictionQueue(SAME_PRIORITY_FOR_BOTH_TREES); |
2984 pending_layer_, SAME_PRIORITY_FOR_BOTH_TREES); | 2980 while (!queue->IsEmpty()) { |
2985 it; | 2981 Tile* tile = queue->Top(); |
2986 ++it) { | |
2987 Tile* tile = *it; | |
2988 if (!last_tile) | 2982 if (!last_tile) |
2989 last_tile = tile; | 2983 last_tile = tile; |
2990 | 2984 |
2991 EXPECT_TRUE(tile); | 2985 EXPECT_TRUE(tile); |
2992 | 2986 |
2993 TilePriority priority = tile->priority(PENDING_TREE); | 2987 TilePriority priority = tile->priority(PENDING_TREE); |
2994 | 2988 |
2995 if (priority.priority_bin == TilePriority::NOW) { | 2989 if (priority.priority_bin == TilePriority::NOW) { |
2996 reached_visible = true; | 2990 reached_visible = true; |
2997 last_tile = tile; | 2991 last_tile = tile; |
(...skipping 17 matching lines...) Expand all Loading... |
3015 last_tile->required_for_activation() && | 3009 last_tile->required_for_activation() && |
3016 priority.priority_bin == | 3010 priority.priority_bin == |
3017 last_tile->priority(PENDING_TREE).priority_bin && | 3011 last_tile->priority(PENDING_TREE).priority_bin && |
3018 std::abs(tile->contents_scale() - last_tile->contents_scale()) < | 3012 std::abs(tile->contents_scale() - last_tile->contents_scale()) < |
3019 std::numeric_limits<float>::epsilon()) { | 3013 std::numeric_limits<float>::epsilon()) { |
3020 EXPECT_LE(priority.distance_to_visible, | 3014 EXPECT_LE(priority.distance_to_visible, |
3021 last_tile->priority(PENDING_TREE).distance_to_visible); | 3015 last_tile->priority(PENDING_TREE).distance_to_visible); |
3022 } | 3016 } |
3023 | 3017 |
3024 last_tile = tile; | 3018 last_tile = tile; |
| 3019 queue->Pop(); |
3025 } | 3020 } |
3026 | 3021 |
3027 EXPECT_TRUE(reached_visible); | 3022 EXPECT_TRUE(reached_visible); |
3028 EXPECT_EQ(65u, unique_tiles.size()); | 3023 EXPECT_EQ(65u, unique_tiles.size()); |
3029 | 3024 |
3030 scale_index = 0; | 3025 scale_index = 0; |
3031 bool reached_required = false; | 3026 bool reached_required = false; |
3032 for (; it; ++it) { | 3027 while (!queue->IsEmpty()) { |
3033 Tile* tile = *it; | 3028 Tile* tile = queue->Top(); |
3034 EXPECT_TRUE(tile); | 3029 EXPECT_TRUE(tile); |
3035 | 3030 |
3036 TilePriority priority = tile->priority(PENDING_TREE); | 3031 TilePriority priority = tile->priority(PENDING_TREE); |
3037 EXPECT_EQ(TilePriority::NOW, priority.priority_bin); | 3032 EXPECT_EQ(TilePriority::NOW, priority.priority_bin); |
3038 | 3033 |
3039 if (reached_required) { | 3034 if (reached_required) { |
3040 EXPECT_TRUE(tile->required_for_activation()); | 3035 EXPECT_TRUE(tile->required_for_activation()); |
3041 } else if (tile->required_for_activation()) { | 3036 } else if (tile->required_for_activation()) { |
3042 reached_required = true; | 3037 reached_required = true; |
3043 scale_index = 0; | 3038 scale_index = 0; |
3044 } | 3039 } |
3045 | 3040 |
3046 while (std::abs(tile->contents_scale() - expected_scales[scale_index]) > | 3041 while (std::abs(tile->contents_scale() - expected_scales[scale_index]) > |
3047 std::numeric_limits<float>::epsilon()) { | 3042 std::numeric_limits<float>::epsilon()) { |
3048 ++scale_index; | 3043 ++scale_index; |
3049 ASSERT_LT(scale_index, arraysize(expected_scales)); | 3044 ASSERT_LT(scale_index, arraysize(expected_scales)); |
3050 } | 3045 } |
3051 | 3046 |
3052 EXPECT_FLOAT_EQ(tile->contents_scale(), expected_scales[scale_index]); | 3047 EXPECT_FLOAT_EQ(tile->contents_scale(), expected_scales[scale_index]); |
3053 unique_tiles.insert(tile); | 3048 unique_tiles.insert(tile); |
| 3049 queue->Pop(); |
3054 } | 3050 } |
3055 | 3051 |
3056 EXPECT_TRUE(reached_required); | 3052 EXPECT_TRUE(reached_required); |
3057 EXPECT_EQ(all_tiles_set.size(), unique_tiles.size()); | 3053 EXPECT_EQ(all_tiles_set.size(), unique_tiles.size()); |
3058 } | 3054 } |
3059 | 3055 |
3060 TEST_F(PictureLayerImplTest, Occlusion) { | 3056 TEST_F(PictureLayerImplTest, Occlusion) { |
3061 gfx::Size tile_size(102, 102); | 3057 gfx::Size tile_size(102, 102); |
3062 gfx::Size layer_bounds(1000, 1000); | 3058 gfx::Size layer_bounds(1000, 1000); |
3063 gfx::Size viewport_size(1000, 1000); | 3059 gfx::Size viewport_size(1000, 1000); |
(...skipping 770 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3834 | 3830 |
3835 void VerifyEvictionConsidersOcclusion( | 3831 void VerifyEvictionConsidersOcclusion( |
3836 PictureLayerImpl* layer, | 3832 PictureLayerImpl* layer, |
3837 size_t expected_occluded_tile_count[NUM_TREE_PRIORITIES]) { | 3833 size_t expected_occluded_tile_count[NUM_TREE_PRIORITIES]) { |
3838 for (int priority_count = 0; priority_count < NUM_TREE_PRIORITIES; | 3834 for (int priority_count = 0; priority_count < NUM_TREE_PRIORITIES; |
3839 ++priority_count) { | 3835 ++priority_count) { |
3840 TreePriority tree_priority = static_cast<TreePriority>(priority_count); | 3836 TreePriority tree_priority = static_cast<TreePriority>(priority_count); |
3841 size_t occluded_tile_count = 0u; | 3837 size_t occluded_tile_count = 0u; |
3842 Tile* last_tile = nullptr; | 3838 Tile* last_tile = nullptr; |
3843 | 3839 |
3844 for (PictureLayerImpl::LayerEvictionTileIterator it = | 3840 scoped_ptr<TilingSetEvictionQueue> queue = |
3845 PictureLayerImpl::LayerEvictionTileIterator(layer, | 3841 layer->CreateEvictionQueue(tree_priority); |
3846 tree_priority); | 3842 while (!queue->IsEmpty()) { |
3847 it; | 3843 Tile* tile = queue->Top(); |
3848 ++it) { | |
3849 Tile* tile = *it; | |
3850 if (!last_tile) | 3844 if (!last_tile) |
3851 last_tile = tile; | 3845 last_tile = tile; |
3852 | 3846 |
3853 // The only way we will encounter an occluded tile after an unoccluded | 3847 // The only way we will encounter an occluded tile after an unoccluded |
3854 // tile is if the priorty bin decreased, the tile is required for | 3848 // tile is if the priorty bin decreased, the tile is required for |
3855 // activation, or the scale changed. | 3849 // activation, or the scale changed. |
3856 bool tile_is_occluded = | 3850 bool tile_is_occluded = |
3857 tile->is_occluded_for_tree_priority(tree_priority); | 3851 tile->is_occluded_for_tree_priority(tree_priority); |
3858 if (tile_is_occluded) { | 3852 if (tile_is_occluded) { |
3859 occluded_tile_count++; | 3853 occluded_tile_count++; |
3860 | 3854 |
3861 bool last_tile_is_occluded = | 3855 bool last_tile_is_occluded = |
3862 last_tile->is_occluded_for_tree_priority(tree_priority); | 3856 last_tile->is_occluded_for_tree_priority(tree_priority); |
3863 if (!last_tile_is_occluded) { | 3857 if (!last_tile_is_occluded) { |
3864 TilePriority::PriorityBin tile_priority_bin = | 3858 TilePriority::PriorityBin tile_priority_bin = |
3865 tile->priority_for_tree_priority(tree_priority).priority_bin; | 3859 tile->priority_for_tree_priority(tree_priority).priority_bin; |
3866 TilePriority::PriorityBin last_tile_priority_bin = | 3860 TilePriority::PriorityBin last_tile_priority_bin = |
3867 last_tile->priority_for_tree_priority(tree_priority) | 3861 last_tile->priority_for_tree_priority(tree_priority) |
3868 .priority_bin; | 3862 .priority_bin; |
3869 | 3863 |
3870 EXPECT_TRUE( | 3864 EXPECT_TRUE( |
3871 (tile_priority_bin < last_tile_priority_bin) || | 3865 (tile_priority_bin < last_tile_priority_bin) || |
3872 tile->required_for_activation() || | 3866 tile->required_for_activation() || |
3873 (tile->contents_scale() != last_tile->contents_scale())); | 3867 (tile->contents_scale() != last_tile->contents_scale())); |
3874 } | 3868 } |
3875 } | 3869 } |
3876 last_tile = tile; | 3870 last_tile = tile; |
| 3871 queue->Pop(); |
3877 } | 3872 } |
3878 EXPECT_EQ(expected_occluded_tile_count[priority_count], | 3873 EXPECT_EQ(expected_occluded_tile_count[priority_count], |
3879 occluded_tile_count); | 3874 occluded_tile_count); |
3880 } | 3875 } |
3881 } | 3876 } |
3882 }; | 3877 }; |
3883 | 3878 |
3884 TEST_F(OcclusionTrackingPictureLayerImplTest, | 3879 TEST_F(OcclusionTrackingPictureLayerImplTest, |
3885 OccludedTilesSkippedDuringRasterization) { | 3880 OccludedTilesSkippedDuringRasterization) { |
3886 base::TimeTicks time_ticks; | 3881 base::TimeTicks time_ticks; |
(...skipping 853 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4740 result = layer->CalculateTileSize(gfx::Size(447, 400)); | 4735 result = layer->CalculateTileSize(gfx::Size(447, 400)); |
4741 EXPECT_EQ(result.width(), 448); | 4736 EXPECT_EQ(result.width(), 448); |
4742 EXPECT_EQ(result.height(), 448); | 4737 EXPECT_EQ(result.height(), 448); |
4743 result = layer->CalculateTileSize(gfx::Size(500, 499)); | 4738 result = layer->CalculateTileSize(gfx::Size(500, 499)); |
4744 EXPECT_EQ(result.width(), 512); | 4739 EXPECT_EQ(result.width(), 512); |
4745 EXPECT_EQ(result.height(), 500 + 2); | 4740 EXPECT_EQ(result.height(), 500 + 2); |
4746 } | 4741 } |
4747 | 4742 |
4748 } // namespace | 4743 } // namespace |
4749 } // namespace cc | 4744 } // namespace cc |
OLD | NEW |