| Index: Source/platform/graphics/paint/DisplayItemPropertyTreeBuilderTest.cpp
|
| diff --git a/Source/platform/graphics/paint/DisplayItemPropertyTreeBuilderTest.cpp b/Source/platform/graphics/paint/DisplayItemPropertyTreeBuilderTest.cpp
|
| index 469b7dd4e4b435fbe5310767cc0cfdbdf99186e8..096cf1d74ea3286506c4d65f5b53b6a3a0f30af5 100644
|
| --- a/Source/platform/graphics/paint/DisplayItemPropertyTreeBuilderTest.cpp
|
| +++ b/Source/platform/graphics/paint/DisplayItemPropertyTreeBuilderTest.cpp
|
| @@ -9,7 +9,9 @@
|
| #include "platform/graphics/paint/DisplayItemClient.h"
|
| #include "platform/graphics/paint/DisplayItemClipTree.h"
|
| #include "platform/graphics/paint/DisplayItemTransformTree.h"
|
| +#include "platform/graphics/paint/ScrollDisplayItem.h"
|
| #include "platform/graphics/paint/Transform3DDisplayItem.h"
|
| +#include "platform/graphics/paint/TransformDisplayItem.h"
|
| #include "platform/transforms/TransformTestHelper.h"
|
| #include "platform/transforms/TransformationMatrix.h"
|
| #include "public/platform/WebDisplayItemTransformTree.h"
|
| @@ -72,6 +74,26 @@ protected:
|
| {
|
| processDisplayItem(EndTransform3DDisplayItem(client, DisplayItem::transform3DTypeToEndTransform3DType(DisplayItem::Transform3DElementTransform)));
|
| }
|
| + const DummyClient& processBeginTransform(const AffineTransform& transform)
|
| + {
|
| + const DummyClient& client = newDummyClient();
|
| + processDisplayItem(BeginTransformDisplayItem(client, transform));
|
| + return client;
|
| + }
|
| + void processEndTransform(const DummyClient& client)
|
| + {
|
| + processDisplayItem(EndTransformDisplayItem(client));
|
| + }
|
| + const DummyClient& processBeginScroll(int offsetX, int offsetY)
|
| + {
|
| + const DummyClient& client = newDummyClient();
|
| + processDisplayItem(BeginScrollDisplayItem(client, DisplayItem::ScrollFirst, IntSize(offsetX, offsetY)));
|
| + return client;
|
| + }
|
| + void processEndScroll(const DummyClient& client)
|
| + {
|
| + processDisplayItem(EndScrollDisplayItem(client, DisplayItem::EndScrollFirst));
|
| + }
|
|
|
| void finishPropertyTrees()
|
| {
|
| @@ -319,5 +341,79 @@ TEST_F(DisplayItemPropertyTreeBuilderTest, NestedTransformsAreNotCombined)
|
| EXPECT_TRANSFORMS_ALMOST_EQ(matrix1, parentNode.matrix);
|
| }
|
|
|
| +TEST_F(DisplayItemPropertyTreeBuilderTest, TransformDisplayItemCreatesTransformNode)
|
| +{
|
| + // 2D transform display items should create a transform node as well,
|
| + // unless the transform is a 2D translation only.
|
| + AffineTransform rotation;
|
| + rotation.rotate(45);
|
| +
|
| + processDummyDisplayItem();
|
| + auto transformClient = processBeginTransform(rotation);
|
| + processDummyDisplayItem();
|
| + processEndTransform(transformClient);
|
| + processDummyDisplayItem();
|
| + finishPropertyTrees();
|
| +
|
| + // There should be two transform nodes.
|
| + ASSERT_EQ(2u, transformTree().nodeCount());
|
| + EXPECT_TRUE(transformTree().nodeAt(0).isRoot());
|
| + EXPECT_EQ(0u, transformTree().nodeAt(1).parentNodeIndex);
|
| + EXPECT_TRANSFORMS_ALMOST_EQ(TransformationMatrix(rotation), transformTree().nodeAt(1).matrix);
|
| +
|
| + // There should be three range records, the middle one affected by the
|
| + // rotation.
|
| + EXPECT_THAT(rangeRecordsAsStdVector(), ElementsAre(
|
| + AllOf(hasRange(0, 1), hasTransformNode(0)),
|
| + AllOf(hasRange(2, 3), hasTransformNode(1)),
|
| + AllOf(hasRange(4, 5), hasTransformNode(0))));
|
| +}
|
| +
|
| +TEST_F(DisplayItemPropertyTreeBuilderTest, TransformDisplayItemOnly2DTranslation)
|
| +{
|
| + // In this case no transform node should be created for the 2D translation.
|
| + AffineTransform translation = AffineTransform::translation(10, -40);
|
| +
|
| + processDummyDisplayItem();
|
| + auto transformClient = processBeginTransform(translation);
|
| + processDummyDisplayItem();
|
| + processEndTransform(transformClient);
|
| + processDummyDisplayItem();
|
| + finishPropertyTrees();
|
| +
|
| + // There should be only one transform node.
|
| + ASSERT_EQ(1u, transformTree().nodeCount());
|
| + EXPECT_TRUE(transformTree().nodeAt(0).isRoot());
|
| +
|
| + // There should be three range records, the middle one affected by the
|
| + // translation.
|
| + EXPECT_THAT(rangeRecordsAsStdVector(), ElementsAre(
|
| + AllOf(hasRange(0, 1), hasTransformNode(0), hasOffset(FloatSize(0, 0))),
|
| + AllOf(hasRange(2, 3), hasTransformNode(0), hasOffset(FloatSize(10, -40))),
|
| + AllOf(hasRange(4, 5), hasTransformNode(0), hasOffset(FloatSize(0, 0)))));
|
| +}
|
| +
|
| +TEST_F(DisplayItemPropertyTreeBuilderTest, ScrollDisplayItemIs2DTranslation)
|
| +{
|
| + processDummyDisplayItem();
|
| + auto scrollClient = processBeginScroll(-90, 400);
|
| + processDummyDisplayItem();
|
| + processEndScroll(scrollClient);
|
| + processDummyDisplayItem();
|
| + finishPropertyTrees();
|
| +
|
| + // There should be only one transform node.
|
| + ASSERT_EQ(1u, transformTree().nodeCount());
|
| + EXPECT_TRUE(transformTree().nodeAt(0).isRoot());
|
| +
|
| + // There should be three range records, the middle one affected by the
|
| + // scroll. Note that the translation due to scroll is the negative of the
|
| + // scroll offset.
|
| + EXPECT_THAT(rangeRecordsAsStdVector(), ElementsAre(
|
| + AllOf(hasRange(0, 1), hasTransformNode(0), hasOffset(FloatSize(0, 0))),
|
| + AllOf(hasRange(2, 3), hasTransformNode(0), hasOffset(FloatSize(90, -400))),
|
| + AllOf(hasRange(4, 5), hasTransformNode(0), hasOffset(FloatSize(0, 0)))));
|
| +}
|
| +
|
| } // namespace
|
| } // namespace blink
|
|
|