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

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

Issue 2581843002: Implement merging non-composited paint property nodes in the PACompositor. (Closed)
Patch Set: none Created 3 years, 11 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
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "platform/graphics/paint/PropertyTreeState.h"
6
7 #include "testing/gtest/include/gtest/gtest.h"
8
9 namespace blink {
10
11 class PropertyTreeStateTest : public ::testing::Test {};
12
13 TEST_F(PropertyTreeStateTest, TrasformOnEffectOnClip) {
14 RefPtr<TransformPaintPropertyNode> transform =
15 TransformPaintPropertyNode::create(TransformPaintPropertyNode::root(),
16 TransformationMatrix(),
17 FloatPoint3D());
18
19 RefPtr<ClipPaintPropertyNode> clip = ClipPaintPropertyNode::create(
20 ClipPaintPropertyNode::root(), TransformPaintPropertyNode::root(),
21 FloatRoundedRect());
22
23 RefPtr<EffectPaintPropertyNode> effect = EffectPaintPropertyNode::create(
24 EffectPaintPropertyNode::root(), TransformPaintPropertyNode::root(),
25 clip.get(), CompositorFilterOperations(), 1.0, SkBlendMode::kSrcOver);
26
27 PropertyTreeState state(transform.get(), clip.get(), effect.get(),
28 ScrollPaintPropertyNode::root());
29 EXPECT_EQ(PropertyTreeState::Transform, state.innermostNode());
30
31 PropertyTreeStateIterator iterator(state);
32 EXPECT_EQ(PropertyTreeState::Effect, iterator.next()->innermostNode());
33 EXPECT_EQ(PropertyTreeState::Clip, iterator.next()->innermostNode());
34 EXPECT_EQ(PropertyTreeState::None, iterator.next()->innermostNode());
35 }
36
37 TEST_F(PropertyTreeStateTest, RootState) {
38 PropertyTreeState state(
39 TransformPaintPropertyNode::root(), ClipPaintPropertyNode::root(),
40 EffectPaintPropertyNode::root(), ScrollPaintPropertyNode::root());
41 EXPECT_EQ(PropertyTreeState::None, state.innermostNode());
42 }
43
44 TEST_F(PropertyTreeStateTest, EffectOnClipOnTransform) {
45 RefPtr<TransformPaintPropertyNode> transform =
46 TransformPaintPropertyNode::create(TransformPaintPropertyNode::root(),
47 TransformationMatrix(),
48 FloatPoint3D());
49
50 RefPtr<ClipPaintPropertyNode> clip = ClipPaintPropertyNode::create(
51 ClipPaintPropertyNode::root(), transform.get(), FloatRoundedRect());
52
53 RefPtr<EffectPaintPropertyNode> effect = EffectPaintPropertyNode::create(
54 EffectPaintPropertyNode::root(), transform.get(), clip.get(),
55 CompositorFilterOperations(), 1.0, SkBlendMode::kSrcOver);
56
57 PropertyTreeState state(transform.get(), clip.get(), effect.get(),
58 ScrollPaintPropertyNode::root());
59 EXPECT_EQ(PropertyTreeState::Effect, state.innermostNode());
60
61 PropertyTreeStateIterator iterator(state);
62 EXPECT_EQ(PropertyTreeState::Clip, iterator.next()->innermostNode());
63 EXPECT_EQ(PropertyTreeState::Transform, iterator.next()->innermostNode());
64 EXPECT_EQ(PropertyTreeState::None, iterator.next()->innermostNode());
65 }
66
67 TEST_F(PropertyTreeStateTest, ClipOnEffectOnTransform) {
68 RefPtr<TransformPaintPropertyNode> transform =
69 TransformPaintPropertyNode::create(TransformPaintPropertyNode::root(),
70 TransformationMatrix(),
71 FloatPoint3D());
72
73 RefPtr<ClipPaintPropertyNode> clip = ClipPaintPropertyNode::create(
74 ClipPaintPropertyNode::root(), transform.get(), FloatRoundedRect());
75
76 RefPtr<EffectPaintPropertyNode> effect = EffectPaintPropertyNode::create(
77 EffectPaintPropertyNode::root(), transform.get(),
78 ClipPaintPropertyNode::root(), CompositorFilterOperations(), 1.0,
79 SkBlendMode::kSrcOver);
80
81 PropertyTreeState state(transform.get(), clip.get(), effect.get(),
82 ScrollPaintPropertyNode::root());
83 EXPECT_EQ(PropertyTreeState::Clip, state.innermostNode());
84
85 PropertyTreeStateIterator iterator(state);
86 EXPECT_EQ(PropertyTreeState::Effect, iterator.next()->innermostNode());
87 EXPECT_EQ(PropertyTreeState::Transform, iterator.next()->innermostNode());
88 EXPECT_EQ(PropertyTreeState::None, iterator.next()->innermostNode());
89 }
90
91 TEST_F(PropertyTreeStateTest, ClipDescendantOfTransform) {
92 RefPtr<TransformPaintPropertyNode> transform =
93 TransformPaintPropertyNode::create(TransformPaintPropertyNode::root(),
94 TransformationMatrix(),
95 FloatPoint3D());
96
97 RefPtr<TransformPaintPropertyNode> transform2 =
98 TransformPaintPropertyNode::create(
99 transform.get(), TransformationMatrix(), FloatPoint3D());
100
101 RefPtr<ClipPaintPropertyNode> clip = ClipPaintPropertyNode::create(
102 ClipPaintPropertyNode::root(), transform2.get(), FloatRoundedRect());
103
104 RefPtr<EffectPaintPropertyNode> effect = EffectPaintPropertyNode::create(
105 EffectPaintPropertyNode::root(), TransformPaintPropertyNode::root(),
106 ClipPaintPropertyNode::root(), CompositorFilterOperations(), 1.0,
107 SkBlendMode::kSrcOver);
108
109 // 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
111 // a clip inside a scroller that applies to an absolute-positioned element
112 // which escapes the scroll transform but not the clip.
113 PropertyTreeState state(transform.get(), clip.get(), effect.get(),
114 ScrollPaintPropertyNode::root());
115 EXPECT_EQ(PropertyTreeState::Clip, state.innermostNode());
116
117 PropertyTreeStateIterator iterator(state);
118 EXPECT_EQ(PropertyTreeState::Transform, iterator.next()->innermostNode());
119 EXPECT_EQ(PropertyTreeState::Effect, iterator.next()->innermostNode());
120 EXPECT_EQ(PropertyTreeState::None, iterator.next()->innermostNode());
121 }
122
123 TEST_F(PropertyTreeStateTest, EffectDescendantOfTransform) {
124 RefPtr<TransformPaintPropertyNode> transform =
125 TransformPaintPropertyNode::create(TransformPaintPropertyNode::root(),
126 TransformationMatrix(),
127 FloatPoint3D());
128
129 RefPtr<ClipPaintPropertyNode> clip = ClipPaintPropertyNode::create(
130 ClipPaintPropertyNode::root(), TransformPaintPropertyNode::root(),
131 FloatRoundedRect());
132
133 RefPtr<TransformPaintPropertyNode> transform2 =
134 TransformPaintPropertyNode::create(TransformPaintPropertyNode::root(),
135 TransformationMatrix(),
136 FloatPoint3D());
137
138 RefPtr<EffectPaintPropertyNode> effect = EffectPaintPropertyNode::create(
139 EffectPaintPropertyNode::root(), transform2.get(), clip.get(),
140 CompositorFilterOperations(), 1.0, SkBlendMode::kSrcOver);
141
142 // 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
144 // a clip inside a scroller that applies to an absolute-positioned element
145 // which escapes the scroll transform but not the clip.
146 PropertyTreeState state(transform.get(), clip.get(), effect.get(),
147 ScrollPaintPropertyNode::root());
148 EXPECT_EQ(PropertyTreeState::Effect, state.innermostNode());
149
150 PropertyTreeStateIterator iterator(state);
151 EXPECT_EQ(PropertyTreeState::Transform, iterator.next()->innermostNode());
152 EXPECT_EQ(PropertyTreeState::Clip, iterator.next()->innermostNode());
153 EXPECT_EQ(PropertyTreeState::None, iterator.next()->innermostNode());
154 }
155
156 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698