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

Side by Side Diff: cc/trees/layer_tree_host_common_unittest.cc

Issue 2468113004: Revert of cc: Make visible rect computation aware of pixel-moving filters (Closed)
Patch Set: Created 4 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
« no previous file with comments | « cc/trees/draw_property_utils.cc ('k') | cc/trees/property_tree_builder.cc » ('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 2011 The Chromium Authors. All rights reserved. 1 // Copyright 2011 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/trees/layer_tree_host_common.h" 5 #include "cc/trees/layer_tree_host_common.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <memory> 10 #include <memory>
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
44 #include "cc/trees/clip_node.h" 44 #include "cc/trees/clip_node.h"
45 #include "cc/trees/draw_property_utils.h" 45 #include "cc/trees/draw_property_utils.h"
46 #include "cc/trees/effect_node.h" 46 #include "cc/trees/effect_node.h"
47 #include "cc/trees/layer_tree_impl.h" 47 #include "cc/trees/layer_tree_impl.h"
48 #include "cc/trees/property_tree_builder.h" 48 #include "cc/trees/property_tree_builder.h"
49 #include "cc/trees/scroll_node.h" 49 #include "cc/trees/scroll_node.h"
50 #include "cc/trees/single_thread_proxy.h" 50 #include "cc/trees/single_thread_proxy.h"
51 #include "cc/trees/task_runner_provider.h" 51 #include "cc/trees/task_runner_provider.h"
52 #include "cc/trees/transform_node.h" 52 #include "cc/trees/transform_node.h"
53 #include "testing/gtest/include/gtest/gtest.h" 53 #include "testing/gtest/include/gtest/gtest.h"
54 #include "third_party/skia/include/core/SkImageFilter.h"
55 #include "third_party/skia/include/effects/SkOffsetImageFilter.h" 54 #include "third_party/skia/include/effects/SkOffsetImageFilter.h"
56 #include "third_party/skia/include/effects/SkXfermodeImageFilter.h"
57 #include "ui/gfx/geometry/quad_f.h" 55 #include "ui/gfx/geometry/quad_f.h"
58 #include "ui/gfx/geometry/vector2d_conversions.h" 56 #include "ui/gfx/geometry/vector2d_conversions.h"
59 #include "ui/gfx/transform.h" 57 #include "ui/gfx/transform.h"
60 58
61 namespace cc { 59 namespace cc {
62 namespace { 60 namespace {
63 61
64 class VerifyTreeCalcsLayerTreeSettings : public LayerTreeSettings { 62 class VerifyTreeCalcsLayerTreeSettings : public LayerTreeSettings {
65 public: 63 public:
66 VerifyTreeCalcsLayerTreeSettings() { 64 VerifyTreeCalcsLayerTreeSettings() {
(...skipping 3031 matching lines...) Expand 10 before | Expand all | Expand 10 after
3098 child->SetMasksToBounds(true); 3096 child->SetMasksToBounds(true);
3099 grand_child->test_properties()->transform = grand_child_scale_matrix; 3097 grand_child->test_properties()->transform = grand_child_scale_matrix;
3100 grand_child->SetBounds(gfx::Size(100, 100)); 3098 grand_child->SetBounds(gfx::Size(100, 100));
3101 grand_child->SetDrawsContent(true); 3099 grand_child->SetDrawsContent(true);
3102 ExecuteCalculateDrawProperties(root); 3100 ExecuteCalculateDrawProperties(root);
3103 3101
3104 // The visible rect is expanded to integer coordinates. 3102 // The visible rect is expanded to integer coordinates.
3105 EXPECT_EQ(gfx::Rect(41, 41), grand_child->visible_layer_rect()); 3103 EXPECT_EQ(gfx::Rect(41, 41), grand_child->visible_layer_rect());
3106 } 3104 }
3107 3105
3108 TEST_F(LayerTreeHostCommonTest, VisibleRectWithClippingAndFilters) {
3109 LayerImpl* root = root_layer_for_testing();
3110 LayerImpl* clip = AddChild<LayerImpl>(root);
3111 LayerImpl* filter = AddChild<LayerImpl>(clip);
3112 LayerImpl* filter_child = AddChild<LayerImpl>(filter);
3113
3114 root->SetBounds(gfx::Size(100, 100));
3115 clip->SetBounds(gfx::Size(10, 10));
3116 filter->test_properties()->force_render_surface = true;
3117 filter_child->SetBounds(gfx::Size(2000, 2000));
3118 filter_child->SetPosition(gfx::PointF(-50, -50));
3119 filter_child->SetDrawsContent(true);
3120
3121 clip->SetMasksToBounds(true);
3122
3123 ExecuteCalculateDrawProperties(root);
3124 EXPECT_EQ(gfx::Rect(50, 50, 10, 10), filter_child->visible_layer_rect());
3125 EXPECT_EQ(gfx::Rect(10, 10), filter->render_surface()->content_rect());
3126
3127 FilterOperations blur_filter;
3128 blur_filter.Append(FilterOperation::CreateBlurFilter(4.0f));
3129 filter->test_properties()->filters = blur_filter;
3130 host_impl()->active_tree()->property_trees()->needs_rebuild = true;
3131
3132 ExecuteCalculateDrawProperties(root);
3133
3134 EXPECT_EQ(gfx::Rect(38, 38, 34, 34), filter_child->visible_layer_rect());
3135 EXPECT_EQ(gfx::Rect(-12, -12, 34, 34),
3136 filter->render_surface()->content_rect());
3137
3138 gfx::Transform vertical_flip;
3139 vertical_flip.Scale(1, -1);
3140 sk_sp<SkImageFilter> flip_filter = SkImageFilter::MakeMatrixFilter(
3141 vertical_flip.matrix(), kLow_SkFilterQuality, nullptr);
3142 FilterOperations reflection_filter;
3143 reflection_filter.Append(
3144 FilterOperation::CreateReferenceFilter(SkXfermodeImageFilter::Make(
3145 SkBlendMode::kSrcOver, std::move(flip_filter))));
3146 filter->test_properties()->filters = reflection_filter;
3147 host_impl()->active_tree()->property_trees()->needs_rebuild = true;
3148
3149 ExecuteCalculateDrawProperties(root);
3150
3151 EXPECT_EQ(gfx::Rect(50, 40, 10, 20), filter_child->visible_layer_rect());
3152 EXPECT_EQ(gfx::Rect(0, -10, 10, 20),
3153 filter->render_surface()->content_rect());
3154 }
3155
3156 TEST_F(LayerTreeHostCommonTest, VisibleRectWithScalingClippingAndFilters) {
3157 LayerImpl* root = root_layer_for_testing();
3158 LayerImpl* scale = AddChild<LayerImpl>(root);
3159 LayerImpl* clip = AddChild<LayerImpl>(scale);
3160 LayerImpl* filter = AddChild<LayerImpl>(clip);
3161 LayerImpl* filter_child = AddChild<LayerImpl>(filter);
3162
3163 root->SetBounds(gfx::Size(100, 100));
3164 clip->SetBounds(gfx::Size(10, 10));
3165 filter->test_properties()->force_render_surface = true;
3166 filter_child->SetBounds(gfx::Size(2000, 2000));
3167 filter_child->SetPosition(gfx::PointF(-50, -50));
3168 filter_child->SetDrawsContent(true);
3169
3170 clip->SetMasksToBounds(true);
3171
3172 gfx::Transform scale_transform;
3173 scale_transform.Scale(3, 3);
3174 scale->test_properties()->transform = scale_transform;
3175
3176 ExecuteCalculateDrawProperties(root);
3177 EXPECT_EQ(gfx::Rect(50, 50, 10, 10), filter_child->visible_layer_rect());
3178 EXPECT_EQ(gfx::Rect(30, 30), filter->render_surface()->content_rect());
3179
3180 FilterOperations blur_filter;
3181 blur_filter.Append(FilterOperation::CreateBlurFilter(4.0f));
3182 filter->test_properties()->filters = blur_filter;
3183 host_impl()->active_tree()->property_trees()->needs_rebuild = true;
3184
3185 ExecuteCalculateDrawProperties(root);
3186
3187 EXPECT_EQ(gfx::Rect(38, 38, 34, 34), filter_child->visible_layer_rect());
3188 EXPECT_EQ(gfx::Rect(-36, -36, 102, 102),
3189 filter->render_surface()->content_rect());
3190
3191 gfx::Transform vertical_flip;
3192 vertical_flip.Scale(1, -1);
3193 sk_sp<SkImageFilter> flip_filter = SkImageFilter::MakeMatrixFilter(
3194 vertical_flip.matrix(), kLow_SkFilterQuality, nullptr);
3195 FilterOperations reflection_filter;
3196 reflection_filter.Append(
3197 FilterOperation::CreateReferenceFilter(SkXfermodeImageFilter::Make(
3198 SkBlendMode::kSrcOver, std::move(flip_filter))));
3199 filter->test_properties()->filters = reflection_filter;
3200 host_impl()->active_tree()->property_trees()->needs_rebuild = true;
3201
3202 ExecuteCalculateDrawProperties(root);
3203
3204 EXPECT_EQ(gfx::Rect(50, 40, 10, 20), filter_child->visible_layer_rect());
3205 EXPECT_EQ(gfx::Rect(0, -30, 30, 60),
3206 filter->render_surface()->content_rect());
3207 }
3208
3209 TEST_F(LayerTreeHostCommonTest, ClipRectWithClipParentAndFilters) {
3210 LayerImpl* root = root_layer_for_testing();
3211 LayerImpl* clip = AddChild<LayerImpl>(root);
3212 LayerImpl* filter = AddChild<LayerImpl>(clip);
3213 LayerImpl* filter_child_1 = AddChild<LayerImpl>(filter);
3214 LayerImpl* filter_child_2 = AddChild<LayerImpl>(filter);
3215
3216 root->SetBounds(gfx::Size(100, 100));
3217 clip->SetBounds(gfx::Size(10, 10));
3218 filter->test_properties()->force_render_surface = true;
3219
3220 filter_child_1->SetBounds(gfx::Size(20, 20));
3221 filter_child_1->SetDrawsContent(true);
3222 filter_child_2->SetBounds(gfx::Size(20, 20));
3223 filter_child_2->SetDrawsContent(true);
3224
3225 root->SetMasksToBounds(true);
3226 clip->SetMasksToBounds(true);
3227
3228 root->test_properties()->clip_children =
3229 base::MakeUnique<std::set<LayerImpl*>>();
3230 root->test_properties()->clip_children->insert(filter_child_1);
3231 filter_child_1->test_properties()->clip_parent = root;
3232
3233 ExecuteCalculateDrawProperties(root);
3234 EXPECT_TRUE(filter_child_1->is_clipped());
3235 EXPECT_TRUE(filter_child_2->is_clipped());
3236 EXPECT_EQ(gfx::Rect(100, 100), filter_child_1->clip_rect());
3237 EXPECT_EQ(gfx::Rect(10, 10), filter_child_2->clip_rect());
3238
3239 FilterOperations blur_filter;
3240 blur_filter.Append(FilterOperation::CreateBlurFilter(4.0f));
3241 filter->test_properties()->filters = blur_filter;
3242 host_impl()->active_tree()->property_trees()->needs_rebuild = true;
3243
3244 ExecuteCalculateDrawProperties(root);
3245
3246 EXPECT_TRUE(filter_child_1->is_clipped());
3247 EXPECT_TRUE(filter_child_2->is_clipped());
3248 EXPECT_EQ(gfx::Rect(100, 100), filter_child_1->clip_rect());
3249 EXPECT_EQ(gfx::Rect(10, 10), filter_child_2->clip_rect());
3250 }
3251
3252 TEST_F(LayerTreeHostCommonTest, ClipRectWithClippedDescendantOfFilter) {
3253 LayerImpl* root = root_layer_for_testing();
3254 LayerImpl* filter = AddChild<LayerImpl>(root);
3255 LayerImpl* clip = AddChild<LayerImpl>(filter);
3256 LayerImpl* filter_grand_child = AddChild<LayerImpl>(clip);
3257
3258 root->SetBounds(gfx::Size(100, 100));
3259 filter->test_properties()->force_render_surface = true;
3260
3261 clip->SetBounds(gfx::Size(10, 10));
3262 clip->SetMasksToBounds(true);
3263
3264 filter_grand_child->SetBounds(gfx::Size(20, 20));
3265 filter_grand_child->SetDrawsContent(true);
3266
3267 ExecuteCalculateDrawProperties(root);
3268 EXPECT_TRUE(filter_grand_child->is_clipped());
3269 EXPECT_EQ(gfx::Rect(10, 10), filter_grand_child->clip_rect());
3270
3271 FilterOperations blur_filter;
3272 blur_filter.Append(FilterOperation::CreateBlurFilter(4.0f));
3273 filter->test_properties()->filters = blur_filter;
3274 host_impl()->active_tree()->property_trees()->needs_rebuild = true;
3275
3276 ExecuteCalculateDrawProperties(root);
3277
3278 EXPECT_TRUE(filter_grand_child->is_clipped());
3279 EXPECT_EQ(gfx::Rect(10, 10), filter_grand_child->clip_rect());
3280 }
3281
3282 TEST_F(LayerTreeHostCommonTest, 3106 TEST_F(LayerTreeHostCommonTest,
3283 DrawableAndVisibleContentRectsForLayersInUnclippedRenderSurface) { 3107 DrawableAndVisibleContentRectsForLayersInUnclippedRenderSurface) {
3284 LayerImpl* root = root_layer_for_testing(); 3108 LayerImpl* root = root_layer_for_testing();
3285 LayerImpl* render_surface = AddChildToRoot<LayerImpl>(); 3109 LayerImpl* render_surface = AddChildToRoot<LayerImpl>();
3286 LayerImpl* child1 = AddChild<LayerImpl>(render_surface); 3110 LayerImpl* child1 = AddChild<LayerImpl>(render_surface);
3287 LayerImpl* child2 = AddChild<LayerImpl>(render_surface); 3111 LayerImpl* child2 = AddChild<LayerImpl>(render_surface);
3288 LayerImpl* child3 = AddChild<LayerImpl>(render_surface); 3112 LayerImpl* child3 = AddChild<LayerImpl>(render_surface);
3289 3113
3290 root->SetBounds(gfx::Size(100, 100)); 3114 root->SetBounds(gfx::Size(100, 100));
3291 render_surface->SetBounds(gfx::Size(3, 4)); 3115 render_surface->SetBounds(gfx::Size(3, 4));
(...skipping 7336 matching lines...) Expand 10 before | Expand all | Expand 10 after
10628 EXPECT_EQ(scroll_child6.id, grand_child10->scroll_tree_index()); 10452 EXPECT_EQ(scroll_child6.id, grand_child10->scroll_tree_index());
10629 EXPECT_EQ(scroll_root1.id, parent3->scroll_tree_index()); 10453 EXPECT_EQ(scroll_root1.id, parent3->scroll_tree_index());
10630 EXPECT_EQ(scroll_child7.id, child8->scroll_tree_index()); 10454 EXPECT_EQ(scroll_child7.id, child8->scroll_tree_index());
10631 EXPECT_EQ(scroll_root1.id, parent4->scroll_tree_index()); 10455 EXPECT_EQ(scroll_root1.id, parent4->scroll_tree_index());
10632 EXPECT_EQ(scroll_root1.id, child9->scroll_tree_index()); 10456 EXPECT_EQ(scroll_root1.id, child9->scroll_tree_index());
10633 EXPECT_EQ(scroll_root1.id, grand_child12->scroll_tree_index()); 10457 EXPECT_EQ(scroll_root1.id, grand_child12->scroll_tree_index());
10634 } 10458 }
10635 10459
10636 } // namespace 10460 } // namespace
10637 } // namespace cc 10461 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/draw_property_utils.cc ('k') | cc/trees/property_tree_builder.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698