|
|
Chromium Code Reviews|
Created:
4 years, 5 months ago by jbroman Modified:
4 years, 5 months ago CC:
ajuma+watch_chromium.org, blink-reviews, blink-reviews-platform-graphics_chromium.org, Rik, chromium-reviews, danakj+watch_chromium.org, dshwang, drott+blinkwatch_chromium.org, krit, f(malita), jbroman, Justin Novosad, pdr+graphicswatchlist_chromium.org, rwlbuis, Stephen Chennney Base URL:
https://chromium.googlesource.com/chromium/src.git@clip-tree-refactor Target Ref:
refs/pending/heads/master Project:
chromium Visibility:
Public. |
Description[SPv2] Build simple cc clip trees from Blink clip trees.
This builds simple compositor clip trees directly from their Blink
counterparts. It makes equivalents of all existing SPv2 clip tests pass. It
is, however, still missing some important features, like rounded rects,
which it currently squares.
BUG=563667
Committed: https://crrev.com/f22bc98bed773637f74a18af787bcccacc6bc74b
Cr-Commit-Position: refs/heads/master@{#404213}
Patch Set 1 #Patch Set 2 : rebase #
Messages
Total messages: 17 (8 generated)
jbroman@chromium.org changed reviewers: + pdr@chromium.org, trchen@chromium.org
Depends on this refactor: https://codereview.chromium.org/2122973002
This is pretty awesome! LGTM
The CQ bit was checked by jbroman@chromium.org
CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/v2/patch-status/codereview.chromium.or...
The CQ bit was unchecked by commit-bot@chromium.org
Failed to apply patch for
third_party/WebKit/Source/platform/graphics/compositing/PaintArtifactCompositorTest.cpp:
While running git apply --index -3 -p1;
error: patch failed:
third_party/WebKit/Source/platform/graphics/compositing/PaintArtifactCompositorTest.cpp:518
Falling back to three-way merge...
Applied patch to
'third_party/WebKit/Source/platform/graphics/compositing/PaintArtifactCompositorTest.cpp'
with conflicts.
U
third_party/WebKit/Source/platform/graphics/compositing/PaintArtifactCompositorTest.cpp
Patch:
third_party/WebKit/Source/platform/graphics/compositing/PaintArtifactCompositorTest.cpp
Index:
third_party/WebKit/Source/platform/graphics/compositing/PaintArtifactCompositorTest.cpp
diff --git
a/third_party/WebKit/Source/platform/graphics/compositing/PaintArtifactCompositorTest.cpp
b/third_party/WebKit/Source/platform/graphics/compositing/PaintArtifactCompositorTest.cpp
index
457411c1749dff58aee7c3132538a900ec05b1a6..4d6570855ee39266303a0884dbff1bb5c94d8dc8
100644
---
a/third_party/WebKit/Source/platform/graphics/compositing/PaintArtifactCompositorTest.cpp
+++
b/third_party/WebKit/Source/platform/graphics/compositing/PaintArtifactCompositorTest.cpp
@@ -518,6 +518,156 @@ TEST_F(PaintArtifactCompositorTestWithPropertyTrees,
TransformCombining)
contentLayerAt(1)->transform_tree_index());
}
+TEST_F(PaintArtifactCompositorTestWithPropertyTrees, OneClip)
+{
+ RefPtr<ClipPaintPropertyNode> clip = ClipPaintPropertyNode::create(
+ nullptr, FloatRoundedRect(100, 100, 300, 200));
+
+ TestPaintArtifact artifact;
+ artifact.chunk(nullptr, clip, nullptr)
+ .rectDrawing(FloatRect(220, 80, 300, 200), Color::black);
+ update(artifact.build());
+
+ ASSERT_EQ(1u, contentLayerCount());
+ const cc::Layer* layer = contentLayerAt(0);
+ EXPECT_THAT(layer->GetPicture(),
+ Pointee(drawsRectangle(FloatRect(0, 0, 300, 200), Color::black)));
+ EXPECT_EQ(translation(220, 80), layer->screen_space_transform());
+
+ const cc::ClipNode* clipNode =
propertyTrees().clip_tree.Node(layer->clip_tree_index());
+ EXPECT_TRUE(clipNode->data.applies_local_clip);
+ EXPECT_TRUE(clipNode->data.layers_are_clipped);
+ EXPECT_EQ(gfx::RectF(100, 100, 300, 200), clipNode->data.clip);
+}
+
+TEST_F(PaintArtifactCompositorTestWithPropertyTrees, NestedClips)
+{
+ RefPtr<ClipPaintPropertyNode> clip1 = ClipPaintPropertyNode::create(
+ nullptr, FloatRoundedRect(100, 100, 700, 700));
+ RefPtr<ClipPaintPropertyNode> clip2 = ClipPaintPropertyNode::create(
+ nullptr, FloatRoundedRect(200, 200, 700, 100), clip1);
+
+ TestPaintArtifact artifact;
+ artifact.chunk(nullptr, clip1, nullptr)
+ .rectDrawing(FloatRect(300, 350, 100, 100), Color::white);
+ artifact.chunk(nullptr, clip2, nullptr)
+ .rectDrawing(FloatRect(300, 350, 100, 100), Color::lightGray);
+ artifact.chunk(nullptr, clip1, nullptr)
+ .rectDrawing(FloatRect(300, 350, 100, 100), Color::darkGray);
+ artifact.chunk(nullptr, clip2, nullptr)
+ .rectDrawing(FloatRect(300, 350, 100, 100), Color::black);
+ update(artifact.build());
+
+ ASSERT_EQ(4u, contentLayerCount());
+
+ const cc::Layer* whiteLayer = contentLayerAt(0);
+ EXPECT_THAT(whiteLayer->GetPicture(),
+ Pointee(drawsRectangle(FloatRect(0, 0, 100, 100), Color::white)));
+ EXPECT_EQ(translation(300, 350), whiteLayer->screen_space_transform());
+
+ const cc::Layer* lightGrayLayer = contentLayerAt(1);
+ EXPECT_THAT(lightGrayLayer->GetPicture(),
+ Pointee(drawsRectangle(FloatRect(0, 0, 100, 100), Color::lightGray)));
+ EXPECT_EQ(translation(300, 350), lightGrayLayer->screen_space_transform());
+
+ const cc::Layer* darkGrayLayer = contentLayerAt(2);
+ EXPECT_THAT(darkGrayLayer->GetPicture(),
+ Pointee(drawsRectangle(FloatRect(0, 0, 100, 100), Color::darkGray)));
+ EXPECT_EQ(translation(300, 350), darkGrayLayer->screen_space_transform());
+
+ const cc::Layer* blackLayer = contentLayerAt(3);
+ EXPECT_THAT(blackLayer->GetPicture(),
+ Pointee(drawsRectangle(FloatRect(0, 0, 100, 100), Color::black)));
+ EXPECT_EQ(translation(300, 350), blackLayer->screen_space_transform());
+
+ EXPECT_EQ(whiteLayer->clip_tree_index(), darkGrayLayer->clip_tree_index());
+ const cc::ClipNode* outerClip =
propertyTrees().clip_tree.Node(whiteLayer->clip_tree_index());
+ EXPECT_TRUE(outerClip->data.applies_local_clip);
+ EXPECT_TRUE(outerClip->data.layers_are_clipped);
+ EXPECT_EQ(gfx::RectF(100, 100, 700, 700), outerClip->data.clip);
+
+ EXPECT_EQ(lightGrayLayer->clip_tree_index(),
blackLayer->clip_tree_index());
+ const cc::ClipNode* innerClip =
propertyTrees().clip_tree.Node(blackLayer->clip_tree_index());
+ EXPECT_TRUE(innerClip->data.applies_local_clip);
+ EXPECT_TRUE(innerClip->data.layers_are_clipped);
+ EXPECT_EQ(gfx::RectF(200, 200, 700, 100), innerClip->data.clip);
+ EXPECT_EQ(outerClip->id, innerClip->parent_id);
+}
+
+TEST_F(PaintArtifactCompositorTestWithPropertyTrees, DeeplyNestedClips)
+{
+ Vector<RefPtr<ClipPaintPropertyNode>> clips;
+ for (unsigned i = 1; i <= 10; i++) {
+ clips.append(ClipPaintPropertyNode::create(
+ nullptr, FloatRoundedRect(5 * i, 0, 100, 200 - 10 * i),
+ clips.isEmpty() ? nullptr : clips.last()));
+ }
+
+ TestPaintArtifact artifact;
+ artifact.chunk(nullptr, clips.last(), nullptr)
+ .rectDrawing(FloatRect(0, 0, 200, 200), Color::white);
+ update(artifact.build());
+
+ // Check the drawing layer.
+ ASSERT_EQ(1u, contentLayerCount());
+ const cc::Layer* drawingLayer = contentLayerAt(0);
+ EXPECT_THAT(drawingLayer->GetPicture(),
+ Pointee(drawsRectangle(FloatRect(0, 0, 200, 200), Color::white)));
+ EXPECT_EQ(gfx::Transform(), drawingLayer->screen_space_transform());
+
+ // Check the clip nodes.
+ const cc::ClipNode* clipNode =
propertyTrees().clip_tree.Node(drawingLayer->clip_tree_index());
+ for (auto it = clips.rbegin(); it != clips.rend(); ++it) {
+ const ClipPaintPropertyNode* paintClipNode = it->get();
+ EXPECT_TRUE(clipNode->data.applies_local_clip);
+ EXPECT_TRUE(clipNode->data.layers_are_clipped);
+ EXPECT_EQ(paintClipNode->clipRect().rect(), clipNode->data.clip);
+ clipNode = propertyTrees().clip_tree.Node(clipNode->parent_id);
+ }
+}
+
+TEST_F(PaintArtifactCompositorTestWithPropertyTrees, SiblingClips)
+{
+ RefPtr<ClipPaintPropertyNode> commonClip = ClipPaintPropertyNode::create(
+ nullptr, FloatRoundedRect(0, 0, 800, 600));
+ RefPtr<ClipPaintPropertyNode> clip1 = ClipPaintPropertyNode::create(
+ nullptr, FloatRoundedRect(0, 0, 400, 600), commonClip);
+ RefPtr<ClipPaintPropertyNode> clip2 = ClipPaintPropertyNode::create(
+ nullptr, FloatRoundedRect(400, 0, 400, 600), commonClip);
+
+ TestPaintArtifact artifact;
+ artifact.chunk(nullptr, clip1, nullptr)
+ .rectDrawing(FloatRect(0, 0, 640, 480), Color::white);
+ artifact.chunk(nullptr, clip2, nullptr)
+ .rectDrawing(FloatRect(0, 0, 640, 480), Color::black);
+ update(artifact.build());
+
+ ASSERT_EQ(2u, contentLayerCount());
+
+ const cc::Layer* whiteLayer = contentLayerAt(0);
+ EXPECT_THAT(whiteLayer->GetPicture(),
+ Pointee(drawsRectangle(FloatRect(0, 0, 640, 480), Color::white)));
+ EXPECT_EQ(gfx::Transform(), whiteLayer->screen_space_transform());
+ const cc::ClipNode* whiteClip =
propertyTrees().clip_tree.Node(whiteLayer->clip_tree_index());
+ EXPECT_TRUE(whiteClip->data.applies_local_clip);
+ EXPECT_TRUE(whiteClip->data.layers_are_clipped);
+ ASSERT_EQ(gfx::RectF(0, 0, 400, 600), whiteClip->data.clip);
+
+ const cc::Layer* blackLayer = contentLayerAt(1);
+ EXPECT_THAT(blackLayer->GetPicture(),
+ Pointee(drawsRectangle(FloatRect(0, 0, 640, 480), Color::black)));
+ EXPECT_EQ(gfx::Transform(), blackLayer->screen_space_transform());
+ const cc::ClipNode* blackClip =
propertyTrees().clip_tree.Node(blackLayer->clip_tree_index());
+ EXPECT_TRUE(blackClip->data.applies_local_clip);
+ EXPECT_TRUE(blackClip->data.layers_are_clipped);
+ ASSERT_EQ(gfx::RectF(400, 0, 400, 600), blackClip->data.clip);
+
+ EXPECT_EQ(whiteClip->parent_id, blackClip->parent_id);
+ const cc::ClipNode* commonClipNode =
propertyTrees().clip_tree.Node(whiteClip->parent_id);
+ EXPECT_TRUE(commonClipNode->data.applies_local_clip);
+ EXPECT_TRUE(commonClipNode->data.layers_are_clipped);
+ ASSERT_EQ(gfx::RectF(0, 0, 800, 600), commonClipNode->data.clip);
+}
} // namespace
} // namespace blink
The CQ bit was checked by jbroman@chromium.org
The patchset sent to the CQ was uploaded after l-g-t-m from pdr@chromium.org Link to the patchset: https://codereview.chromium.org/2124753004/#ps20001 (title: "rebase")
CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/v2/patch-status/codereview.chromium.or...
The CQ bit was unchecked by commit-bot@chromium.org
Try jobs failed on following builders: linux_chromium_chromeos_ozone_rel_ng on master.tryserver.chromium.linux (JOB_FAILED, no build URL) linux_chromium_compile_dbg_ng on master.tryserver.chromium.linux (JOB_FAILED, no build URL)
The CQ bit was checked by jbroman@chromium.org
CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/v2/patch-status/codereview.chromium.or...
Message was sent while issue was closed.
Committed patchset #2 (id:20001)
Message was sent while issue was closed.
Description was changed from ========== [SPv2] Build simple cc clip trees from Blink clip trees. This builds simple compositor clip trees directly from their Blink counterparts. It makes equivalents of all existing SPv2 clip tests pass. It is, however, still missing some important features, like rounded rects, which it currently squares. BUG=563667 ========== to ========== [SPv2] Build simple cc clip trees from Blink clip trees. This builds simple compositor clip trees directly from their Blink counterparts. It makes equivalents of all existing SPv2 clip tests pass. It is, however, still missing some important features, like rounded rects, which it currently squares. BUG=563667 Committed: https://crrev.com/f22bc98bed773637f74a18af787bcccacc6bc74b Cr-Commit-Position: refs/heads/master@{#404213} ==========
Message was sent while issue was closed.
Patchset 2 (id:??) landed as https://crrev.com/f22bc98bed773637f74a18af787bcccacc6bc74b Cr-Commit-Position: refs/heads/master@{#404213} |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
