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

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

Issue 2144823006: Reuse existing paint property node is possible (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: - Created 4 years, 5 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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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/PaintArtifactToSkCanvas.h" 5 #include "platform/graphics/paint/PaintArtifactToSkCanvas.h"
6 6
7 #include "platform/RuntimeEnabledFeatures.h" 7 #include "platform/RuntimeEnabledFeatures.h"
8 #include "platform/graphics/paint/DisplayItem.h" 8 #include "platform/graphics/paint/DisplayItem.h"
9 #include "platform/graphics/paint/DrawingDisplayItem.h" 9 #include "platform/graphics/paint/DrawingDisplayItem.h"
10 #include "platform/graphics/paint/PaintArtifact.h" 10 #include "platform/graphics/paint/PaintArtifact.h"
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
113 EXPECT_CALL(canvas, onDrawRect(SkRect::MakeWH(300, 200), Property(&SkPai nt::getColor, SK_ColorRED), 113 EXPECT_CALL(canvas, onDrawRect(SkRect::MakeWH(300, 200), Property(&SkPai nt::getColor, SK_ColorRED),
114 Pointee(Property(&SkCanvas::getTotalMatrix, adjustedScale)))); 114 Pointee(Property(&SkCanvas::getTotalMatrix, adjustedScale))));
115 EXPECT_CALL(canvas, onDrawRect(SkRect::MakeWH(300, 200), Property(&SkPai nt::getColor, SK_ColorBLUE), 115 EXPECT_CALL(canvas, onDrawRect(SkRect::MakeWH(300, 200), Property(&SkPai nt::getColor, SK_ColorBLUE),
116 Pointee(Property(&SkCanvas::getTotalMatrix, combinedMatrix)))); 116 Pointee(Property(&SkCanvas::getTotalMatrix, combinedMatrix))));
117 } 117 }
118 118
119 // Build the transform tree. 119 // Build the transform tree.
120 TransformationMatrix matrix1; 120 TransformationMatrix matrix1;
121 matrix1.scale(2); 121 matrix1.scale(2);
122 FloatPoint3D origin1(10, 10, 0); 122 FloatPoint3D origin1(10, 10, 0);
123 RefPtr<TransformPaintPropertyNode> transform1 = TransformPaintPropertyNode:: create(matrix1, origin1); 123 RefPtr<TransformPaintPropertyNode> transform1 = TransformPaintPropertyNode:: create(nullptr, matrix1, origin1);
124 TransformationMatrix matrix2; 124 TransformationMatrix matrix2;
125 matrix2.translate(5, 5); 125 matrix2.translate(5, 5);
126 RefPtr<TransformPaintPropertyNode> transform2 = TransformPaintPropertyNode:: create(matrix2, FloatPoint3D(), transform1.get()); 126 RefPtr<TransformPaintPropertyNode> transform2 = TransformPaintPropertyNode:: create(transform1, matrix2, FloatPoint3D());
127 127
128 TestPaintArtifact artifact; 128 TestPaintArtifact artifact;
129 artifact.chunk(transform1.get(), nullptr, nullptr) 129 artifact.chunk(transform1.get(), nullptr, nullptr)
130 .rectDrawing(FloatRect(0, 0, 300, 200), SK_ColorRED); 130 .rectDrawing(FloatRect(0, 0, 300, 200), SK_ColorRED);
131 artifact.chunk(transform2.get(), nullptr, nullptr) 131 artifact.chunk(transform2.get(), nullptr, nullptr)
132 .rectDrawing(FloatRect(0, 0, 300, 200), SK_ColorBLUE); 132 .rectDrawing(FloatRect(0, 0, 300, 200), SK_ColorBLUE);
133 paintArtifactToSkCanvas(artifact.build(), &canvas); 133 paintArtifactToSkCanvas(artifact.build(), &canvas);
134 } 134 }
135 135
136 TEST_F(PaintArtifactToSkCanvasTest, OpacityEffectsCombining) 136 TEST_F(PaintArtifactToSkCanvasTest, OpacityEffectsCombining)
137 { 137 {
138 unsigned expectedFirstOpacity = 127; // floor(0.5 * 255) 138 unsigned expectedFirstOpacity = 127; // floor(0.5 * 255)
139 unsigned expectedSecondOpacity = 63; // floor(0.25 * 255) 139 unsigned expectedSecondOpacity = 63; // floor(0.25 * 255)
140 MockCanvas canvas(kCanvasWidth, kCanvasHeight); 140 MockCanvas canvas(kCanvasWidth, kCanvasHeight);
141 { 141 {
142 testing::InSequence sequence; 142 testing::InSequence sequence;
143 EXPECT_CALL(canvas, willSaveLayer(expectedFirstOpacity, _)); 143 EXPECT_CALL(canvas, willSaveLayer(expectedFirstOpacity, _));
144 EXPECT_CALL(canvas, onDrawRect(SkRect::MakeWH(300, 200), Property(&SkPai nt::getColor, SK_ColorRED), _)); 144 EXPECT_CALL(canvas, onDrawRect(SkRect::MakeWH(300, 200), Property(&SkPai nt::getColor, SK_ColorRED), _));
145 EXPECT_CALL(canvas, willSaveLayer(expectedSecondOpacity, _)); 145 EXPECT_CALL(canvas, willSaveLayer(expectedSecondOpacity, _));
146 EXPECT_CALL(canvas, onDrawRect(SkRect::MakeWH(300, 200), Property(&SkPai nt::getColor, SK_ColorBLUE), _)); 146 EXPECT_CALL(canvas, onDrawRect(SkRect::MakeWH(300, 200), Property(&SkPai nt::getColor, SK_ColorBLUE), _));
147 } 147 }
148 148
149 // Build an opacity effect tree. 149 // Build an opacity effect tree.
150 RefPtr<EffectPaintPropertyNode> opacityEffect1 = EffectPaintPropertyNode::cr eate(0.5); 150 RefPtr<EffectPaintPropertyNode> opacityEffect1 = EffectPaintPropertyNode::cr eate(nullptr, 0.5);
151 RefPtr<EffectPaintPropertyNode> opacityEffect2 = EffectPaintPropertyNode::cr eate(0.25, opacityEffect1); 151 RefPtr<EffectPaintPropertyNode> opacityEffect2 = EffectPaintPropertyNode::cr eate(opacityEffect1, 0.25);
152 152
153 TestPaintArtifact artifact; 153 TestPaintArtifact artifact;
154 artifact.chunk(nullptr, nullptr, opacityEffect1.get()) 154 artifact.chunk(nullptr, nullptr, opacityEffect1.get())
155 .rectDrawing(FloatRect(0, 0, 300, 200), SK_ColorRED); 155 .rectDrawing(FloatRect(0, 0, 300, 200), SK_ColorRED);
156 artifact.chunk(nullptr, nullptr, opacityEffect2.get()) 156 artifact.chunk(nullptr, nullptr, opacityEffect2.get())
157 .rectDrawing(FloatRect(0, 0, 300, 200), SK_ColorBLUE); 157 .rectDrawing(FloatRect(0, 0, 300, 200), SK_ColorBLUE);
158 paintArtifactToSkCanvas(artifact.build(), &canvas); 158 paintArtifactToSkCanvas(artifact.build(), &canvas);
159 } 159 }
160 160
161 TEST_F(PaintArtifactToSkCanvasTest, ChangingOpacityEffects) 161 TEST_F(PaintArtifactToSkCanvasTest, ChangingOpacityEffects)
(...skipping 12 matching lines...) Expand all
174 EXPECT_CALL(canvas, willSaveLayer(expectedDOpacity, _)); 174 EXPECT_CALL(canvas, willSaveLayer(expectedDOpacity, _));
175 EXPECT_CALL(canvas, onDrawRect(SkRect::MakeWH(300, 200), Property(&SkPai nt::getColor, SK_ColorBLUE), _)); 175 EXPECT_CALL(canvas, onDrawRect(SkRect::MakeWH(300, 200), Property(&SkPai nt::getColor, SK_ColorBLUE), _));
176 } 176 }
177 177
178 // Build an opacity effect tree with the following structure: 178 // Build an opacity effect tree with the following structure:
179 // _root_ 179 // _root_
180 // | | 180 // | |
181 // 0.1 a c 0.3 181 // 0.1 a c 0.3
182 // | | 182 // | |
183 // 0.2 b d 0.4 183 // 0.2 b d 0.4
184 RefPtr<EffectPaintPropertyNode> opacityEffectA = EffectPaintPropertyNode::cr eate(0.1); 184 RefPtr<EffectPaintPropertyNode> opacityEffectA = EffectPaintPropertyNode::cr eate(nullptr, 0.1);
185 RefPtr<EffectPaintPropertyNode> opacityEffectB = EffectPaintPropertyNode::cr eate(0.2, opacityEffectA); 185 RefPtr<EffectPaintPropertyNode> opacityEffectB = EffectPaintPropertyNode::cr eate(opacityEffectA, 0.2);
186 RefPtr<EffectPaintPropertyNode> opacityEffectC = EffectPaintPropertyNode::cr eate(0.3); 186 RefPtr<EffectPaintPropertyNode> opacityEffectC = EffectPaintPropertyNode::cr eate(nullptr, 0.3);
187 RefPtr<EffectPaintPropertyNode> opacityEffectD = EffectPaintPropertyNode::cr eate(0.4, opacityEffectC); 187 RefPtr<EffectPaintPropertyNode> opacityEffectD = EffectPaintPropertyNode::cr eate(opacityEffectC, 0.4);
188 188
189 // Build a two-chunk artifact directly. 189 // Build a two-chunk artifact directly.
190 // chunk1 references opacity node b, chunk2 references opacity node d. 190 // chunk1 references opacity node b, chunk2 references opacity node d.
191 TestPaintArtifact artifact; 191 TestPaintArtifact artifact;
192 artifact.chunk(nullptr, nullptr, opacityEffectB.get()) 192 artifact.chunk(nullptr, nullptr, opacityEffectB.get())
193 .rectDrawing(FloatRect(0, 0, 300, 200), SK_ColorRED); 193 .rectDrawing(FloatRect(0, 0, 300, 200), SK_ColorRED);
194 artifact.chunk(nullptr, nullptr, opacityEffectD.get()) 194 artifact.chunk(nullptr, nullptr, opacityEffectD.get())
195 .rectDrawing(FloatRect(0, 0, 300, 200), SK_ColorBLUE); 195 .rectDrawing(FloatRect(0, 0, 300, 200), SK_ColorBLUE);
196 paintArtifactToSkCanvas(artifact.build(), &canvas); 196 paintArtifactToSkCanvas(artifact.build(), &canvas);
197 } 197 }
(...skipping 15 matching lines...) Expand all
213 // <div style="position:fixed; left:150px; top:150px; width:100px; heigh t:100px; overflow:hidden;"> 213 // <div style="position:fixed; left:150px; top:150px; width:100px; heigh t:100px; overflow:hidden;">
214 // client1 214 // client1
215 // </div> 215 // </div>
216 // </div> 216 // </div>
217 // <script>scrollTo(0, 100)</script> 217 // <script>scrollTo(0, 100)</script>
218 // The content itself will not be scrolled due to fixed positioning, 218 // The content itself will not be scrolled due to fixed positioning,
219 // but will be affected by some scrolled clip. 219 // but will be affected by some scrolled clip.
220 220
221 // Setup transform tree. 221 // Setup transform tree.
222 RefPtr<TransformPaintPropertyNode> transform1 = TransformPaintPropertyNode:: create( 222 RefPtr<TransformPaintPropertyNode> transform1 = TransformPaintPropertyNode:: create(
223 TransformationMatrix().translate(0, -100), FloatPoint3D()); 223 nullptr, TransformationMatrix().translate(0, -100), FloatPoint3D());
224 224
225 // Setup clip tree. 225 // Setup clip tree.
226 RefPtr<ClipPaintPropertyNode> clip1 = ClipPaintPropertyNode::create( 226 RefPtr<ClipPaintPropertyNode> clip1 = ClipPaintPropertyNode::create(
227 transform1.get(), FloatRoundedRect(100, 200, 100, 100)); 227 nullptr, transform1.get(), FloatRoundedRect(100, 200, 100, 100));
228 RefPtr<ClipPaintPropertyNode> clip2 = ClipPaintPropertyNode::create( 228 RefPtr<ClipPaintPropertyNode> clip2 = ClipPaintPropertyNode::create(
229 nullptr, FloatRoundedRect(150, 150, 100, 100), clip1.get()); 229 clip1, nullptr, FloatRoundedRect(150, 150, 100, 100));
230 230
231 MockCanvas canvas(kCanvasWidth, kCanvasHeight); 231 MockCanvas canvas(kCanvasWidth, kCanvasHeight);
232 232
233 SkRegion totalClip; 233 SkRegion totalClip;
234 totalClip.setRect(SkIRect::MakeXYWH(100, 100, 100, 100)); 234 totalClip.setRect(SkIRect::MakeXYWH(100, 100, 100, 100));
235 totalClip.op(SkIRect::MakeXYWH(150, 150, 100, 100), SkRegion::kIntersect_Op) ; 235 totalClip.op(SkIRect::MakeXYWH(150, 150, 100, 100), SkRegion::kIntersect_Op) ;
236 EXPECT_CALL(canvas, onDrawRect(SkRect::MakeWH(300, 200), Property(&SkPaint:: getColor, SK_ColorRED), 236 EXPECT_CALL(canvas, onDrawRect(SkRect::MakeWH(300, 200), Property(&SkPaint:: getColor, SK_ColorRED),
237 ResultOf(&getCanvasClipAsRegion, Eq(totalClip)))); 237 ResultOf(&getCanvasClipAsRegion, Eq(totalClip))));
238 238
239 TestPaintArtifact artifact; 239 TestPaintArtifact artifact;
240 artifact.chunk(nullptr, clip2.get(), nullptr) 240 artifact.chunk(nullptr, clip2.get(), nullptr)
241 .rectDrawing(FloatRect(0, 0, 300, 200), SK_ColorRED); 241 .rectDrawing(FloatRect(0, 0, 300, 200), SK_ColorRED);
242 paintArtifactToSkCanvas(artifact.build(), &canvas); 242 paintArtifactToSkCanvas(artifact.build(), &canvas);
243 } 243 }
244 244
245 } // namespace 245 } // namespace
246 } // namespace blink 246 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698