Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3)

Side by Side Diff: cc/layers/picture_layer_impl_unittest.cc

Issue 741683003: cc: Move LayerEvictionTileIterator to a separate file and make it a queue (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 2867 matching lines...) Expand 10 before | Expand all | Expand 10 after
2878 non_ideal_tile_count += priority.resolution == NON_IDEAL_RESOLUTION; 2878 non_ideal_tile_count += priority.resolution == NON_IDEAL_RESOLUTION;
2879 low_res_tile_count += priority.resolution == LOW_RESOLUTION; 2879 low_res_tile_count += priority.resolution == LOW_RESOLUTION;
2880 high_res_tile_count += priority.resolution == HIGH_RESOLUTION; 2880 high_res_tile_count += priority.resolution == HIGH_RESOLUTION;
2881 } 2881 }
2882 2882
2883 EXPECT_EQ(0u, non_ideal_tile_count); 2883 EXPECT_EQ(0u, non_ideal_tile_count);
2884 EXPECT_EQ(1u, low_res_tile_count); 2884 EXPECT_EQ(1u, low_res_tile_count);
2885 EXPECT_EQ(0u, high_res_tile_count); 2885 EXPECT_EQ(0u, high_res_tile_count);
2886 } 2886 }
2887 2887
2888 TEST_F(PictureLayerImplTest, LayerEvictionTileIterator) { 2888 TEST_F(PictureLayerImplTest, TilingSetEvictionQueue) {
2889 gfx::Size tile_size(100, 100); 2889 gfx::Size tile_size(100, 100);
2890 gfx::Size layer_bounds(1000, 1000); 2890 gfx::Size layer_bounds(1000, 1000);
2891 2891
2892 scoped_refptr<FakePicturePileImpl> pending_pile = 2892 scoped_refptr<FakePicturePileImpl> pending_pile =
2893 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); 2893 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds);
2894 2894
2895 SetupPendingTree(pending_pile); 2895 SetupPendingTree(pending_pile);
2896 2896
2897 ASSERT_TRUE(pending_layer_->CanHaveTilings()); 2897 ASSERT_TRUE(pending_layer_->CanHaveTilings());
2898 2898
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
2939 mark_required = !mark_required; 2939 mark_required = !mark_required;
2940 } 2940 }
2941 } 2941 }
2942 2942
2943 // Sanity checks. 2943 // Sanity checks.
2944 EXPECT_EQ(91u, all_tiles.size()); 2944 EXPECT_EQ(91u, all_tiles.size());
2945 EXPECT_EQ(91u, all_tiles_set.size()); 2945 EXPECT_EQ(91u, all_tiles_set.size());
2946 EXPECT_GT(number_of_marked_tiles, 1u); 2946 EXPECT_GT(number_of_marked_tiles, 1u);
2947 EXPECT_GT(number_of_unmarked_tiles, 1u); 2947 EXPECT_GT(number_of_unmarked_tiles, 1u);
2948 2948
2949 // Empty iterator.
2950 PictureLayerImpl::LayerEvictionTileIterator it;
2951 EXPECT_FALSE(it);
2952
2953 // Tiles don't have resources yet. 2949 // Tiles don't have resources yet.
2954 it = PictureLayerImpl::LayerEvictionTileIterator( 2950 scoped_ptr<TilingSetEvictionQueue> queue =
2955 pending_layer_, SAME_PRIORITY_FOR_BOTH_TREES); 2951 pending_layer_->CreateEvictionQueue(SAME_PRIORITY_FOR_BOTH_TREES);
2956 EXPECT_FALSE(it); 2952 EXPECT_TRUE(queue->IsEmpty());
2957 2953
2958 host_impl_.tile_manager()->InitializeTilesWithResourcesForTesting(all_tiles); 2954 host_impl_.tile_manager()->InitializeTilesWithResourcesForTesting(all_tiles);
2959 2955
2960 std::set<Tile*> unique_tiles; 2956 std::set<Tile*> unique_tiles;
2961 float expected_scales[] = {2.0f, 0.3f, 0.7f, low_res_factor, 1.0f}; 2957 float expected_scales[] = {2.0f, 0.3f, 0.7f, low_res_factor, 1.0f};
2962 size_t scale_index = 0; 2958 size_t scale_index = 0;
2963 bool reached_visible = false; 2959 bool reached_visible = false;
2964 Tile* last_tile = nullptr; 2960 Tile* last_tile = nullptr;
2965 for (it = PictureLayerImpl::LayerEvictionTileIterator( 2961 queue = pending_layer_->CreateEvictionQueue(SAME_PRIORITY_FOR_BOTH_TREES);
2966 pending_layer_, SAME_PRIORITY_FOR_BOTH_TREES); 2962 while (!queue->IsEmpty()) {
2967 it; 2963 Tile* tile = queue->Top();
2968 ++it) {
2969 Tile* tile = *it;
2970 if (!last_tile) 2964 if (!last_tile)
2971 last_tile = tile; 2965 last_tile = tile;
2972 2966
2973 EXPECT_TRUE(tile); 2967 EXPECT_TRUE(tile);
2974 2968
2975 TilePriority priority = tile->priority(PENDING_TREE); 2969 TilePriority priority = tile->priority(PENDING_TREE);
2976 2970
2977 if (priority.priority_bin == TilePriority::NOW) { 2971 if (priority.priority_bin == TilePriority::NOW) {
2978 reached_visible = true; 2972 reached_visible = true;
2979 last_tile = tile; 2973 last_tile = tile;
(...skipping 17 matching lines...) Expand all
2997 last_tile->required_for_activation() && 2991 last_tile->required_for_activation() &&
2998 priority.priority_bin == 2992 priority.priority_bin ==
2999 last_tile->priority(PENDING_TREE).priority_bin && 2993 last_tile->priority(PENDING_TREE).priority_bin &&
3000 std::abs(tile->contents_scale() - last_tile->contents_scale()) < 2994 std::abs(tile->contents_scale() - last_tile->contents_scale()) <
3001 std::numeric_limits<float>::epsilon()) { 2995 std::numeric_limits<float>::epsilon()) {
3002 EXPECT_LE(priority.distance_to_visible, 2996 EXPECT_LE(priority.distance_to_visible,
3003 last_tile->priority(PENDING_TREE).distance_to_visible); 2997 last_tile->priority(PENDING_TREE).distance_to_visible);
3004 } 2998 }
3005 2999
3006 last_tile = tile; 3000 last_tile = tile;
3001 queue->Pop();
3007 } 3002 }
3008 3003
3009 EXPECT_TRUE(reached_visible); 3004 EXPECT_TRUE(reached_visible);
3010 EXPECT_EQ(65u, unique_tiles.size()); 3005 EXPECT_EQ(65u, unique_tiles.size());
3011 3006
3012 scale_index = 0; 3007 scale_index = 0;
3013 bool reached_required = false; 3008 bool reached_required = false;
3014 for (; it; ++it) { 3009 while (!queue->IsEmpty()) {
3015 Tile* tile = *it; 3010 Tile* tile = queue->Top();
3016 EXPECT_TRUE(tile); 3011 EXPECT_TRUE(tile);
3017 3012
3018 TilePriority priority = tile->priority(PENDING_TREE); 3013 TilePriority priority = tile->priority(PENDING_TREE);
3019 EXPECT_EQ(TilePriority::NOW, priority.priority_bin); 3014 EXPECT_EQ(TilePriority::NOW, priority.priority_bin);
3020 3015
3021 if (reached_required) { 3016 if (reached_required) {
3022 EXPECT_TRUE(tile->required_for_activation()); 3017 EXPECT_TRUE(tile->required_for_activation());
3023 } else if (tile->required_for_activation()) { 3018 } else if (tile->required_for_activation()) {
3024 reached_required = true; 3019 reached_required = true;
3025 scale_index = 0; 3020 scale_index = 0;
3026 } 3021 }
3027 3022
3028 while (std::abs(tile->contents_scale() - expected_scales[scale_index]) > 3023 while (std::abs(tile->contents_scale() - expected_scales[scale_index]) >
3029 std::numeric_limits<float>::epsilon()) { 3024 std::numeric_limits<float>::epsilon()) {
3030 ++scale_index; 3025 ++scale_index;
3031 ASSERT_LT(scale_index, arraysize(expected_scales)); 3026 ASSERT_LT(scale_index, arraysize(expected_scales));
3032 } 3027 }
3033 3028
3034 EXPECT_FLOAT_EQ(tile->contents_scale(), expected_scales[scale_index]); 3029 EXPECT_FLOAT_EQ(tile->contents_scale(), expected_scales[scale_index]);
3035 unique_tiles.insert(tile); 3030 unique_tiles.insert(tile);
3031 queue->Pop();
3036 } 3032 }
3037 3033
3038 EXPECT_TRUE(reached_required); 3034 EXPECT_TRUE(reached_required);
3039 EXPECT_EQ(all_tiles_set.size(), unique_tiles.size()); 3035 EXPECT_EQ(all_tiles_set.size(), unique_tiles.size());
3040 } 3036 }
3041 3037
3042 TEST_F(PictureLayerImplTest, Occlusion) { 3038 TEST_F(PictureLayerImplTest, Occlusion) {
3043 gfx::Size tile_size(102, 102); 3039 gfx::Size tile_size(102, 102);
3044 gfx::Size layer_bounds(1000, 1000); 3040 gfx::Size layer_bounds(1000, 1000);
3045 gfx::Size viewport_size(1000, 1000); 3041 gfx::Size viewport_size(1000, 1000);
(...skipping 770 matching lines...) Expand 10 before | Expand all | Expand 10 after
3816 3812
3817 void VerifyEvictionConsidersOcclusion( 3813 void VerifyEvictionConsidersOcclusion(
3818 PictureLayerImpl* layer, 3814 PictureLayerImpl* layer,
3819 size_t expected_occluded_tile_count[NUM_TREE_PRIORITIES]) { 3815 size_t expected_occluded_tile_count[NUM_TREE_PRIORITIES]) {
3820 for (int priority_count = 0; priority_count < NUM_TREE_PRIORITIES; 3816 for (int priority_count = 0; priority_count < NUM_TREE_PRIORITIES;
3821 ++priority_count) { 3817 ++priority_count) {
3822 TreePriority tree_priority = static_cast<TreePriority>(priority_count); 3818 TreePriority tree_priority = static_cast<TreePriority>(priority_count);
3823 size_t occluded_tile_count = 0u; 3819 size_t occluded_tile_count = 0u;
3824 Tile* last_tile = nullptr; 3820 Tile* last_tile = nullptr;
3825 3821
3826 for (PictureLayerImpl::LayerEvictionTileIterator it = 3822 scoped_ptr<TilingSetEvictionQueue> queue =
3827 PictureLayerImpl::LayerEvictionTileIterator(layer, 3823 layer->CreateEvictionQueue(tree_priority);
3828 tree_priority); 3824 while (!queue->IsEmpty()) {
3829 it; 3825 Tile* tile = queue->Top();
3830 ++it) {
3831 Tile* tile = *it;
3832 if (!last_tile) 3826 if (!last_tile)
3833 last_tile = tile; 3827 last_tile = tile;
3834 3828
3835 // The only way we will encounter an occluded tile after an unoccluded 3829 // The only way we will encounter an occluded tile after an unoccluded
3836 // tile is if the priorty bin decreased, the tile is required for 3830 // tile is if the priorty bin decreased, the tile is required for
3837 // activation, or the scale changed. 3831 // activation, or the scale changed.
3838 bool tile_is_occluded = 3832 bool tile_is_occluded =
3839 tile->is_occluded_for_tree_priority(tree_priority); 3833 tile->is_occluded_for_tree_priority(tree_priority);
3840 if (tile_is_occluded) { 3834 if (tile_is_occluded) {
3841 occluded_tile_count++; 3835 occluded_tile_count++;
3842 3836
3843 bool last_tile_is_occluded = 3837 bool last_tile_is_occluded =
3844 last_tile->is_occluded_for_tree_priority(tree_priority); 3838 last_tile->is_occluded_for_tree_priority(tree_priority);
3845 if (!last_tile_is_occluded) { 3839 if (!last_tile_is_occluded) {
3846 TilePriority::PriorityBin tile_priority_bin = 3840 TilePriority::PriorityBin tile_priority_bin =
3847 tile->priority_for_tree_priority(tree_priority).priority_bin; 3841 tile->priority_for_tree_priority(tree_priority).priority_bin;
3848 TilePriority::PriorityBin last_tile_priority_bin = 3842 TilePriority::PriorityBin last_tile_priority_bin =
3849 last_tile->priority_for_tree_priority(tree_priority) 3843 last_tile->priority_for_tree_priority(tree_priority)
3850 .priority_bin; 3844 .priority_bin;
3851 3845
3852 EXPECT_TRUE( 3846 EXPECT_TRUE(
3853 (tile_priority_bin < last_tile_priority_bin) || 3847 (tile_priority_bin < last_tile_priority_bin) ||
3854 tile->required_for_activation() || 3848 tile->required_for_activation() ||
3855 (tile->contents_scale() != last_tile->contents_scale())); 3849 (tile->contents_scale() != last_tile->contents_scale()));
3856 } 3850 }
3857 } 3851 }
3858 last_tile = tile; 3852 last_tile = tile;
3853 queue->Pop();
3859 } 3854 }
3860 EXPECT_EQ(expected_occluded_tile_count[priority_count], 3855 EXPECT_EQ(expected_occluded_tile_count[priority_count],
3861 occluded_tile_count); 3856 occluded_tile_count);
3862 } 3857 }
3863 } 3858 }
3864 }; 3859 };
3865 3860
3866 TEST_F(OcclusionTrackingPictureLayerImplTest, 3861 TEST_F(OcclusionTrackingPictureLayerImplTest,
3867 OccludedTilesSkippedDuringRasterization) { 3862 OccludedTilesSkippedDuringRasterization) {
3868 base::TimeTicks time_ticks; 3863 base::TimeTicks time_ticks;
(...skipping 853 matching lines...) Expand 10 before | Expand all | Expand 10 after
4722 result = layer->CalculateTileSize(gfx::Size(447, 400)); 4717 result = layer->CalculateTileSize(gfx::Size(447, 400));
4723 EXPECT_EQ(result.width(), 448); 4718 EXPECT_EQ(result.width(), 448);
4724 EXPECT_EQ(result.height(), 448); 4719 EXPECT_EQ(result.height(), 448);
4725 result = layer->CalculateTileSize(gfx::Size(500, 499)); 4720 result = layer->CalculateTileSize(gfx::Size(500, 499));
4726 EXPECT_EQ(result.width(), 512); 4721 EXPECT_EQ(result.width(), 512);
4727 EXPECT_EQ(result.height(), 500 + 2); 4722 EXPECT_EQ(result.height(), 500 + 2);
4728 } 4723 }
4729 4724
4730 } // namespace 4725 } // namespace
4731 } // namespace cc 4726 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698