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

Side by Side Diff: third_party/WebKit/Source/platform/graphics/compositing/PaintArtifactCompositorTest.cpp

Issue 2299533002: WIP: Construct SPV2's scroll paint property tree (Closed)
Patch Set: Add more paint property builder tests, update comments/documentation" Created 4 years, 3 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/compositing/PaintArtifactCompositor.h" 5 #include "platform/graphics/compositing/PaintArtifactCompositor.h"
6 6
7 #include "base/test/test_simple_task_runner.h" 7 #include "base/test/test_simple_task_runner.h"
8 #include "base/threading/thread_task_runner_handle.h" 8 #include "base/threading/thread_task_runner_handle.h"
9 #include "cc/layers/layer.h" 9 #include "cc/layers/layer.h"
10 #include "cc/test/fake_output_surface.h" 10 #include "cc/test/fake_output_surface.h"
11 #include "cc/test/geometry_test_utils.h" 11 #include "cc/test/geometry_test_utils.h"
12 #include "cc/trees/clip_node.h" 12 #include "cc/trees/clip_node.h"
13 #include "cc/trees/effect_node.h" 13 #include "cc/trees/effect_node.h"
14 #include "cc/trees/layer_tree_host.h" 14 #include "cc/trees/layer_tree_host.h"
15 #include "cc/trees/scroll_node.h"
15 #include "cc/trees/transform_node.h" 16 #include "cc/trees/transform_node.h"
16 #include "platform/RuntimeEnabledFeatures.h" 17 #include "platform/RuntimeEnabledFeatures.h"
17 #include "platform/graphics/paint/EffectPaintPropertyNode.h" 18 #include "platform/graphics/paint/EffectPaintPropertyNode.h"
18 #include "platform/graphics/paint/PaintArtifact.h" 19 #include "platform/graphics/paint/PaintArtifact.h"
20 #include "platform/graphics/paint/ScrollPaintPropertyNode.h"
19 #include "platform/testing/PictureMatchers.h" 21 #include "platform/testing/PictureMatchers.h"
20 #include "platform/testing/TestPaintArtifact.h" 22 #include "platform/testing/TestPaintArtifact.h"
21 #include "platform/testing/WebLayerTreeViewImplForTesting.h" 23 #include "platform/testing/WebLayerTreeViewImplForTesting.h"
22 #include "testing/gmock/include/gmock/gmock.h" 24 #include "testing/gmock/include/gmock/gmock.h"
23 #include "testing/gtest/include/gtest/gtest.h" 25 #include "testing/gtest/include/gtest/gtest.h"
24 #include <memory> 26 #include <memory>
25 27
26 namespace blink { 28 namespace blink {
27 namespace { 29 namespace {
28 30
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
139 EXPECT_EQ(gfx::Size(100, 100), child->bounds()); 141 EXPECT_EQ(gfx::Size(100, 100), child->bounds());
140 } 142 }
141 143
142 TEST_F(PaintArtifactCompositorTestWithPropertyTrees, OneTransform) 144 TEST_F(PaintArtifactCompositorTestWithPropertyTrees, OneTransform)
143 { 145 {
144 // A 90 degree clockwise rotation about (100, 100). 146 // A 90 degree clockwise rotation about (100, 100).
145 RefPtr<TransformPaintPropertyNode> transform = TransformPaintPropertyNode::c reate( 147 RefPtr<TransformPaintPropertyNode> transform = TransformPaintPropertyNode::c reate(
146 nullptr, TransformationMatrix().rotate(90), FloatPoint3D(100, 100, 0)); 148 nullptr, TransformationMatrix().rotate(90), FloatPoint3D(100, 100, 0));
147 149
148 TestPaintArtifact artifact; 150 TestPaintArtifact artifact;
149 artifact.chunk(transform, nullptr, dummyRootEffect()) 151 artifact.chunk(transform, nullptr, dummyRootEffect(), nullptr)
150 .rectDrawing(FloatRect(0, 0, 100, 100), Color::white); 152 .rectDrawing(FloatRect(0, 0, 100, 100), Color::white);
151 artifact.chunk(nullptr, nullptr, dummyRootEffect()) 153 artifact.chunk(nullptr, nullptr, dummyRootEffect(), nullptr)
152 .rectDrawing(FloatRect(0, 0, 100, 100), Color::gray); 154 .rectDrawing(FloatRect(0, 0, 100, 100), Color::gray);
153 artifact.chunk(transform, nullptr, dummyRootEffect()) 155 artifact.chunk(transform, nullptr, dummyRootEffect(), nullptr)
154 .rectDrawing(FloatRect(100, 100, 200, 100), Color::black); 156 .rectDrawing(FloatRect(100, 100, 200, 100), Color::black);
155 update(artifact.build()); 157 update(artifact.build());
156 158
157 ASSERT_EQ(3u, contentLayerCount()); 159 ASSERT_EQ(3u, contentLayerCount());
158 { 160 {
159 const cc::Layer* layer = contentLayerAt(0); 161 const cc::Layer* layer = contentLayerAt(0);
160 EXPECT_THAT(layer->GetPicture(), 162 EXPECT_THAT(layer->GetPicture(),
161 Pointee(drawsRectangle(FloatRect(0, 0, 100, 100), Color::white))); 163 Pointee(drawsRectangle(FloatRect(0, 0, 100, 100), Color::white)));
162 gfx::RectF mappedRect(0, 0, 100, 100); 164 gfx::RectF mappedRect(0, 0, 100, 100);
163 layer->screen_space_transform().TransformRect(&mappedRect); 165 layer->screen_space_transform().TransformRect(&mappedRect);
(...skipping 17 matching lines...) Expand all
181 183
182 TEST_F(PaintArtifactCompositorTestWithPropertyTrees, TransformCombining) 184 TEST_F(PaintArtifactCompositorTestWithPropertyTrees, TransformCombining)
183 { 185 {
184 // A translation by (5, 5) within a 2x scale about (10, 10). 186 // A translation by (5, 5) within a 2x scale about (10, 10).
185 RefPtr<TransformPaintPropertyNode> transform1 = TransformPaintPropertyNode:: create( 187 RefPtr<TransformPaintPropertyNode> transform1 = TransformPaintPropertyNode:: create(
186 nullptr, TransformationMatrix().scale(2), FloatPoint3D(10, 10, 0)); 188 nullptr, TransformationMatrix().scale(2), FloatPoint3D(10, 10, 0));
187 RefPtr<TransformPaintPropertyNode> transform2 = TransformPaintPropertyNode:: create( 189 RefPtr<TransformPaintPropertyNode> transform2 = TransformPaintPropertyNode:: create(
188 transform1, TransformationMatrix().translate(5, 5), FloatPoint3D()); 190 transform1, TransformationMatrix().translate(5, 5), FloatPoint3D());
189 191
190 TestPaintArtifact artifact; 192 TestPaintArtifact artifact;
191 artifact.chunk(transform1, nullptr, dummyRootEffect()) 193 artifact.chunk(transform1, nullptr, dummyRootEffect(), nullptr)
192 .rectDrawing(FloatRect(0, 0, 300, 200), Color::white); 194 .rectDrawing(FloatRect(0, 0, 300, 200), Color::white);
193 artifact.chunk(transform2, nullptr, dummyRootEffect()) 195 artifact.chunk(transform2, nullptr, dummyRootEffect(), nullptr)
194 .rectDrawing(FloatRect(0, 0, 300, 200), Color::black); 196 .rectDrawing(FloatRect(0, 0, 300, 200), Color::black);
195 update(artifact.build()); 197 update(artifact.build());
196 198
197 ASSERT_EQ(2u, contentLayerCount()); 199 ASSERT_EQ(2u, contentLayerCount());
198 { 200 {
199 const cc::Layer* layer = contentLayerAt(0); 201 const cc::Layer* layer = contentLayerAt(0);
200 EXPECT_THAT(layer->GetPicture(), 202 EXPECT_THAT(layer->GetPicture(),
201 Pointee(drawsRectangle(FloatRect(0, 0, 300, 200), Color::white))); 203 Pointee(drawsRectangle(FloatRect(0, 0, 300, 200), Color::white)));
202 gfx::RectF mappedRect(0, 0, 300, 200); 204 gfx::RectF mappedRect(0, 0, 300, 200);
203 layer->screen_space_transform().TransformRect(&mappedRect); 205 layer->screen_space_transform().TransformRect(&mappedRect);
(...skipping 23 matching lines...) Expand all
227 // is flattened, while cc's notion applies in the parent's coordinate sp ace. 229 // is flattened, while cc's notion applies in the parent's coordinate sp ace.
228 RefPtr<TransformPaintPropertyNode> transform1 = TransformPaintPropertyNo de::create( 230 RefPtr<TransformPaintPropertyNode> transform1 = TransformPaintPropertyNo de::create(
229 nullptr, TransformationMatrix(), FloatPoint3D()); 231 nullptr, TransformationMatrix(), FloatPoint3D());
230 RefPtr<TransformPaintPropertyNode> transform2 = TransformPaintPropertyNo de::create( 232 RefPtr<TransformPaintPropertyNode> transform2 = TransformPaintPropertyNo de::create(
231 transform1, TransformationMatrix().rotate3d(0, 45, 0), FloatPoint3D( )); 233 transform1, TransformationMatrix().rotate3d(0, 45, 0), FloatPoint3D( ));
232 RefPtr<TransformPaintPropertyNode> transform3 = TransformPaintPropertyNo de::create( 234 RefPtr<TransformPaintPropertyNode> transform3 = TransformPaintPropertyNo de::create(
233 transform2, TransformationMatrix().rotate3d(0, 45, 0), FloatPoint3D( ), 235 transform2, TransformationMatrix().rotate3d(0, 45, 0), FloatPoint3D( ),
234 transformIsFlattened); 236 transformIsFlattened);
235 237
236 TestPaintArtifact artifact; 238 TestPaintArtifact artifact;
237 artifact.chunk(transform3, nullptr, nullptr) 239 artifact.chunk(transform3, nullptr, nullptr, nullptr)
238 .rectDrawing(FloatRect(0, 0, 300, 200), Color::white); 240 .rectDrawing(FloatRect(0, 0, 300, 200), Color::white);
239 update(artifact.build()); 241 update(artifact.build());
240 242
241 ASSERT_EQ(1u, contentLayerCount()); 243 ASSERT_EQ(1u, contentLayerCount());
242 const cc::Layer* layer = contentLayerAt(0); 244 const cc::Layer* layer = contentLayerAt(0);
243 EXPECT_THAT(layer->GetPicture(), 245 EXPECT_THAT(layer->GetPicture(),
244 Pointee(drawsRectangle(FloatRect(0, 0, 300, 200), Color::white))); 246 Pointee(drawsRectangle(FloatRect(0, 0, 300, 200), Color::white)));
245 247
246 // The leaf transform node should flatten its inherited transform node 248 // The leaf transform node should flatten its inherited transform node
247 // if and only if the intermediate rotation transform in the Blink tree 249 // if and only if the intermediate rotation transform in the Blink tree
(...skipping 25 matching lines...) Expand all
273 RefPtr<TransformPaintPropertyNode> transform2 = TransformPaintPropertyNode:: create( 275 RefPtr<TransformPaintPropertyNode> transform2 = TransformPaintPropertyNode:: create(
274 transform1, TransformationMatrix(), FloatPoint3D(), false, 1); 276 transform1, TransformationMatrix(), FloatPoint3D(), false, 1);
275 // Extends the 3D rendering context of transform2. 277 // Extends the 3D rendering context of transform2.
276 RefPtr<TransformPaintPropertyNode> transform3 = TransformPaintPropertyNode:: create( 278 RefPtr<TransformPaintPropertyNode> transform3 = TransformPaintPropertyNode:: create(
277 transform2, TransformationMatrix(), FloatPoint3D(), false, 1); 279 transform2, TransformationMatrix(), FloatPoint3D(), false, 1);
278 // Establishes a 3D rendering context distinct from transform2. 280 // Establishes a 3D rendering context distinct from transform2.
279 RefPtr<TransformPaintPropertyNode> transform4 = TransformPaintPropertyNode:: create( 281 RefPtr<TransformPaintPropertyNode> transform4 = TransformPaintPropertyNode:: create(
280 transform2, TransformationMatrix(), FloatPoint3D(), false, 2); 282 transform2, TransformationMatrix(), FloatPoint3D(), false, 2);
281 283
282 TestPaintArtifact artifact; 284 TestPaintArtifact artifact;
283 artifact.chunk(transform1, nullptr, dummyRootEffect()) 285 artifact.chunk(transform1, nullptr, dummyRootEffect(), nullptr)
284 .rectDrawing(FloatRect(0, 0, 300, 200), Color::white); 286 .rectDrawing(FloatRect(0, 0, 300, 200), Color::white);
285 artifact.chunk(transform2, nullptr, dummyRootEffect()) 287 artifact.chunk(transform2, nullptr, dummyRootEffect(), nullptr)
286 .rectDrawing(FloatRect(0, 0, 300, 200), Color::lightGray); 288 .rectDrawing(FloatRect(0, 0, 300, 200), Color::lightGray);
287 artifact.chunk(transform3, nullptr, dummyRootEffect()) 289 artifact.chunk(transform3, nullptr, dummyRootEffect(), nullptr)
288 .rectDrawing(FloatRect(0, 0, 300, 200), Color::darkGray); 290 .rectDrawing(FloatRect(0, 0, 300, 200), Color::darkGray);
289 artifact.chunk(transform4, nullptr, dummyRootEffect()) 291 artifact.chunk(transform4, nullptr, dummyRootEffect(), nullptr)
290 .rectDrawing(FloatRect(0, 0, 300, 200), Color::black); 292 .rectDrawing(FloatRect(0, 0, 300, 200), Color::black);
291 update(artifact.build()); 293 update(artifact.build());
292 294
293 ASSERT_EQ(4u, contentLayerCount()); 295 ASSERT_EQ(4u, contentLayerCount());
294 296
295 // The white layer is not 3D sorted. 297 // The white layer is not 3D sorted.
296 const cc::Layer* whiteLayer = contentLayerAt(0); 298 const cc::Layer* whiteLayer = contentLayerAt(0);
297 EXPECT_THAT(whiteLayer->GetPicture(), 299 EXPECT_THAT(whiteLayer->GetPicture(),
298 Pointee(drawsRectangle(FloatRect(0, 0, 300, 200), Color::white))); 300 Pointee(drawsRectangle(FloatRect(0, 0, 300, 200), Color::white)));
299 int whiteSortingContextId = transformNode(whiteLayer).sorting_context_id; 301 int whiteSortingContextId = transformNode(whiteLayer).sorting_context_id;
(...skipping 28 matching lines...) Expand all
328 EXPECT_NE(0, blackSortingContextId); 330 EXPECT_NE(0, blackSortingContextId);
329 EXPECT_NE(lightGraySortingContextId, blackSortingContextId); 331 EXPECT_NE(lightGraySortingContextId, blackSortingContextId);
330 } 332 }
331 333
332 TEST_F(PaintArtifactCompositorTestWithPropertyTrees, OneClip) 334 TEST_F(PaintArtifactCompositorTestWithPropertyTrees, OneClip)
333 { 335 {
334 RefPtr<ClipPaintPropertyNode> clip = ClipPaintPropertyNode::create( 336 RefPtr<ClipPaintPropertyNode> clip = ClipPaintPropertyNode::create(
335 nullptr, nullptr, FloatRoundedRect(100, 100, 300, 200)); 337 nullptr, nullptr, FloatRoundedRect(100, 100, 300, 200));
336 338
337 TestPaintArtifact artifact; 339 TestPaintArtifact artifact;
338 artifact.chunk(nullptr, clip, nullptr) 340 artifact.chunk(nullptr, clip, nullptr, nullptr)
339 .rectDrawing(FloatRect(220, 80, 300, 200), Color::black); 341 .rectDrawing(FloatRect(220, 80, 300, 200), Color::black);
340 update(artifact.build()); 342 update(artifact.build());
341 343
342 ASSERT_EQ(1u, contentLayerCount()); 344 ASSERT_EQ(1u, contentLayerCount());
343 const cc::Layer* layer = contentLayerAt(0); 345 const cc::Layer* layer = contentLayerAt(0);
344 EXPECT_THAT(layer->GetPicture(), 346 EXPECT_THAT(layer->GetPicture(),
345 Pointee(drawsRectangle(FloatRect(0, 0, 300, 200), Color::black))); 347 Pointee(drawsRectangle(FloatRect(0, 0, 300, 200), Color::black)));
346 EXPECT_EQ(translation(220, 80), layer->screen_space_transform()); 348 EXPECT_EQ(translation(220, 80), layer->screen_space_transform());
347 349
348 const cc::ClipNode* clipNode = propertyTrees().clip_tree.Node(layer->clip_tr ee_index()); 350 const cc::ClipNode* clipNode = propertyTrees().clip_tree.Node(layer->clip_tr ee_index());
349 EXPECT_TRUE(clipNode->applies_local_clip); 351 EXPECT_TRUE(clipNode->applies_local_clip);
350 EXPECT_TRUE(clipNode->layers_are_clipped); 352 EXPECT_TRUE(clipNode->layers_are_clipped);
351 EXPECT_EQ(gfx::RectF(100, 100, 300, 200), clipNode->clip); 353 EXPECT_EQ(gfx::RectF(100, 100, 300, 200), clipNode->clip);
352 } 354 }
353 355
354 TEST_F(PaintArtifactCompositorTestWithPropertyTrees, NestedClips) 356 TEST_F(PaintArtifactCompositorTestWithPropertyTrees, NestedClips)
355 { 357 {
356 RefPtr<ClipPaintPropertyNode> clip1 = ClipPaintPropertyNode::create( 358 RefPtr<ClipPaintPropertyNode> clip1 = ClipPaintPropertyNode::create(
357 nullptr, nullptr, FloatRoundedRect(100, 100, 700, 700)); 359 nullptr, nullptr, FloatRoundedRect(100, 100, 700, 700));
358 RefPtr<ClipPaintPropertyNode> clip2 = ClipPaintPropertyNode::create( 360 RefPtr<ClipPaintPropertyNode> clip2 = ClipPaintPropertyNode::create(
359 clip1, nullptr, FloatRoundedRect(200, 200, 700, 100)); 361 clip1, nullptr, FloatRoundedRect(200, 200, 700, 100));
360 362
361 TestPaintArtifact artifact; 363 TestPaintArtifact artifact;
362 artifact.chunk(nullptr, clip1, dummyRootEffect()) 364 artifact.chunk(nullptr, clip1, dummyRootEffect(), nullptr)
363 .rectDrawing(FloatRect(300, 350, 100, 100), Color::white); 365 .rectDrawing(FloatRect(300, 350, 100, 100), Color::white);
364 artifact.chunk(nullptr, clip2, dummyRootEffect()) 366 artifact.chunk(nullptr, clip2, dummyRootEffect(), nullptr)
365 .rectDrawing(FloatRect(300, 350, 100, 100), Color::lightGray); 367 .rectDrawing(FloatRect(300, 350, 100, 100), Color::lightGray);
366 artifact.chunk(nullptr, clip1, dummyRootEffect()) 368 artifact.chunk(nullptr, clip1, dummyRootEffect(), nullptr)
367 .rectDrawing(FloatRect(300, 350, 100, 100), Color::darkGray); 369 .rectDrawing(FloatRect(300, 350, 100, 100), Color::darkGray);
368 artifact.chunk(nullptr, clip2, dummyRootEffect()) 370 artifact.chunk(nullptr, clip2, dummyRootEffect(), nullptr)
369 .rectDrawing(FloatRect(300, 350, 100, 100), Color::black); 371 .rectDrawing(FloatRect(300, 350, 100, 100), Color::black);
370 update(artifact.build()); 372 update(artifact.build());
371 373
372 ASSERT_EQ(4u, contentLayerCount()); 374 ASSERT_EQ(4u, contentLayerCount());
373 375
374 const cc::Layer* whiteLayer = contentLayerAt(0); 376 const cc::Layer* whiteLayer = contentLayerAt(0);
375 EXPECT_THAT(whiteLayer->GetPicture(), 377 EXPECT_THAT(whiteLayer->GetPicture(),
376 Pointee(drawsRectangle(FloatRect(0, 0, 100, 100), Color::white))); 378 Pointee(drawsRectangle(FloatRect(0, 0, 100, 100), Color::white)));
377 EXPECT_EQ(translation(300, 350), whiteLayer->screen_space_transform()); 379 EXPECT_EQ(translation(300, 350), whiteLayer->screen_space_transform());
378 380
(...skipping 29 matching lines...) Expand all
408 TEST_F(PaintArtifactCompositorTestWithPropertyTrees, DeeplyNestedClips) 410 TEST_F(PaintArtifactCompositorTestWithPropertyTrees, DeeplyNestedClips)
409 { 411 {
410 Vector<RefPtr<ClipPaintPropertyNode>> clips; 412 Vector<RefPtr<ClipPaintPropertyNode>> clips;
411 for (unsigned i = 1; i <= 10; i++) { 413 for (unsigned i = 1; i <= 10; i++) {
412 clips.append(ClipPaintPropertyNode::create( 414 clips.append(ClipPaintPropertyNode::create(
413 clips.isEmpty() ? nullptr : clips.last(), 415 clips.isEmpty() ? nullptr : clips.last(),
414 nullptr, FloatRoundedRect(5 * i, 0, 100, 200 - 10 * i))); 416 nullptr, FloatRoundedRect(5 * i, 0, 100, 200 - 10 * i)));
415 } 417 }
416 418
417 TestPaintArtifact artifact; 419 TestPaintArtifact artifact;
418 artifact.chunk(nullptr, clips.last(), dummyRootEffect()) 420 artifact.chunk(nullptr, clips.last(), dummyRootEffect(), nullptr)
419 .rectDrawing(FloatRect(0, 0, 200, 200), Color::white); 421 .rectDrawing(FloatRect(0, 0, 200, 200), Color::white);
420 update(artifact.build()); 422 update(artifact.build());
421 423
422 // Check the drawing layer. 424 // Check the drawing layer.
423 ASSERT_EQ(1u, contentLayerCount()); 425 ASSERT_EQ(1u, contentLayerCount());
424 const cc::Layer* drawingLayer = contentLayerAt(0); 426 const cc::Layer* drawingLayer = contentLayerAt(0);
425 EXPECT_THAT(drawingLayer->GetPicture(), 427 EXPECT_THAT(drawingLayer->GetPicture(),
426 Pointee(drawsRectangle(FloatRect(0, 0, 200, 200), Color::white))); 428 Pointee(drawsRectangle(FloatRect(0, 0, 200, 200), Color::white)));
427 EXPECT_EQ(gfx::Transform(), drawingLayer->screen_space_transform()); 429 EXPECT_EQ(gfx::Transform(), drawingLayer->screen_space_transform());
428 430
(...skipping 11 matching lines...) Expand all
440 TEST_F(PaintArtifactCompositorTestWithPropertyTrees, SiblingClips) 442 TEST_F(PaintArtifactCompositorTestWithPropertyTrees, SiblingClips)
441 { 443 {
442 RefPtr<ClipPaintPropertyNode> commonClip = ClipPaintPropertyNode::create( 444 RefPtr<ClipPaintPropertyNode> commonClip = ClipPaintPropertyNode::create(
443 nullptr, nullptr, FloatRoundedRect(0, 0, 800, 600)); 445 nullptr, nullptr, FloatRoundedRect(0, 0, 800, 600));
444 RefPtr<ClipPaintPropertyNode> clip1 = ClipPaintPropertyNode::create( 446 RefPtr<ClipPaintPropertyNode> clip1 = ClipPaintPropertyNode::create(
445 commonClip, nullptr, FloatRoundedRect(0, 0, 400, 600)); 447 commonClip, nullptr, FloatRoundedRect(0, 0, 400, 600));
446 RefPtr<ClipPaintPropertyNode> clip2 = ClipPaintPropertyNode::create( 448 RefPtr<ClipPaintPropertyNode> clip2 = ClipPaintPropertyNode::create(
447 commonClip, nullptr, FloatRoundedRect(400, 0, 400, 600)); 449 commonClip, nullptr, FloatRoundedRect(400, 0, 400, 600));
448 450
449 TestPaintArtifact artifact; 451 TestPaintArtifact artifact;
450 artifact.chunk(nullptr, clip1, dummyRootEffect()) 452 artifact.chunk(nullptr, clip1, dummyRootEffect(), nullptr)
451 .rectDrawing(FloatRect(0, 0, 640, 480), Color::white); 453 .rectDrawing(FloatRect(0, 0, 640, 480), Color::white);
452 artifact.chunk(nullptr, clip2, dummyRootEffect()) 454 artifact.chunk(nullptr, clip2, dummyRootEffect(), nullptr)
453 .rectDrawing(FloatRect(0, 0, 640, 480), Color::black); 455 .rectDrawing(FloatRect(0, 0, 640, 480), Color::black);
454 update(artifact.build()); 456 update(artifact.build());
455 457
456 ASSERT_EQ(2u, contentLayerCount()); 458 ASSERT_EQ(2u, contentLayerCount());
457 459
458 const cc::Layer* whiteLayer = contentLayerAt(0); 460 const cc::Layer* whiteLayer = contentLayerAt(0);
459 EXPECT_THAT(whiteLayer->GetPicture(), 461 EXPECT_THAT(whiteLayer->GetPicture(),
460 Pointee(drawsRectangle(FloatRect(0, 0, 640, 480), Color::white))); 462 Pointee(drawsRectangle(FloatRect(0, 0, 640, 480), Color::white)));
461 EXPECT_EQ(gfx::Transform(), whiteLayer->screen_space_transform()); 463 EXPECT_EQ(gfx::Transform(), whiteLayer->screen_space_transform());
462 const cc::ClipNode* whiteClip = propertyTrees().clip_tree.Node(whiteLayer->c lip_tree_index()); 464 const cc::ClipNode* whiteClip = propertyTrees().clip_tree.Node(whiteLayer->c lip_tree_index());
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
495 EXPECT_EQ(translation(50, 100), layer->screen_space_transform()); 497 EXPECT_EQ(translation(50, 100), layer->screen_space_transform());
496 } 498 }
497 499
498 TEST_F(PaintArtifactCompositorTestWithPropertyTrees, EffectTreeConversion) 500 TEST_F(PaintArtifactCompositorTestWithPropertyTrees, EffectTreeConversion)
499 { 501 {
500 RefPtr<EffectPaintPropertyNode> effect1 = EffectPaintPropertyNode::create(du mmyRootEffect(), 0.5); 502 RefPtr<EffectPaintPropertyNode> effect1 = EffectPaintPropertyNode::create(du mmyRootEffect(), 0.5);
501 RefPtr<EffectPaintPropertyNode> effect2 = EffectPaintPropertyNode::create(ef fect1, 0.3); 503 RefPtr<EffectPaintPropertyNode> effect2 = EffectPaintPropertyNode::create(ef fect1, 0.3);
502 RefPtr<EffectPaintPropertyNode> effect3 = EffectPaintPropertyNode::create(du mmyRootEffect(), 0.2); 504 RefPtr<EffectPaintPropertyNode> effect3 = EffectPaintPropertyNode::create(du mmyRootEffect(), 0.2);
503 505
504 TestPaintArtifact artifact; 506 TestPaintArtifact artifact;
505 artifact.chunk(nullptr, nullptr, effect2.get()) 507 artifact.chunk(nullptr, nullptr, effect2.get(), nullptr)
506 .rectDrawing(FloatRect(0, 0, 100, 100), Color::white); 508 .rectDrawing(FloatRect(0, 0, 100, 100), Color::white);
507 artifact.chunk(nullptr, nullptr, effect1.get()) 509 artifact.chunk(nullptr, nullptr, effect1.get(), nullptr)
508 .rectDrawing(FloatRect(0, 0, 100, 100), Color::white); 510 .rectDrawing(FloatRect(0, 0, 100, 100), Color::white);
509 artifact.chunk(nullptr, nullptr, effect3.get()) 511 artifact.chunk(nullptr, nullptr, effect3.get(), nullptr)
510 .rectDrawing(FloatRect(0, 0, 100, 100), Color::white); 512 .rectDrawing(FloatRect(0, 0, 100, 100), Color::white);
511 update(artifact.build()); 513 update(artifact.build());
512 514
513 ASSERT_EQ(3u, contentLayerCount()); 515 ASSERT_EQ(3u, contentLayerCount());
514 516
515 const cc::EffectTree& effectTree = propertyTrees().effect_tree; 517 const cc::EffectTree& effectTree = propertyTrees().effect_tree;
516 // Node #0 reserved for null; #1 for root render surface; #2 for dummyRootEf fect, 518 // Node #0 reserved for null; #1 for root render surface; #2 for dummyRootEf fect,
517 // plus 3 nodes for those created by this test. 519 // plus 3 nodes for those created by this test.
518 ASSERT_EQ(6u, effectTree.size()); 520 ASSERT_EQ(6u, effectTree.size());
519 521
(...skipping 10 matching lines...) Expand all
530 532
531 const cc::EffectNode& convertedEffect3 = *effectTree.Node(5); 533 const cc::EffectNode& convertedEffect3 = *effectTree.Node(5);
532 EXPECT_EQ(convertedDummyRootEffect.id, convertedEffect3.parent_id); 534 EXPECT_EQ(convertedDummyRootEffect.id, convertedEffect3.parent_id);
533 EXPECT_FLOAT_EQ(0.2, convertedEffect3.opacity); 535 EXPECT_FLOAT_EQ(0.2, convertedEffect3.opacity);
534 536
535 EXPECT_EQ(convertedEffect2.id, contentLayerAt(0)->effect_tree_index()); 537 EXPECT_EQ(convertedEffect2.id, contentLayerAt(0)->effect_tree_index());
536 EXPECT_EQ(convertedEffect1.id, contentLayerAt(1)->effect_tree_index()); 538 EXPECT_EQ(convertedEffect1.id, contentLayerAt(1)->effect_tree_index());
537 EXPECT_EQ(convertedEffect3.id, contentLayerAt(2)->effect_tree_index()); 539 EXPECT_EQ(convertedEffect3.id, contentLayerAt(2)->effect_tree_index());
538 } 540 }
539 541
542 TEST_F(PaintArtifactCompositorTestWithPropertyTrees, OneScrollNode)
543 {
544 RefPtr<TransformPaintPropertyNode> scrollTranslation = TransformPaintPropert yNode::create(
545 nullptr, TransformationMatrix().translate(7, 9), FloatPoint3D());
546 RefPtr<ScrollPaintPropertyNode> scroll = ScrollPaintPropertyNode::create(
547 nullptr, scrollTranslation, FloatSize(), FloatSize(), true, true);
548
549 TestPaintArtifact artifact;
550 artifact.chunk(scrollTranslation, nullptr, nullptr, scroll)
551 .rectDrawing(FloatRect(11, 13, 17, 19), Color::white);
552 update(artifact.build());
553
554 const cc::ScrollTree& scrollTree = propertyTrees().scroll_tree;
555 // Node #0 reserved for null; #1 for root render surface.
556 ASSERT_EQ(3u, scrollTree.size());
557 const cc::ScrollNode& scrollNode = *scrollTree.Node(2);
558 EXPECT_EQ(1, scrollNode.parent_id);
559
560 const cc::TransformTree& transformTree = propertyTrees().transform_tree;
561 const cc::TransformNode& transformNode = *transformTree.Node(scrollNode.tran sform_id);
562 // TransformNode no longer contain the scroll translation as a transform but instead as a scroll offset.
563 EXPECT_TRUE(transformNode.local.IsIdentity());
564 EXPECT_EQ(gfx::ScrollOffset(7, -9), transformNode.scroll_offset);
565 }
566
540 } // namespace 567 } // namespace
541 } // namespace blink 568 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698