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

Unified Diff: third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilderTest.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 side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilderTest.cpp
diff --git a/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilderTest.cpp b/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilderTest.cpp
index 0bd39b24c1d26095495def793d9203972de95d3e..9979fdd019d6bc03bd1a02f449159e970f201d15 100644
--- a/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilderTest.cpp
+++ b/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilderTest.cpp
@@ -1109,4 +1109,78 @@ TEST_F(PaintPropertyTreeBuilderTest, SvgPixelSnappingShouldResetPaintOffset)
EXPECT_EQ(svgWithTransformProperties->transform(), rectWithTransformProperties->transform()->parent());
}
+TEST_F(PaintPropertyTreeBuilderTest, CachedProperties)
+{
+ setBodyInnerHTML(
+ "<div id='a' style='transform: translate(33px, 44px)'>"
+ " <div id='b' style='transform: translate(55px, 66px)'>"
+ " <div id='c' style='transform: translate(77px, 88px)'>C<div>"
+ " </div>"
+ "</div>");
+
+ Element* a = document().getElementById("a");
+ ObjectPaintProperties* aProperties = a->layoutObject()->objectPaintProperties();
+ TransformPaintPropertyNode* aTransformNode = aProperties->transform();
+ EXPECT_EQ(TransformationMatrix().translate(33, 44), aTransformNode->matrix());
+
+ Element* b = document().getElementById("b");
+ ObjectPaintProperties* bProperties = b->layoutObject()->objectPaintProperties();
+ TransformPaintPropertyNode* bTransformNode = bProperties->transform();
+ EXPECT_EQ(TransformationMatrix().translate(55, 66), bTransformNode->matrix());
+
+ Element* c = document().getElementById("c");
+ ObjectPaintProperties* cProperties = c->layoutObject()->objectPaintProperties();
+ TransformPaintPropertyNode* cTransformNode = cProperties->transform();
+ EXPECT_EQ(TransformationMatrix().translate(77, 88), cTransformNode->matrix());
+
+ // Change transform of b. B's transform node should be a new node with the new value,
+ // and a and c's transform nodes should be unchanged (with c's parent adjusted).
+ b->setAttribute(HTMLNames::styleAttr, "transform: translate(111px, 222px)");
+ document().view()->updateAllLifecyclePhases();
+
+ EXPECT_EQ(aProperties, a->layoutObject()->objectPaintProperties());
+ EXPECT_EQ(aTransformNode, aProperties->transform());
+
+ EXPECT_EQ(bProperties, b->layoutObject()->objectPaintProperties());
+ bTransformNode = bProperties->transform();
+ EXPECT_EQ(TransformationMatrix().translate(111, 222), bTransformNode->matrix());
+ EXPECT_EQ(aTransformNode, bTransformNode->parent());
+
+ EXPECT_EQ(cProperties, c->layoutObject()->objectPaintProperties());
+ EXPECT_EQ(cTransformNode, cProperties->transform());
+ EXPECT_EQ(bTransformNode, cTransformNode->parent());
+
+ // Remove transform from b. B's transform node should be removed from the tree,
+ // and a and c's transform nodes should be unchanged (with c's parent adjusted).
+ b->setAttribute(HTMLNames::styleAttr, "");
+ document().view()->updateAllLifecyclePhases();
+
+ EXPECT_EQ(aProperties, a->layoutObject()->objectPaintProperties());
+ EXPECT_EQ(aTransformNode, aProperties->transform());
+
+ EXPECT_EQ(bProperties, b->layoutObject()->objectPaintProperties());
+ EXPECT_EQ(nullptr, bProperties->transform());
+
+ EXPECT_EQ(cProperties, c->layoutObject()->objectPaintProperties());
+ EXPECT_EQ(cTransformNode, cProperties->transform());
+ EXPECT_EQ(aTransformNode, cTransformNode->parent());
+
+ // Re-add transform to b. B's transform node should be inserted into the tree,
+ // and a and c's transform nodes should be unchanged (with c's parent adjusted).
+ b->setAttribute(HTMLNames::styleAttr, "transform: translate(4px, 5px)");
+ document().view()->updateAllLifecyclePhases();
+
+ EXPECT_EQ(aProperties, a->layoutObject()->objectPaintProperties());
+ EXPECT_EQ(aTransformNode, aProperties->transform());
+
+ EXPECT_EQ(bProperties, b->layoutObject()->objectPaintProperties());
+ bTransformNode = bProperties->transform();
+ EXPECT_EQ(TransformationMatrix().translate(4, 5), bTransformNode->matrix());
+ EXPECT_EQ(aTransformNode, bTransformNode->parent());
+
+ EXPECT_EQ(cProperties, c->layoutObject()->objectPaintProperties());
+ EXPECT_EQ(cTransformNode, cProperties->transform());
+ EXPECT_EQ(bTransformNode, cTransformNode->parent());
+}
+
} // namespace blink

Powered by Google App Engine
This is Rietveld 408576698