OLD | NEW |
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 <memory> | 7 #include <memory> |
8 | 8 |
9 #include "base/test/test_simple_task_runner.h" | 9 #include "base/test/test_simple_task_runner.h" |
10 #include "base/threading/thread_task_runner_handle.h" | 10 #include "base/threading/thread_task_runner_handle.h" |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
112 return m_webLayerTreeView->layerTreeHost() | 112 return m_webLayerTreeView->layerTreeHost() |
113 ->property_trees() | 113 ->property_trees() |
114 ->element_id_to_scroll_node_index[elementId]; | 114 ->element_id_to_scroll_node_index[elementId]; |
115 } | 115 } |
116 | 116 |
117 const cc::TransformNode& transformNode(const cc::Layer* layer) { | 117 const cc::TransformNode& transformNode(const cc::Layer* layer) { |
118 return *propertyTrees().transform_tree.Node(layer->transform_tree_index()); | 118 return *propertyTrees().transform_tree.Node(layer->transform_tree_index()); |
119 } | 119 } |
120 | 120 |
121 void update(const PaintArtifact& artifact) { | 121 void update(const PaintArtifact& artifact) { |
122 m_paintArtifactCompositor->update(artifact, nullptr, false); | 122 CompositorElementIdSet elementIds; |
| 123 update(artifact, elementIds); |
| 124 } |
| 125 |
| 126 void update(const PaintArtifact& artifact, |
| 127 CompositorElementIdSet& elementIds) { |
| 128 m_paintArtifactCompositor->update(artifact, nullptr, false, elementIds); |
123 m_webLayerTreeView->layerTreeHost()->LayoutAndUpdateLayers(); | 129 m_webLayerTreeView->layerTreeHost()->LayoutAndUpdateLayers(); |
124 } | 130 } |
125 | 131 |
126 cc::Layer* rootLayer() { return m_paintArtifactCompositor->rootLayer(); } | 132 cc::Layer* rootLayer() { return m_paintArtifactCompositor->rootLayer(); } |
127 | 133 |
128 size_t contentLayerCount() { | 134 size_t contentLayerCount() { |
129 return m_paintArtifactCompositor->getExtraDataForTesting() | 135 return m_paintArtifactCompositor->getExtraDataForTesting() |
130 ->contentLayers.size(); | 136 ->contentLayers.size(); |
131 } | 137 } |
132 | 138 |
(...skipping 1440 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1573 PaintChunk chunk3; | 1579 PaintChunk chunk3; |
1574 chunk3.properties.propertyTreeState = chunk1.properties.propertyTreeState; | 1580 chunk3.properties.propertyTreeState = chunk1.properties.propertyTreeState; |
1575 chunk3.bounds = FloatRect(0, 0, 50, 60); | 1581 chunk3.bounds = FloatRect(0, 0, 50, 60); |
1576 chunk3.knownToBeOpaque = true; | 1582 chunk3.knownToBeOpaque = true; |
1577 pendingLayer.merge(PaintArtifactCompositor::PendingLayer(chunk3, false)); | 1583 pendingLayer.merge(PaintArtifactCompositor::PendingLayer(chunk3, false)); |
1578 | 1584 |
1579 // Chunk 3 covers the entire layer, so now it's opaque. | 1585 // Chunk 3 covers the entire layer, so now it's opaque. |
1580 EXPECT_TRUE(pendingLayer.knownToBeOpaque); | 1586 EXPECT_TRUE(pendingLayer.knownToBeOpaque); |
1581 } | 1587 } |
1582 | 1588 |
| 1589 PassRefPtr<EffectPaintPropertyNode> createSampleEffectNodeWithElementId() { |
| 1590 CompositorElementId expectedCompositorElementId(2, 0); |
| 1591 float opacity = 2.0 / 255.0; |
| 1592 return EffectPaintPropertyNode::create( |
| 1593 EffectPaintPropertyNode::root(), TransformPaintPropertyNode::root(), |
| 1594 ClipPaintPropertyNode::root(), ColorFilterNone, |
| 1595 CompositorFilterOperations(), opacity, SkBlendMode::kSrcOver, |
| 1596 CompositingReasonActiveAnimation, expectedCompositorElementId); |
| 1597 } |
| 1598 |
| 1599 PassRefPtr<TransformPaintPropertyNode> |
| 1600 createSampleTransformNodeWithElementId() { |
| 1601 CompositorElementId expectedCompositorElementId(3, 0); |
| 1602 return TransformPaintPropertyNode::create( |
| 1603 TransformPaintPropertyNode::root(), TransformationMatrix().rotate(90), |
| 1604 FloatPoint3D(100, 100, 0), false, 0, CompositingReason3DTransform, |
| 1605 expectedCompositorElementId); |
| 1606 } |
| 1607 |
1583 TEST_F(PaintArtifactCompositorTestWithPropertyTrees, TransformWithElementId) { | 1608 TEST_F(PaintArtifactCompositorTestWithPropertyTrees, TransformWithElementId) { |
1584 CompositorElementId expectedCompositorElementId(2, 0); | |
1585 RefPtr<TransformPaintPropertyNode> transform = | 1609 RefPtr<TransformPaintPropertyNode> transform = |
1586 TransformPaintPropertyNode::create( | 1610 createSampleTransformNodeWithElementId(); |
1587 TransformPaintPropertyNode::root(), TransformationMatrix().rotate(90), | |
1588 FloatPoint3D(100, 100, 0), false, 0, CompositingReason3DTransform, | |
1589 expectedCompositorElementId); | |
1590 | |
1591 TestPaintArtifact artifact; | 1611 TestPaintArtifact artifact; |
1592 artifact | 1612 artifact |
1593 .chunk(transform, ClipPaintPropertyNode::root(), | 1613 .chunk(transform, ClipPaintPropertyNode::root(), |
1594 EffectPaintPropertyNode::root()) | 1614 EffectPaintPropertyNode::root()) |
1595 .rectDrawing(FloatRect(100, 100, 200, 100), Color::black); | 1615 .rectDrawing(FloatRect(100, 100, 200, 100), Color::black); |
1596 update(artifact.build()); | 1616 update(artifact.build()); |
1597 | 1617 |
1598 EXPECT_EQ(2, elementIdToTransformNodeIndex(expectedCompositorElementId)); | 1618 EXPECT_EQ(2, elementIdToTransformNodeIndex(transform->compositorElementId())); |
1599 } | 1619 } |
1600 | 1620 |
1601 TEST_F(PaintArtifactCompositorTestWithPropertyTrees, | 1621 TEST_F(PaintArtifactCompositorTestWithPropertyTrees, |
1602 TransformNodeHasOwningLayerId) { | 1622 TransformNodeHasOwningLayerId) { |
1603 RefPtr<TransformPaintPropertyNode> transform = | 1623 RefPtr<TransformPaintPropertyNode> transform = |
1604 TransformPaintPropertyNode::create( | 1624 TransformPaintPropertyNode::create( |
1605 TransformPaintPropertyNode::root(), TransformationMatrix().rotate(90), | 1625 TransformPaintPropertyNode::root(), TransformationMatrix().rotate(90), |
1606 FloatPoint3D(100, 100, 0), false, 0, CompositingReason3DTransform); | 1626 FloatPoint3D(100, 100, 0), false, 0, CompositingReason3DTransform); |
1607 | 1627 |
1608 TestPaintArtifact artifact; | 1628 TestPaintArtifact artifact; |
(...skipping 11 matching lines...) Expand all Loading... |
1620 propertyTrees().transform_tree.Node( | 1640 propertyTrees().transform_tree.Node( |
1621 transformNodeLayer->transform_tree_index()); | 1641 transformNodeLayer->transform_tree_index()); |
1622 EXPECT_EQ(transformNodeLayer->id(), ccTransformNode->owning_layer_id); | 1642 EXPECT_EQ(transformNodeLayer->id(), ccTransformNode->owning_layer_id); |
1623 auto transformNodeIndex = | 1643 auto transformNodeIndex = |
1624 propertyTrees().transform_tree.FindNodeIndexFromOwningLayerId( | 1644 propertyTrees().transform_tree.FindNodeIndexFromOwningLayerId( |
1625 transformNodeLayer->id()); | 1645 transformNodeLayer->id()); |
1626 EXPECT_EQ(transformNodeIndex, ccTransformNode->id); | 1646 EXPECT_EQ(transformNodeIndex, ccTransformNode->id); |
1627 } | 1647 } |
1628 | 1648 |
1629 TEST_F(PaintArtifactCompositorTestWithPropertyTrees, EffectWithElementId) { | 1649 TEST_F(PaintArtifactCompositorTestWithPropertyTrees, EffectWithElementId) { |
1630 CompositorElementId expectedCompositorElementId(2, 0); | 1650 RefPtr<EffectPaintPropertyNode> effect = |
1631 float opacity = 2.0 / 255.0; | 1651 createSampleEffectNodeWithElementId(); |
1632 RefPtr<EffectPaintPropertyNode> effect = EffectPaintPropertyNode::create( | |
1633 EffectPaintPropertyNode::root(), TransformPaintPropertyNode::root(), | |
1634 ClipPaintPropertyNode::root(), ColorFilterNone, | |
1635 CompositorFilterOperations(), opacity, SkBlendMode::kSrcOver, | |
1636 CompositingReasonActiveAnimation, expectedCompositorElementId); | |
1637 | |
1638 TestPaintArtifact artifact; | 1652 TestPaintArtifact artifact; |
1639 artifact | 1653 artifact |
1640 .chunk(TransformPaintPropertyNode::root(), ClipPaintPropertyNode::root(), | 1654 .chunk(TransformPaintPropertyNode::root(), ClipPaintPropertyNode::root(), |
1641 effect.get()) | 1655 effect.get()) |
1642 .rectDrawing(FloatRect(100, 100, 200, 100), Color::black); | 1656 .rectDrawing(FloatRect(100, 100, 200, 100), Color::black); |
1643 update(artifact.build()); | 1657 update(artifact.build()); |
1644 | 1658 |
1645 EXPECT_EQ(2, elementIdToEffectNodeIndex(expectedCompositorElementId)); | 1659 EXPECT_EQ(2, elementIdToEffectNodeIndex(effect->compositorElementId())); |
1646 } | 1660 } |
1647 | 1661 |
1648 TEST_F(PaintArtifactCompositorTestWithPropertyTrees, CompositedLuminanceMask) { | 1662 TEST_F(PaintArtifactCompositorTestWithPropertyTrees, CompositedLuminanceMask) { |
1649 RefPtr<EffectPaintPropertyNode> masked = EffectPaintPropertyNode::create( | 1663 RefPtr<EffectPaintPropertyNode> masked = EffectPaintPropertyNode::create( |
1650 EffectPaintPropertyNode::root(), TransformPaintPropertyNode::root(), | 1664 EffectPaintPropertyNode::root(), TransformPaintPropertyNode::root(), |
1651 ClipPaintPropertyNode::root(), ColorFilterNone, | 1665 ClipPaintPropertyNode::root(), ColorFilterNone, |
1652 CompositorFilterOperations(), 1.0, SkBlendMode::kSrcOver, | 1666 CompositorFilterOperations(), 1.0, SkBlendMode::kSrcOver, |
1653 CompositingReasonIsolateCompositedDescendants); | 1667 CompositingReasonIsolateCompositedDescendants); |
1654 RefPtr<EffectPaintPropertyNode> masking = EffectPaintPropertyNode::create( | 1668 RefPtr<EffectPaintPropertyNode> masking = EffectPaintPropertyNode::create( |
1655 masked, TransformPaintPropertyNode::root(), ClipPaintPropertyNode::root(), | 1669 masked, TransformPaintPropertyNode::root(), ClipPaintPropertyNode::root(), |
(...skipping 337 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1993 EXPECT_EQ(gfx::Vector2dF(200.f, 0.f), layer3->offset_to_transform_parent()); | 2007 EXPECT_EQ(gfx::Vector2dF(200.f, 0.f), layer3->offset_to_transform_parent()); |
1994 EXPECT_EQ(gfx::Size(50, 50), layer3->bounds()); | 2008 EXPECT_EQ(gfx::Size(50, 50), layer3->bounds()); |
1995 EXPECT_EQ(effectNode->id, layer3->effect_tree_index()); | 2009 EXPECT_EQ(effectNode->id, layer3->effect_tree_index()); |
1996 | 2010 |
1997 const cc::Layer* layer4 = contentLayerAt(3); | 2011 const cc::Layer* layer4 = contentLayerAt(3); |
1998 EXPECT_EQ(gfx::Vector2dF(100.f, 0.f), layer4->offset_to_transform_parent()); | 2012 EXPECT_EQ(gfx::Vector2dF(100.f, 0.f), layer4->offset_to_transform_parent()); |
1999 EXPECT_EQ(gfx::Size(150, 150), layer4->bounds()); | 2013 EXPECT_EQ(gfx::Size(150, 150), layer4->bounds()); |
2000 EXPECT_EQ(1, layer4->effect_tree_index()); | 2014 EXPECT_EQ(1, layer4->effect_tree_index()); |
2001 } | 2015 } |
2002 | 2016 |
| 2017 TEST_F(PaintArtifactCompositorTestWithPropertyTrees, |
| 2018 UpdatePopulatesCompositedElementIds) { |
| 2019 RefPtr<TransformPaintPropertyNode> transform = |
| 2020 createSampleTransformNodeWithElementId(); |
| 2021 RefPtr<EffectPaintPropertyNode> effect = |
| 2022 createSampleEffectNodeWithElementId(); |
| 2023 TestPaintArtifact artifact; |
| 2024 artifact |
| 2025 .chunk(transform, ClipPaintPropertyNode::root(), |
| 2026 EffectPaintPropertyNode::root()) |
| 2027 .rectDrawing(FloatRect(0, 0, 100, 100), Color::black) |
| 2028 .chunk(TransformPaintPropertyNode::root(), ClipPaintPropertyNode::root(), |
| 2029 effect.get()) |
| 2030 .rectDrawing(FloatRect(100, 100, 200, 100), Color::black); |
| 2031 |
| 2032 CompositorElementIdSet compositedElementIds; |
| 2033 update(artifact.build(), compositedElementIds); |
| 2034 |
| 2035 EXPECT_EQ(2u, compositedElementIds.size()); |
| 2036 EXPECT_TRUE(compositedElementIds.contains(transform->compositorElementId())); |
| 2037 EXPECT_TRUE(compositedElementIds.contains(effect->compositorElementId())); |
| 2038 } |
| 2039 |
2003 } // namespace blink | 2040 } // namespace blink |
OLD | NEW |