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

Unified Diff: third_party/WebKit/Source/core/paint/BoxPaintInvalidatorTest.cpp

Issue 2706063003: Reduce the requirement for saving previousLocation (Closed)
Patch Set: - Created 3 years, 10 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/BoxPaintInvalidatorTest.cpp
diff --git a/third_party/WebKit/Source/core/paint/BoxPaintInvalidatorTest.cpp b/third_party/WebKit/Source/core/paint/BoxPaintInvalidatorTest.cpp
index f771914735ad8c3ee0384b3ae817d7ab303c9d0d..3668a4fc0a3c0892a264b27b06e77725e1e50a67 100644
--- a/third_party/WebKit/Source/core/paint/BoxPaintInvalidatorTest.cpp
+++ b/third_party/WebKit/Source/core/paint/BoxPaintInvalidatorTest.cpp
@@ -59,6 +59,9 @@ class BoxPaintInvalidatorTest : public ::testing::WithParamInterface<bool>,
" .gradient {"
" background-image: linear-gradient(blue, yellow)"
" }"
+ " .transform {"
+ " transform: scale(2);"
+ " }"
"</style>"
"<div id='target' class='border'></div>");
}
@@ -116,64 +119,98 @@ TEST_P(BoxPaintInvalidatorTest, SubpixelVisualRectChagne) {
Element* target = document().getElementById("target");
- // Should do full invalidation if new geometry has subpixels.
document().view()->setTracksPaintInvalidations(true);
target->setAttribute(HTMLNames::styleAttr, "width: 100.6px; height: 70.3px");
document().view()->updateAllLifecyclePhases();
const auto* rasterInvalidations =
&getRasterInvalidationTracking()->trackedRasterInvalidations;
ASSERT_EQ(2u, rasterInvalidations->size());
- EXPECT_EQ(IntRect(0, 0, 70, 140), (*rasterInvalidations)[0].rect);
+ EXPECT_EQ(IntRect(60, 0, 61, 111), (*rasterInvalidations)[0].rect);
+ EXPECT_EQ(PaintInvalidationIncremental, (*rasterInvalidations)[0].reason);
+ EXPECT_EQ(IntRect(0, 90, 70, 50), (*rasterInvalidations)[1].rect);
+ EXPECT_EQ(PaintInvalidationIncremental, (*rasterInvalidations)[1].reason);
+ document().view()->setTracksPaintInvalidations(false);
+
+ document().view()->setTracksPaintInvalidations(true);
+ target->setAttribute(HTMLNames::styleAttr, "width: 50px; height: 100px");
+ document().view()->updateAllLifecyclePhases();
+ rasterInvalidations =
+ &getRasterInvalidationTracking()->trackedRasterInvalidations;
+ ASSERT_EQ(2u, rasterInvalidations->size());
+ EXPECT_EQ(IntRect(60, 0, 61, 111), (*rasterInvalidations)[0].rect);
+ EXPECT_EQ(PaintInvalidationIncremental, (*rasterInvalidations)[0].reason);
+ EXPECT_EQ(IntRect(0, 90, 70, 50), (*rasterInvalidations)[1].rect);
+ EXPECT_EQ(PaintInvalidationIncremental, (*rasterInvalidations)[1].reason);
+ document().view()->setTracksPaintInvalidations(false);
+}
+
+TEST_P(BoxPaintInvalidatorTest, SubpixelVisualRectChagneWithTransform) {
wkorman 2017/02/21 22:54:19 Chagne -> Change
Xianzhu 2017/02/21 23:15:59 Done.
+ ScopedSlimmingPaintInvalidationForTest scopedSlimmingPaintInvalidation(true);
+
+ Element* target = document().getElementById("target");
+ target->setAttribute(HTMLNames::classAttr, "border transform");
+ document().view()->updateAllLifecyclePhases();
+
+ document().view()->setTracksPaintInvalidations(true);
+ target->setAttribute(HTMLNames::styleAttr, "width: 100.6px; height: 70.3px");
+ document().view()->updateAllLifecyclePhases();
+ const auto* rasterInvalidations =
+ &getRasterInvalidationTracking()->trackedRasterInvalidations;
+ ASSERT_EQ(2u, rasterInvalidations->size());
+ EXPECT_EQ(IntRect(0, 0, 140, 280), (*rasterInvalidations)[0].rect);
EXPECT_EQ(PaintInvalidationBorderBoxChange, (*rasterInvalidations)[0].reason);
- EXPECT_EQ(IntRect(0, 0, 121, 111), (*rasterInvalidations)[1].rect);
+ EXPECT_EQ(IntRect(0, 0, 242, 222), (*rasterInvalidations)[1].rect);
EXPECT_EQ(PaintInvalidationBorderBoxChange, (*rasterInvalidations)[1].reason);
document().view()->setTracksPaintInvalidations(false);
- // Should do full invalidation if old geometry has subpixels.
document().view()->setTracksPaintInvalidations(true);
target->setAttribute(HTMLNames::styleAttr, "width: 50px; height: 100px");
document().view()->updateAllLifecyclePhases();
rasterInvalidations =
&getRasterInvalidationTracking()->trackedRasterInvalidations;
ASSERT_EQ(2u, rasterInvalidations->size());
- EXPECT_EQ(IntRect(0, 0, 121, 111), (*rasterInvalidations)[0].rect);
+ EXPECT_EQ(IntRect(0, 0, 242, 222), (*rasterInvalidations)[0].rect);
EXPECT_EQ(PaintInvalidationBorderBoxChange, (*rasterInvalidations)[0].reason);
- EXPECT_EQ(IntRect(0, 0, 70, 140), (*rasterInvalidations)[1].rect);
+ EXPECT_EQ(IntRect(0, 0, 140, 280), (*rasterInvalidations)[1].rect);
EXPECT_EQ(PaintInvalidationBorderBoxChange, (*rasterInvalidations)[1].reason);
document().view()->setTracksPaintInvalidations(false);
}
-TEST_P(BoxPaintInvalidatorTest, SubpixelChangeWithoutVisualRectChange) {
+TEST_P(BoxPaintInvalidatorTest, SubpixelWithinPixelsChange) {
ScopedSlimmingPaintInvalidationForTest scopedSlimmingPaintInvalidation(true);
Element* target = document().getElementById("target");
LayoutObject* targetObject = target->layoutObject();
EXPECT_EQ(LayoutRect(0, 0, 70, 140), targetObject->previousVisualRect());
- // Should do full invalidation if new geometry has subpixels even if the paint
- // invalidation rect doesn't change.
document().view()->setTracksPaintInvalidations(true);
target->setAttribute(HTMLNames::styleAttr,
"margin-top: 0.6px; width: 50px; height: 99.3px");
document().view()->updateAllLifecyclePhases();
- EXPECT_EQ(LayoutRect(0, 0, 70, 140), targetObject->previousVisualRect());
+ EXPECT_EQ(LayoutRect(LayoutUnit(), LayoutUnit(0.6), LayoutUnit(70),
+ LayoutUnit(139.3)),
+ targetObject->previousVisualRect());
const auto* rasterInvalidations =
&getRasterInvalidationTracking()->trackedRasterInvalidations;
ASSERT_EQ(1u, rasterInvalidations->size());
EXPECT_EQ(IntRect(0, 0, 70, 140), (*rasterInvalidations)[0].rect);
- EXPECT_EQ(PaintInvalidationLocationChange, (*rasterInvalidations)[0].reason);
+ EXPECT_EQ(PaintInvalidationBoundsChange, (*rasterInvalidations)[0].reason);
document().view()->setTracksPaintInvalidations(false);
document().view()->setTracksPaintInvalidations(true);
target->setAttribute(HTMLNames::styleAttr,
"margin-top: 0.6px; width: 49.3px; height: 98.5px");
document().view()->updateAllLifecyclePhases();
- EXPECT_EQ(LayoutRect(0, 0, 70, 140), targetObject->previousVisualRect());
+ EXPECT_EQ(LayoutRect(LayoutUnit(), LayoutUnit(0.6), LayoutUnit(69.3),
+ LayoutUnit(138.5)),
+ targetObject->previousVisualRect());
rasterInvalidations =
&getRasterInvalidationTracking()->trackedRasterInvalidations;
- ASSERT_EQ(1u, rasterInvalidations->size());
- EXPECT_EQ(IntRect(0, 0, 70, 140), (*rasterInvalidations)[0].rect);
- EXPECT_EQ(PaintInvalidationBorderBoxChange, (*rasterInvalidations)[0].reason);
+ ASSERT_EQ(2u, rasterInvalidations->size());
+ EXPECT_EQ(IntRect(59, 0, 11, 140), (*rasterInvalidations)[0].rect);
+ EXPECT_EQ(PaintInvalidationIncremental, (*rasterInvalidations)[0].reason);
+ EXPECT_EQ(IntRect(0, 119, 70, 21), (*rasterInvalidations)[1].rect);
+ EXPECT_EQ(PaintInvalidationIncremental, (*rasterInvalidations)[1].reason);
document().view()->setTracksPaintInvalidations(false);
}

Powered by Google App Engine
This is Rietveld 408576698