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

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

Issue 343463004: Move occlusion info to TilePriority. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 6 months 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 | Annotate | Revision Log
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 2791 matching lines...) Expand 10 before | Expand all | Expand 10 after
2802 2802
2803 // No occlusion. 2803 // No occlusion.
2804 int unoccluded_tile_count = 0; 2804 int unoccluded_tile_count = 0;
2805 for (PictureLayerImpl::LayerRasterTileIterator it = 2805 for (PictureLayerImpl::LayerRasterTileIterator it =
2806 PictureLayerImpl::LayerRasterTileIterator(pending_layer_, false); 2806 PictureLayerImpl::LayerRasterTileIterator(pending_layer_, false);
2807 it; 2807 it;
2808 ++it) { 2808 ++it) {
2809 Tile* tile = *it; 2809 Tile* tile = *it;
2810 2810
2811 // Occluded tiles should not be iterated over. 2811 // Occluded tiles should not be iterated over.
2812 EXPECT_FALSE(tile->is_occluded()); 2812 EXPECT_FALSE(tile->priority(PENDING_TREE).is_occluded);
2813 2813
2814 // Some tiles may not be visible (i.e. outside the viewport). The rest are 2814 // Some tiles may not be visible (i.e. outside the viewport). The rest are
2815 // visible and at least partially unoccluded, verified by the above expect. 2815 // visible and at least partially unoccluded, verified by the above expect.
2816 bool tile_is_visible = 2816 bool tile_is_visible =
2817 tile->content_rect().Intersects(pending_layer_->visible_content_rect()); 2817 tile->content_rect().Intersects(pending_layer_->visible_content_rect());
2818 if (tile_is_visible) 2818 if (tile_is_visible)
2819 unoccluded_tile_count++; 2819 unoccluded_tile_count++;
2820 } 2820 }
2821 EXPECT_EQ(unoccluded_tile_count, 25 + 4); 2821 EXPECT_EQ(unoccluded_tile_count, 25 + 4);
2822 2822
2823 // Partial occlusion. 2823 // Partial occlusion.
2824 pending_layer_->AddChild(LayerImpl::Create(host_impl_.pending_tree(), 1)); 2824 pending_layer_->AddChild(LayerImpl::Create(host_impl_.pending_tree(), 1));
2825 LayerImpl* layer1 = pending_layer_->children()[0]; 2825 LayerImpl* layer1 = pending_layer_->children()[0];
2826 layer1->SetBounds(layer_bounds); 2826 layer1->SetBounds(layer_bounds);
2827 layer1->SetContentBounds(layer_bounds); 2827 layer1->SetContentBounds(layer_bounds);
2828 layer1->SetDrawsContent(true); 2828 layer1->SetDrawsContent(true);
2829 layer1->SetContentsOpaque(true); 2829 layer1->SetContentsOpaque(true);
2830 layer1->SetPosition(occluding_layer_position); 2830 layer1->SetPosition(occluding_layer_position);
2831 2831
2832 host_impl_.pending_tree()->UpdateDrawProperties(); 2832 host_impl_.pending_tree()->UpdateDrawProperties();
2833 2833
2834 unoccluded_tile_count = 0; 2834 unoccluded_tile_count = 0;
2835 for (PictureLayerImpl::LayerRasterTileIterator it = 2835 for (PictureLayerImpl::LayerRasterTileIterator it =
2836 PictureLayerImpl::LayerRasterTileIterator(pending_layer_, false); 2836 PictureLayerImpl::LayerRasterTileIterator(pending_layer_, false);
2837 it; 2837 it;
2838 ++it) { 2838 ++it) {
2839 Tile* tile = *it; 2839 Tile* tile = *it;
2840 2840
2841 EXPECT_FALSE(tile->is_occluded()); 2841 EXPECT_FALSE(tile->priority(PENDING_TREE).is_occluded);
2842 2842
2843 bool tile_is_visible = 2843 bool tile_is_visible =
2844 tile->content_rect().Intersects(pending_layer_->visible_content_rect()); 2844 tile->content_rect().Intersects(pending_layer_->visible_content_rect());
2845 if (tile_is_visible) 2845 if (tile_is_visible)
2846 unoccluded_tile_count++; 2846 unoccluded_tile_count++;
2847 } 2847 }
2848 EXPECT_EQ(unoccluded_tile_count, 20 + 2); 2848 EXPECT_EQ(unoccluded_tile_count, 20 + 2);
2849 2849
2850 // Full occlusion. 2850 // Full occlusion.
2851 layer1->SetPosition(gfx::Point(0, 0)); 2851 layer1->SetPosition(gfx::Point(0, 0));
2852 2852
2853 host_impl_.pending_tree()->UpdateDrawProperties(); 2853 host_impl_.pending_tree()->UpdateDrawProperties();
2854 2854
2855 unoccluded_tile_count = 0; 2855 unoccluded_tile_count = 0;
2856 for (PictureLayerImpl::LayerRasterTileIterator it = 2856 for (PictureLayerImpl::LayerRasterTileIterator it =
2857 PictureLayerImpl::LayerRasterTileIterator(pending_layer_, false); 2857 PictureLayerImpl::LayerRasterTileIterator(pending_layer_, false);
2858 it; 2858 it;
2859 ++it) { 2859 ++it) {
2860 Tile* tile = *it; 2860 Tile* tile = *it;
2861 2861
2862 EXPECT_FALSE(tile->is_occluded()); 2862 EXPECT_FALSE(tile->priority(PENDING_TREE).is_occluded);
2863 2863
2864 bool tile_is_visible = 2864 bool tile_is_visible =
2865 tile->content_rect().Intersects(pending_layer_->visible_content_rect()); 2865 tile->content_rect().Intersects(pending_layer_->visible_content_rect());
2866 if (tile_is_visible) 2866 if (tile_is_visible)
2867 unoccluded_tile_count++; 2867 unoccluded_tile_count++;
2868 } 2868 }
2869 EXPECT_EQ(unoccluded_tile_count, 0); 2869 EXPECT_EQ(unoccluded_tile_count, 0);
2870 } 2870 }
2871 2871
2872 TEST_F(OcclusionTrackingPictureLayerImplTest, 2872 TEST_F(OcclusionTrackingPictureLayerImplTest,
(...skipping 23 matching lines...) Expand all
2896 tiling, 2896 tiling,
2897 pending_layer_->contents_scale_x(), 2897 pending_layer_->contents_scale_x(),
2898 gfx::Rect(layer_bounds)); 2898 gfx::Rect(layer_bounds));
2899 iter; 2899 iter;
2900 ++iter) { 2900 ++iter) {
2901 if (!*iter) 2901 if (!*iter)
2902 continue; 2902 continue;
2903 const Tile* tile = *iter; 2903 const Tile* tile = *iter;
2904 2904
2905 // Fully occluded tiles are not required for activation. 2905 // Fully occluded tiles are not required for activation.
2906 if (tile->is_occluded()) { 2906 if (tile->priority(PENDING_TREE).is_occluded) {
2907 EXPECT_FALSE(tile->required_for_activation()); 2907 EXPECT_FALSE(tile->required_for_activation());
2908 occluded_tile_count++; 2908 occluded_tile_count++;
2909 } 2909 }
2910 } 2910 }
2911 } 2911 }
2912 EXPECT_EQ(occluded_tile_count, 0); 2912 EXPECT_EQ(occluded_tile_count, 0);
2913 2913
2914 // Partial occlusion. 2914 // Partial occlusion.
2915 pending_layer_->AddChild(LayerImpl::Create(host_impl_.pending_tree(), 1)); 2915 pending_layer_->AddChild(LayerImpl::Create(host_impl_.pending_tree(), 1));
2916 LayerImpl* layer1 = pending_layer_->children()[0]; 2916 LayerImpl* layer1 = pending_layer_->children()[0];
(...skipping 12 matching lines...) Expand all
2929 for (PictureLayerTiling::CoverageIterator iter( 2929 for (PictureLayerTiling::CoverageIterator iter(
2930 tiling, 2930 tiling,
2931 pending_layer_->contents_scale_x(), 2931 pending_layer_->contents_scale_x(),
2932 gfx::Rect(layer_bounds)); 2932 gfx::Rect(layer_bounds));
2933 iter; 2933 iter;
2934 ++iter) { 2934 ++iter) {
2935 if (!*iter) 2935 if (!*iter)
2936 continue; 2936 continue;
2937 const Tile* tile = *iter; 2937 const Tile* tile = *iter;
2938 2938
2939 if (tile->is_occluded()) { 2939 if (tile->priority(PENDING_TREE).is_occluded) {
2940 EXPECT_FALSE(tile->required_for_activation()); 2940 EXPECT_FALSE(tile->required_for_activation());
2941 occluded_tile_count++; 2941 occluded_tile_count++;
2942 } 2942 }
2943 } 2943 }
2944 } 2944 }
2945 EXPECT_EQ(occluded_tile_count, 30 + 5 + 2); 2945 EXPECT_EQ(occluded_tile_count, 30 + 5 + 2);
2946 2946
2947 // Full occlusion. 2947 // Full occlusion.
2948 layer1->SetPosition(gfx::PointF(0, 0)); 2948 layer1->SetPosition(gfx::PointF(0, 0));
2949 2949
2950 host_impl_.pending_tree()->UpdateDrawProperties(); 2950 host_impl_.pending_tree()->UpdateDrawProperties();
2951 2951
2952 occluded_tile_count = 0; 2952 occluded_tile_count = 0;
2953 for (size_t i = 0; i < pending_layer_->num_tilings(); ++i) { 2953 for (size_t i = 0; i < pending_layer_->num_tilings(); ++i) {
2954 PictureLayerTiling* tiling = pending_layer_->tilings()->tiling_at(i); 2954 PictureLayerTiling* tiling = pending_layer_->tilings()->tiling_at(i);
2955 2955
2956 for (PictureLayerTiling::CoverageIterator iter( 2956 for (PictureLayerTiling::CoverageIterator iter(
2957 tiling, 2957 tiling,
2958 pending_layer_->contents_scale_x(), 2958 pending_layer_->contents_scale_x(),
2959 gfx::Rect(layer_bounds)); 2959 gfx::Rect(layer_bounds));
2960 iter; 2960 iter;
2961 ++iter) { 2961 ++iter) {
2962 if (!*iter) 2962 if (!*iter)
2963 continue; 2963 continue;
2964 const Tile* tile = *iter; 2964 const Tile* tile = *iter;
2965 2965
2966 if (tile->is_occluded()) { 2966 if (tile->priority(PENDING_TREE).is_occluded) {
2967 EXPECT_FALSE(tile->required_for_activation()); 2967 EXPECT_FALSE(tile->required_for_activation());
2968 occluded_tile_count++; 2968 occluded_tile_count++;
2969 } 2969 }
2970 } 2970 }
2971 } 2971 }
2972 EXPECT_EQ(occluded_tile_count, 100 + 25 + 4); 2972 EXPECT_EQ(occluded_tile_count, 100 + 25 + 4);
2973 } 2973 }
2974
2975 TEST_F(OcclusionTrackingPictureLayerImplTest, DifferentOcclusionOnTrees) {
2976 gfx::Size tile_size(102, 102);
2977 gfx::Size layer_bounds(1000, 1000);
2978 gfx::Size viewport_size(1000, 1000);
2979
2980 scoped_refptr<FakePicturePileImpl> pending_pile =
2981 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds);
2982 scoped_refptr<FakePicturePileImpl> active_pile =
2983 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds);
2984 SetupTrees(pending_pile, active_pile);
2985
2986 // Fully occlude the active layer.
2987 active_layer_->AddChild(LayerImpl::Create(host_impl_.active_tree(), 2));
2988 LayerImpl* layer1 = active_layer_->children()[0];
2989 layer1->SetBounds(layer_bounds);
2990 layer1->SetContentBounds(layer_bounds);
2991 layer1->SetDrawsContent(true);
2992 layer1->SetContentsOpaque(true);
2993
2994 host_impl_.SetViewportSize(viewport_size);
2995
2996 host_impl_.pending_tree()->UpdateDrawProperties();
2997 host_impl_.active_tree()->UpdateDrawProperties();
2998
2999 for (size_t i = 0; i < pending_layer_->num_tilings(); ++i) {
3000 PictureLayerTiling* tiling = pending_layer_->tilings()->tiling_at(i);
3001
3002 for (PictureLayerTiling::CoverageIterator iter(
3003 tiling,
3004 pending_layer_->contents_scale_x(),
3005 gfx::Rect(layer_bounds));
3006 iter;
3007 ++iter) {
3008 if (!*iter)
3009 continue;
3010 const Tile* tile = *iter;
danakj 2014/06/17 22:29:41 can you show with EXPECT checks that these Tile* a
jbedley 2014/06/18 23:00:39 Actually both loops were doing the same thing beca
3011
3012 EXPECT_FALSE(tile->priority(PENDING_TREE).is_occluded);
3013 EXPECT_TRUE(tile->priority(ACTIVE_TREE).is_occluded);
3014 }
3015 }
3016
3017 for (size_t i = 0; i < active_layer_->num_tilings(); ++i) {
3018 PictureLayerTiling* tiling = active_layer_->tilings()->tiling_at(i);
3019
3020 for (PictureLayerTiling::CoverageIterator iter(
3021 tiling,
3022 active_layer_->contents_scale_x(),
3023 gfx::Rect(layer_bounds));
3024 iter;
3025 ++iter) {
3026 if (!*iter)
3027 continue;
3028 const Tile* tile = *iter;
3029
3030 EXPECT_FALSE(tile->priority(PENDING_TREE).is_occluded);
3031 EXPECT_TRUE(tile->priority(ACTIVE_TREE).is_occluded);
3032 }
3033 }
3034 }
2974 } // namespace 3035 } // namespace
2975 } // namespace cc 3036 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698