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

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

Issue 2423483003: cc: Make visible rect computation aware of pixel-moving filters (Closed)
Patch Set: Rebaseline 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
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"
54 #include "third_party/skia/include/effects/SkOffsetImageFilter.h" 55 #include "third_party/skia/include/effects/SkOffsetImageFilter.h"
56 #include "third_party/skia/include/effects/SkXfermodeImageFilter.h"
55 #include "ui/gfx/geometry/quad_f.h" 57 #include "ui/gfx/geometry/quad_f.h"
56 #include "ui/gfx/geometry/vector2d_conversions.h" 58 #include "ui/gfx/geometry/vector2d_conversions.h"
57 #include "ui/gfx/transform.h" 59 #include "ui/gfx/transform.h"
58 60
59 namespace cc { 61 namespace cc {
60 namespace { 62 namespace {
61 63
62 class VerifyTreeCalcsLayerTreeSettings : public LayerTreeSettings { 64 class VerifyTreeCalcsLayerTreeSettings : public LayerTreeSettings {
63 public: 65 public:
64 VerifyTreeCalcsLayerTreeSettings() { 66 VerifyTreeCalcsLayerTreeSettings() {
(...skipping 3026 matching lines...) Expand 10 before | Expand all | Expand 10 after
3091 child->SetMasksToBounds(true); 3093 child->SetMasksToBounds(true);
3092 grand_child->test_properties()->transform = grand_child_scale_matrix; 3094 grand_child->test_properties()->transform = grand_child_scale_matrix;
3093 grand_child->SetBounds(gfx::Size(100, 100)); 3095 grand_child->SetBounds(gfx::Size(100, 100));
3094 grand_child->SetDrawsContent(true); 3096 grand_child->SetDrawsContent(true);
3095 ExecuteCalculateDrawProperties(root); 3097 ExecuteCalculateDrawProperties(root);
3096 3098
3097 // The visible rect is expanded to integer coordinates. 3099 // The visible rect is expanded to integer coordinates.
3098 EXPECT_EQ(gfx::Rect(41, 41), grand_child->visible_layer_rect()); 3100 EXPECT_EQ(gfx::Rect(41, 41), grand_child->visible_layer_rect());
3099 } 3101 }
3100 3102
3103 TEST_F(LayerTreeHostCommonTest, VisibleRectWithClippingAndFilters) {
3104 LayerImpl* root = root_layer_for_testing();
3105 LayerImpl* clip = AddChild<LayerImpl>(root);
3106 LayerImpl* filter = AddChild<LayerImpl>(clip);
3107 LayerImpl* filter_child = AddChild<LayerImpl>(filter);
3108
3109 root->SetBounds(gfx::Size(100, 100));
3110 clip->SetBounds(gfx::Size(10, 10));
3111 filter->test_properties()->force_render_surface = true;
3112 filter_child->SetBounds(gfx::Size(2000, 2000));
3113 filter_child->SetPosition(gfx::PointF(-50, -50));
3114 filter_child->SetDrawsContent(true);
3115
3116 clip->SetMasksToBounds(true);
3117
3118 ExecuteCalculateDrawProperties(root);
3119 EXPECT_EQ(gfx::Rect(50, 50, 10, 10), filter_child->visible_layer_rect());
3120 EXPECT_EQ(gfx::Rect(10, 10), filter->render_surface()->content_rect());
3121
3122 FilterOperations blur_filter;
3123 blur_filter.Append(FilterOperation::CreateBlurFilter(4.0f));
3124 filter->test_properties()->filters = blur_filter;
3125 host_impl()->active_tree()->property_trees()->needs_rebuild = true;
3126
3127 ExecuteCalculateDrawProperties(root);
3128
3129 EXPECT_EQ(gfx::Rect(38, 38, 34, 34), filter_child->visible_layer_rect());
3130 EXPECT_EQ(gfx::Rect(-12, -12, 34, 34),
3131 filter->render_surface()->content_rect());
3132
3133 gfx::Transform vertical_flip;
3134 vertical_flip.Scale(1, -1);
3135 sk_sp<SkImageFilter> flip_filter = SkImageFilter::MakeMatrixFilter(
3136 vertical_flip.matrix(), kLow_SkFilterQuality, nullptr);
3137 FilterOperations reflection_filter;
3138 reflection_filter.Append(
3139 FilterOperation::CreateReferenceFilter(SkXfermodeImageFilter::Make(
3140 SkBlendMode::kSrcOver, std::move(flip_filter))));
3141 filter->test_properties()->filters = reflection_filter;
3142 host_impl()->active_tree()->property_trees()->needs_rebuild = true;
3143
3144 ExecuteCalculateDrawProperties(root);
3145
3146 EXPECT_EQ(gfx::Rect(50, 40, 10, 20), filter_child->visible_layer_rect());
3147 EXPECT_EQ(gfx::Rect(0, -10, 10, 20),
3148 filter->render_surface()->content_rect());
3149 }
3150
3151 TEST_F(LayerTreeHostCommonTest, VisibleRectWithScalingClippingAndFilters) {
3152 LayerImpl* root = root_layer_for_testing();
3153 LayerImpl* scale = AddChild<LayerImpl>(root);
3154 LayerImpl* clip = AddChild<LayerImpl>(scale);
3155 LayerImpl* filter = AddChild<LayerImpl>(clip);
3156 LayerImpl* filter_child = AddChild<LayerImpl>(filter);
3157
3158 root->SetBounds(gfx::Size(100, 100));
3159 clip->SetBounds(gfx::Size(10, 10));
3160 filter->test_properties()->force_render_surface = true;
3161 filter_child->SetBounds(gfx::Size(2000, 2000));
3162 filter_child->SetPosition(gfx::PointF(-50, -50));
3163 filter_child->SetDrawsContent(true);
3164
3165 clip->SetMasksToBounds(true);
3166
3167 gfx::Transform scale_transform;
3168 scale_transform.Scale(3, 3);
3169 scale->test_properties()->transform = scale_transform;
3170
3171 ExecuteCalculateDrawProperties(root);
3172 EXPECT_EQ(gfx::Rect(50, 50, 10, 10), filter_child->visible_layer_rect());
3173 EXPECT_EQ(gfx::Rect(30, 30), filter->render_surface()->content_rect());
3174
3175 FilterOperations blur_filter;
3176 blur_filter.Append(FilterOperation::CreateBlurFilter(4.0f));
3177 filter->test_properties()->filters = blur_filter;
3178 host_impl()->active_tree()->property_trees()->needs_rebuild = true;
3179
3180 ExecuteCalculateDrawProperties(root);
3181
3182 EXPECT_EQ(gfx::Rect(38, 38, 34, 34), filter_child->visible_layer_rect());
3183 EXPECT_EQ(gfx::Rect(-36, -36, 102, 102),
3184 filter->render_surface()->content_rect());
3185
3186 gfx::Transform vertical_flip;
3187 vertical_flip.Scale(1, -1);
3188 sk_sp<SkImageFilter> flip_filter = SkImageFilter::MakeMatrixFilter(
3189 vertical_flip.matrix(), kLow_SkFilterQuality, nullptr);
3190 FilterOperations reflection_filter;
3191 reflection_filter.Append(
3192 FilterOperation::CreateReferenceFilter(SkXfermodeImageFilter::Make(
3193 SkBlendMode::kSrcOver, std::move(flip_filter))));
3194 filter->test_properties()->filters = reflection_filter;
3195 host_impl()->active_tree()->property_trees()->needs_rebuild = true;
3196
3197 ExecuteCalculateDrawProperties(root);
3198
3199 EXPECT_EQ(gfx::Rect(50, 40, 10, 20), filter_child->visible_layer_rect());
3200 EXPECT_EQ(gfx::Rect(0, -30, 30, 60),
3201 filter->render_surface()->content_rect());
3202 }
3203
3101 TEST_F(LayerTreeHostCommonTest, 3204 TEST_F(LayerTreeHostCommonTest,
3102 DrawableAndVisibleContentRectsForLayersInUnclippedRenderSurface) { 3205 DrawableAndVisibleContentRectsForLayersInUnclippedRenderSurface) {
3103 LayerImpl* root = root_layer_for_testing(); 3206 LayerImpl* root = root_layer_for_testing();
3104 LayerImpl* render_surface = AddChildToRoot<LayerImpl>(); 3207 LayerImpl* render_surface = AddChildToRoot<LayerImpl>();
3105 LayerImpl* child1 = AddChild<LayerImpl>(render_surface); 3208 LayerImpl* child1 = AddChild<LayerImpl>(render_surface);
3106 LayerImpl* child2 = AddChild<LayerImpl>(render_surface); 3209 LayerImpl* child2 = AddChild<LayerImpl>(render_surface);
3107 LayerImpl* child3 = AddChild<LayerImpl>(render_surface); 3210 LayerImpl* child3 = AddChild<LayerImpl>(render_surface);
3108 3211
3109 root->SetBounds(gfx::Size(100, 100)); 3212 root->SetBounds(gfx::Size(100, 100));
3110 render_surface->SetBounds(gfx::Size(3, 4)); 3213 render_surface->SetBounds(gfx::Size(3, 4));
(...skipping 7228 matching lines...) Expand 10 before | Expand all | Expand 10 after
10339 EXPECT_EQ(scroll_child6.id, grand_child10->scroll_tree_index()); 10442 EXPECT_EQ(scroll_child6.id, grand_child10->scroll_tree_index());
10340 EXPECT_EQ(scroll_root1.id, parent3->scroll_tree_index()); 10443 EXPECT_EQ(scroll_root1.id, parent3->scroll_tree_index());
10341 EXPECT_EQ(scroll_child7.id, child8->scroll_tree_index()); 10444 EXPECT_EQ(scroll_child7.id, child8->scroll_tree_index());
10342 EXPECT_EQ(scroll_root1.id, parent4->scroll_tree_index()); 10445 EXPECT_EQ(scroll_root1.id, parent4->scroll_tree_index());
10343 EXPECT_EQ(scroll_root1.id, child9->scroll_tree_index()); 10446 EXPECT_EQ(scroll_root1.id, child9->scroll_tree_index());
10344 EXPECT_EQ(scroll_root1.id, grand_child12->scroll_tree_index()); 10447 EXPECT_EQ(scroll_root1.id, grand_child12->scroll_tree_index());
10345 } 10448 }
10346 10449
10347 } // namespace 10450 } // namespace
10348 } // namespace cc 10451 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698