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

Side by Side Diff: third_party/WebKit/Source/platform/graphics/paint/PropertyTreeStateTest.cpp

Issue 2657863004: Move scroll paint property nodes to be owned by the transform tree (Closed)
Patch Set: Rebase & remove parens Created 3 years, 10 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
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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 "platform/graphics/paint/PropertyTreeState.h" 5 #include "platform/graphics/paint/PropertyTreeState.h"
6 6
7 #include "testing/gtest/include/gtest/gtest.h" 7 #include "testing/gtest/include/gtest/gtest.h"
8 8
9 namespace blink { 9 namespace blink {
10 10
11 class PropertyTreeStateTest : public ::testing::Test {}; 11 class PropertyTreeStateTest : public ::testing::Test {};
12 12
13 TEST_F(PropertyTreeStateTest, TransformOnEffectOnClip) { 13 TEST_F(PropertyTreeStateTest, TransformOnEffectOnClip) {
14 RefPtr<TransformPaintPropertyNode> transform = 14 RefPtr<TransformPaintPropertyNode> transform =
15 TransformPaintPropertyNode::create(TransformPaintPropertyNode::root(), 15 TransformPaintPropertyNode::create(TransformPaintPropertyNode::root(),
16 TransformationMatrix(), 16 TransformationMatrix(),
17 FloatPoint3D()); 17 FloatPoint3D());
18 18
19 RefPtr<ClipPaintPropertyNode> clip = ClipPaintPropertyNode::create( 19 RefPtr<ClipPaintPropertyNode> clip = ClipPaintPropertyNode::create(
20 ClipPaintPropertyNode::root(), TransformPaintPropertyNode::root(), 20 ClipPaintPropertyNode::root(), TransformPaintPropertyNode::root(),
21 FloatRoundedRect()); 21 FloatRoundedRect());
22 22
23 RefPtr<EffectPaintPropertyNode> effect = EffectPaintPropertyNode::create( 23 RefPtr<EffectPaintPropertyNode> effect = EffectPaintPropertyNode::create(
24 EffectPaintPropertyNode::root(), TransformPaintPropertyNode::root(), 24 EffectPaintPropertyNode::root(), TransformPaintPropertyNode::root(),
25 clip.get(), CompositorFilterOperations(), 1.0, SkBlendMode::kSrcOver); 25 clip.get(), CompositorFilterOperations(), 1.0, SkBlendMode::kSrcOver);
26 26
27 PropertyTreeState state(transform.get(), clip.get(), effect.get(), 27 PropertyTreeState state(transform.get(), clip.get(), effect.get());
28 ScrollPaintPropertyNode::root());
29 EXPECT_EQ(PropertyTreeState::Transform, state.innermostNode()); 28 EXPECT_EQ(PropertyTreeState::Transform, state.innermostNode());
30 29
31 PropertyTreeStateIterator iterator(state); 30 PropertyTreeStateIterator iterator(state);
32 EXPECT_EQ(PropertyTreeState::Effect, iterator.next()->innermostNode()); 31 EXPECT_EQ(PropertyTreeState::Effect, iterator.next()->innermostNode());
33 EXPECT_EQ(PropertyTreeState::Clip, iterator.next()->innermostNode()); 32 EXPECT_EQ(PropertyTreeState::Clip, iterator.next()->innermostNode());
34 EXPECT_EQ(PropertyTreeState::None, iterator.next()->innermostNode()); 33 EXPECT_EQ(PropertyTreeState::None, iterator.next()->innermostNode());
35 } 34 }
36 35
37 TEST_F(PropertyTreeStateTest, RootState) { 36 TEST_F(PropertyTreeStateTest, RootState) {
38 PropertyTreeState state( 37 PropertyTreeState state(TransformPaintPropertyNode::root(),
39 TransformPaintPropertyNode::root(), ClipPaintPropertyNode::root(), 38 ClipPaintPropertyNode::root(),
40 EffectPaintPropertyNode::root(), ScrollPaintPropertyNode::root()); 39 EffectPaintPropertyNode::root());
41 EXPECT_EQ(PropertyTreeState::None, state.innermostNode()); 40 EXPECT_EQ(PropertyTreeState::None, state.innermostNode());
42 } 41 }
43 42
44 TEST_F(PropertyTreeStateTest, EffectOnClipOnTransform) { 43 TEST_F(PropertyTreeStateTest, EffectOnClipOnTransform) {
45 RefPtr<TransformPaintPropertyNode> transform = 44 RefPtr<TransformPaintPropertyNode> transform =
46 TransformPaintPropertyNode::create(TransformPaintPropertyNode::root(), 45 TransformPaintPropertyNode::create(TransformPaintPropertyNode::root(),
47 TransformationMatrix(), 46 TransformationMatrix(),
48 FloatPoint3D()); 47 FloatPoint3D());
49 48
50 RefPtr<ClipPaintPropertyNode> clip = ClipPaintPropertyNode::create( 49 RefPtr<ClipPaintPropertyNode> clip = ClipPaintPropertyNode::create(
51 ClipPaintPropertyNode::root(), transform.get(), FloatRoundedRect()); 50 ClipPaintPropertyNode::root(), transform.get(), FloatRoundedRect());
52 51
53 RefPtr<EffectPaintPropertyNode> effect = EffectPaintPropertyNode::create( 52 RefPtr<EffectPaintPropertyNode> effect = EffectPaintPropertyNode::create(
54 EffectPaintPropertyNode::root(), transform.get(), clip.get(), 53 EffectPaintPropertyNode::root(), transform.get(), clip.get(),
55 CompositorFilterOperations(), 1.0, SkBlendMode::kSrcOver); 54 CompositorFilterOperations(), 1.0, SkBlendMode::kSrcOver);
56 55
57 PropertyTreeState state(transform.get(), clip.get(), effect.get(), 56 PropertyTreeState state(transform.get(), clip.get(), effect.get());
58 ScrollPaintPropertyNode::root());
59 EXPECT_EQ(PropertyTreeState::Effect, state.innermostNode()); 57 EXPECT_EQ(PropertyTreeState::Effect, state.innermostNode());
60 58
61 PropertyTreeStateIterator iterator(state); 59 PropertyTreeStateIterator iterator(state);
62 EXPECT_EQ(PropertyTreeState::Clip, iterator.next()->innermostNode()); 60 EXPECT_EQ(PropertyTreeState::Clip, iterator.next()->innermostNode());
63 EXPECT_EQ(PropertyTreeState::Transform, iterator.next()->innermostNode()); 61 EXPECT_EQ(PropertyTreeState::Transform, iterator.next()->innermostNode());
64 EXPECT_EQ(PropertyTreeState::None, iterator.next()->innermostNode()); 62 EXPECT_EQ(PropertyTreeState::None, iterator.next()->innermostNode());
65 } 63 }
66 64
67 TEST_F(PropertyTreeStateTest, ClipOnEffectOnTransform) { 65 TEST_F(PropertyTreeStateTest, ClipOnEffectOnTransform) {
68 RefPtr<TransformPaintPropertyNode> transform = 66 RefPtr<TransformPaintPropertyNode> transform =
69 TransformPaintPropertyNode::create(TransformPaintPropertyNode::root(), 67 TransformPaintPropertyNode::create(TransformPaintPropertyNode::root(),
70 TransformationMatrix(), 68 TransformationMatrix(),
71 FloatPoint3D()); 69 FloatPoint3D());
72 70
73 RefPtr<ClipPaintPropertyNode> clip = ClipPaintPropertyNode::create( 71 RefPtr<ClipPaintPropertyNode> clip = ClipPaintPropertyNode::create(
74 ClipPaintPropertyNode::root(), transform.get(), FloatRoundedRect()); 72 ClipPaintPropertyNode::root(), transform.get(), FloatRoundedRect());
75 73
76 RefPtr<EffectPaintPropertyNode> effect = EffectPaintPropertyNode::create( 74 RefPtr<EffectPaintPropertyNode> effect = EffectPaintPropertyNode::create(
77 EffectPaintPropertyNode::root(), transform.get(), 75 EffectPaintPropertyNode::root(), transform.get(),
78 ClipPaintPropertyNode::root(), CompositorFilterOperations(), 1.0, 76 ClipPaintPropertyNode::root(), CompositorFilterOperations(), 1.0,
79 SkBlendMode::kSrcOver); 77 SkBlendMode::kSrcOver);
80 78
81 PropertyTreeState state(transform.get(), clip.get(), effect.get(), 79 PropertyTreeState state(transform.get(), clip.get(), effect.get());
82 ScrollPaintPropertyNode::root());
83 EXPECT_EQ(PropertyTreeState::Clip, state.innermostNode()); 80 EXPECT_EQ(PropertyTreeState::Clip, state.innermostNode());
84 81
85 PropertyTreeStateIterator iterator(state); 82 PropertyTreeStateIterator iterator(state);
86 EXPECT_EQ(PropertyTreeState::Effect, iterator.next()->innermostNode()); 83 EXPECT_EQ(PropertyTreeState::Effect, iterator.next()->innermostNode());
87 EXPECT_EQ(PropertyTreeState::Transform, iterator.next()->innermostNode()); 84 EXPECT_EQ(PropertyTreeState::Transform, iterator.next()->innermostNode());
88 EXPECT_EQ(PropertyTreeState::None, iterator.next()->innermostNode()); 85 EXPECT_EQ(PropertyTreeState::None, iterator.next()->innermostNode());
89 } 86 }
90 87
91 TEST_F(PropertyTreeStateTest, ClipDescendantOfTransform) { 88 TEST_F(PropertyTreeStateTest, ClipDescendantOfTransform) {
92 RefPtr<TransformPaintPropertyNode> transform = 89 RefPtr<TransformPaintPropertyNode> transform =
(...skipping 10 matching lines...) Expand all
103 100
104 RefPtr<EffectPaintPropertyNode> effect = EffectPaintPropertyNode::create( 101 RefPtr<EffectPaintPropertyNode> effect = EffectPaintPropertyNode::create(
105 EffectPaintPropertyNode::root(), TransformPaintPropertyNode::root(), 102 EffectPaintPropertyNode::root(), TransformPaintPropertyNode::root(),
106 ClipPaintPropertyNode::root(), CompositorFilterOperations(), 1.0, 103 ClipPaintPropertyNode::root(), CompositorFilterOperations(), 1.0,
107 SkBlendMode::kSrcOver); 104 SkBlendMode::kSrcOver);
108 105
109 // Here the clip is inside of its own transform, but the transform is an 106 // Here the clip is inside of its own transform, but the transform is an
110 // ancestor of the clip's transform. This models situations such as 107 // ancestor of the clip's transform. This models situations such as
111 // a clip inside a scroller that applies to an absolute-positioned element 108 // a clip inside a scroller that applies to an absolute-positioned element
112 // which escapes the scroll transform but not the clip. 109 // which escapes the scroll transform but not the clip.
113 PropertyTreeState state(transform.get(), clip.get(), effect.get(), 110 PropertyTreeState state(transform.get(), clip.get(), effect.get());
114 ScrollPaintPropertyNode::root());
115 EXPECT_EQ(PropertyTreeState::Clip, state.innermostNode()); 111 EXPECT_EQ(PropertyTreeState::Clip, state.innermostNode());
116 112
117 PropertyTreeStateIterator iterator(state); 113 PropertyTreeStateIterator iterator(state);
118 EXPECT_EQ(PropertyTreeState::Transform, iterator.next()->innermostNode()); 114 EXPECT_EQ(PropertyTreeState::Transform, iterator.next()->innermostNode());
119 EXPECT_EQ(PropertyTreeState::Effect, iterator.next()->innermostNode()); 115 EXPECT_EQ(PropertyTreeState::Effect, iterator.next()->innermostNode());
120 EXPECT_EQ(PropertyTreeState::None, iterator.next()->innermostNode()); 116 EXPECT_EQ(PropertyTreeState::None, iterator.next()->innermostNode());
121 } 117 }
122 118
123 TEST_F(PropertyTreeStateTest, EffectDescendantOfTransform) { 119 TEST_F(PropertyTreeStateTest, EffectDescendantOfTransform) {
124 RefPtr<TransformPaintPropertyNode> transform = 120 RefPtr<TransformPaintPropertyNode> transform =
(...skipping 11 matching lines...) Expand all
136 FloatPoint3D()); 132 FloatPoint3D());
137 133
138 RefPtr<EffectPaintPropertyNode> effect = EffectPaintPropertyNode::create( 134 RefPtr<EffectPaintPropertyNode> effect = EffectPaintPropertyNode::create(
139 EffectPaintPropertyNode::root(), transform2.get(), clip.get(), 135 EffectPaintPropertyNode::root(), transform2.get(), clip.get(),
140 CompositorFilterOperations(), 1.0, SkBlendMode::kSrcOver); 136 CompositorFilterOperations(), 1.0, SkBlendMode::kSrcOver);
141 137
142 // Here the clip is inside of its own transform, but the transform is an 138 // Here the clip is inside of its own transform, but the transform is an
143 // ancestor of the clip's transform. This models situations such as 139 // ancestor of the clip's transform. This models situations such as
144 // a clip inside a scroller that applies to an absolute-positioned element 140 // a clip inside a scroller that applies to an absolute-positioned element
145 // which escapes the scroll transform but not the clip. 141 // which escapes the scroll transform but not the clip.
146 PropertyTreeState state(transform.get(), clip.get(), effect.get(), 142 PropertyTreeState state(transform.get(), clip.get(), effect.get());
147 ScrollPaintPropertyNode::root());
148 EXPECT_EQ(PropertyTreeState::Effect, state.innermostNode()); 143 EXPECT_EQ(PropertyTreeState::Effect, state.innermostNode());
149 144
150 PropertyTreeStateIterator iterator(state); 145 PropertyTreeStateIterator iterator(state);
151 EXPECT_EQ(PropertyTreeState::Transform, iterator.next()->innermostNode()); 146 EXPECT_EQ(PropertyTreeState::Transform, iterator.next()->innermostNode());
152 EXPECT_EQ(PropertyTreeState::Clip, iterator.next()->innermostNode()); 147 EXPECT_EQ(PropertyTreeState::Clip, iterator.next()->innermostNode());
153 EXPECT_EQ(PropertyTreeState::None, iterator.next()->innermostNode()); 148 EXPECT_EQ(PropertyTreeState::None, iterator.next()->innermostNode());
154 } 149 }
155 150
156 TEST_F(PropertyTreeStateTest, CompositorElementIdNoElementIdOnAnyNode) { 151 TEST_F(PropertyTreeStateTest, CompositorElementIdNoElementIdOnAnyNode) {
157 PropertyTreeState state( 152 PropertyTreeState state(TransformPaintPropertyNode::root(),
158 TransformPaintPropertyNode::root(), ClipPaintPropertyNode::root(), 153 ClipPaintPropertyNode::root(),
159 EffectPaintPropertyNode::root(), ScrollPaintPropertyNode::root()); 154 EffectPaintPropertyNode::root());
160 EXPECT_EQ(CompositorElementId(), state.compositorElementId()); 155 EXPECT_EQ(CompositorElementId(), state.compositorElementId());
161 } 156 }
162 157
163 TEST_F(PropertyTreeStateTest, CompositorElementIdWithElementIdOnTransformNode) { 158 TEST_F(PropertyTreeStateTest, CompositorElementIdWithElementIdOnTransformNode) {
164 CompositorElementId expectedCompositorElementId = CompositorElementId(2, 0); 159 CompositorElementId expectedCompositorElementId = CompositorElementId(2, 0);
165 RefPtr<TransformPaintPropertyNode> transform = 160 RefPtr<TransformPaintPropertyNode> transform =
166 TransformPaintPropertyNode::create( 161 TransformPaintPropertyNode::create(TransformPaintPropertyNode::root(),
167 TransformPaintPropertyNode::root(), TransformationMatrix(), 162 TransformationMatrix(), FloatPoint3D(),
168 FloatPoint3D(), nullptr, false, 0, CompositingReasonNone, 163 false, 0, CompositingReasonNone,
169 expectedCompositorElementId); 164 expectedCompositorElementId);
170 PropertyTreeState state(transform.get(), ClipPaintPropertyNode::root(), 165 PropertyTreeState state(transform.get(), ClipPaintPropertyNode::root(),
171 EffectPaintPropertyNode::root(), 166 EffectPaintPropertyNode::root());
172 ScrollPaintPropertyNode::root());
173 EXPECT_EQ(expectedCompositorElementId, state.compositorElementId()); 167 EXPECT_EQ(expectedCompositorElementId, state.compositorElementId());
174 } 168 }
175 169
176 TEST_F(PropertyTreeStateTest, CompositorElementIdWithElementIdOnEffectNode) { 170 TEST_F(PropertyTreeStateTest, CompositorElementIdWithElementIdOnEffectNode) {
177 CompositorElementId expectedCompositorElementId = CompositorElementId(2, 0); 171 CompositorElementId expectedCompositorElementId = CompositorElementId(2, 0);
178 RefPtr<EffectPaintPropertyNode> effect = EffectPaintPropertyNode::create( 172 RefPtr<EffectPaintPropertyNode> effect = EffectPaintPropertyNode::create(
179 EffectPaintPropertyNode::root(), TransformPaintPropertyNode::root(), 173 EffectPaintPropertyNode::root(), TransformPaintPropertyNode::root(),
180 ClipPaintPropertyNode::root(), CompositorFilterOperations(), 1.0, 174 ClipPaintPropertyNode::root(), CompositorFilterOperations(), 1.0,
181 SkBlendMode::kSrcOver, CompositingReasonNone, 175 SkBlendMode::kSrcOver, CompositingReasonNone,
182 expectedCompositorElementId); 176 expectedCompositorElementId);
183 PropertyTreeState state(TransformPaintPropertyNode::root(), 177 PropertyTreeState state(TransformPaintPropertyNode::root(),
184 ClipPaintPropertyNode::root(), effect.get(), 178 ClipPaintPropertyNode::root(), effect.get());
185 ScrollPaintPropertyNode::root());
186 EXPECT_EQ(expectedCompositorElementId, state.compositorElementId()); 179 EXPECT_EQ(expectedCompositorElementId, state.compositorElementId());
187 } 180 }
188 181
189 TEST_F(PropertyTreeStateTest, CompositorElementIdWithElementIdOnMultipleNodes) { 182 TEST_F(PropertyTreeStateTest, CompositorElementIdWithElementIdOnMultipleNodes) {
190 RefPtr<ScrollPaintPropertyNode> scroll = ScrollPaintPropertyNode::create(
191 ScrollPaintPropertyNode::root(), IntSize(), IntSize(), true, false, 0);
192 CompositorElementId expectedCompositorElementId = CompositorElementId(2, 0); 183 CompositorElementId expectedCompositorElementId = CompositorElementId(2, 0);
193 RefPtr<TransformPaintPropertyNode> transform = 184 RefPtr<TransformPaintPropertyNode> transform =
194 TransformPaintPropertyNode::create( 185 TransformPaintPropertyNode::create(TransformPaintPropertyNode::root(),
195 TransformPaintPropertyNode::root(), TransformationMatrix(), 186 TransformationMatrix(), FloatPoint3D(),
196 FloatPoint3D(), nullptr, false, 0, CompositingReasonNone, 187 false, 0, CompositingReasonNone,
197 expectedCompositorElementId); 188 expectedCompositorElementId);
198 RefPtr<EffectPaintPropertyNode> effect = EffectPaintPropertyNode::create( 189 RefPtr<EffectPaintPropertyNode> effect = EffectPaintPropertyNode::create(
199 EffectPaintPropertyNode::root(), TransformPaintPropertyNode::root(), 190 EffectPaintPropertyNode::root(), TransformPaintPropertyNode::root(),
200 ClipPaintPropertyNode::root(), CompositorFilterOperations(), 1.0, 191 ClipPaintPropertyNode::root(), CompositorFilterOperations(), 1.0,
201 SkBlendMode::kSrcOver, CompositingReasonNone, 192 SkBlendMode::kSrcOver, CompositingReasonNone,
202 expectedCompositorElementId); 193 expectedCompositorElementId);
203 PropertyTreeState state(transform.get(), ClipPaintPropertyNode::root(), 194 PropertyTreeState state(transform.get(), ClipPaintPropertyNode::root(),
204 effect.get(), scroll.get()); 195 effect.get());
205 EXPECT_EQ(expectedCompositorElementId, state.compositorElementId()); 196 EXPECT_EQ(expectedCompositorElementId, state.compositorElementId());
206 } 197 }
207 198
208 } // namespace blink 199 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698