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

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: Rebase Created 6 years 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
« no previous file with comments | « cc/layers/picture_layer_impl_perftest.cc ('k') | cc/resources/eviction_tile_priority_queue.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 2885 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
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
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
OLDNEW
« no previous file with comments | « cc/layers/picture_layer_impl_perftest.cc ('k') | cc/resources/eviction_tile_priority_queue.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698