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

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

Issue 2449953005: [SPInvalidation] Handle pixel-snapping of paint invalidation rects (Closed)
Patch Set: Created 4 years, 2 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 5ca96c3a91014da157a6d65b4f622a5f37ea024c..f28387ef96bc6bf28c28b632c3a29651be6d9667 100644
--- a/third_party/WebKit/Source/core/paint/BoxPaintInvalidatorTest.cpp
+++ b/third_party/WebKit/Source/core/paint/BoxPaintInvalidatorTest.cpp
@@ -9,6 +9,7 @@
#include "core/paint/PaintLayer.h"
#include "platform/graphics/GraphicsLayer.h"
#include "platform/graphics/paint/RasterInvalidationTracking.h"
+#include "platform/testing/RuntimeEnabledFeaturesTestHelpers.h"
namespace blink {
@@ -46,13 +47,13 @@ TEST_F(BoxPaintInvalidatorTest, IncrementalInvalidationExpand) {
Element* target = document().getElementById("target");
target->setAttribute(HTMLNames::styleAttr, "width: 100px; height: 200px");
document().view()->updateAllLifecyclePhases();
- const auto* rasterInvalidations =
- &getRasterInvalidationTracking()->trackedRasterInvalidations;
- EXPECT_EQ(2u, rasterInvalidations->size());
- EXPECT_EQ(IntRect(60, 0, 60, 240), (*rasterInvalidations)[0].rect);
- EXPECT_EQ(PaintInvalidationIncremental, (*rasterInvalidations)[0].reason);
- EXPECT_EQ(IntRect(0, 120, 120, 120), (*rasterInvalidations)[1].rect);
- EXPECT_EQ(PaintInvalidationIncremental, (*rasterInvalidations)[1].reason);
+ const auto& rasterInvalidations =
+ getRasterInvalidationTracking()->trackedRasterInvalidations;
+ EXPECT_EQ(2u, rasterInvalidations.size());
+ EXPECT_EQ(IntRect(60, 0, 60, 240), rasterInvalidations[0].rect);
+ EXPECT_EQ(PaintInvalidationIncremental, rasterInvalidations[0].reason);
+ EXPECT_EQ(IntRect(0, 120, 120, 120), rasterInvalidations[1].rect);
+ EXPECT_EQ(PaintInvalidationIncremental, rasterInvalidations[1].reason);
document().view()->setTracksPaintInvalidations(false);
}
@@ -61,13 +62,13 @@ TEST_F(BoxPaintInvalidatorTest, IncrementalInvalidationShrink) {
Element* target = document().getElementById("target");
target->setAttribute(HTMLNames::styleAttr, "width: 20px; height: 80px");
document().view()->updateAllLifecyclePhases();
- const auto* rasterInvalidations =
- &getRasterInvalidationTracking()->trackedRasterInvalidations;
- EXPECT_EQ(2u, rasterInvalidations->size());
- EXPECT_EQ(IntRect(30, 0, 40, 140), (*rasterInvalidations)[0].rect);
- EXPECT_EQ(PaintInvalidationIncremental, (*rasterInvalidations)[0].reason);
- EXPECT_EQ(IntRect(0, 100, 70, 40), (*rasterInvalidations)[1].rect);
- EXPECT_EQ(PaintInvalidationIncremental, (*rasterInvalidations)[1].reason);
+ const auto& rasterInvalidations =
+ getRasterInvalidationTracking()->trackedRasterInvalidations;
+ EXPECT_EQ(2u, rasterInvalidations.size());
+ EXPECT_EQ(IntRect(30, 0, 40, 140), rasterInvalidations[0].rect);
+ EXPECT_EQ(PaintInvalidationIncremental, rasterInvalidations[0].reason);
+ EXPECT_EQ(IntRect(0, 100, 70, 40), rasterInvalidations[1].rect);
+ EXPECT_EQ(PaintInvalidationIncremental, rasterInvalidations[1].reason);
document().view()->setTracksPaintInvalidations(false);
}
@@ -76,13 +77,71 @@ TEST_F(BoxPaintInvalidatorTest, IncrementalInvalidationMixed) {
Element* target = document().getElementById("target");
target->setAttribute(HTMLNames::styleAttr, "width: 100px; height: 80px");
document().view()->updateAllLifecyclePhases();
+ const auto& rasterInvalidations =
+ getRasterInvalidationTracking()->trackedRasterInvalidations;
+ EXPECT_EQ(2u, rasterInvalidations.size());
+ EXPECT_EQ(IntRect(60, 0, 60, 120), rasterInvalidations[0].rect);
+ EXPECT_EQ(PaintInvalidationIncremental, rasterInvalidations[0].reason);
+ EXPECT_EQ(IntRect(0, 100, 70, 40), rasterInvalidations[1].rect);
+ EXPECT_EQ(PaintInvalidationIncremental, rasterInvalidations[1].reason);
+ document().view()->setTracksPaintInvalidations(false);
+}
+
+TEST_F(BoxPaintInvalidatorTest, Subpixel) {
+ ScopedSlimmingPaintInvalidationForTest scopedSlimmingPaintInvalidation(true);
+
+ Element* target = document().getElementById("target");
+ LayoutObject* targetObject = target->layoutObject();
+ EXPECT_FALSE(targetObject->previousPaintInvalidationRectCoversExtraPixels());
+
+ // Should do full invalidation if new geometry has subpixels.
+ document().view()->setTracksPaintInvalidations(true);
+ target->setAttribute(HTMLNames::styleAttr, "width: 20.6px; height: 80.3px");
+ document().view()->updateAllLifecyclePhases();
+ EXPECT_TRUE(targetObject->previousPaintInvalidationRectCoversExtraPixels());
const auto* rasterInvalidations =
&getRasterInvalidationTracking()->trackedRasterInvalidations;
- EXPECT_EQ(2u, rasterInvalidations->size());
- EXPECT_EQ(IntRect(60, 0, 60, 120), (*rasterInvalidations)[0].rect);
- EXPECT_EQ(PaintInvalidationIncremental, (*rasterInvalidations)[0].reason);
- EXPECT_EQ(IntRect(0, 100, 70, 40), (*rasterInvalidations)[1].rect);
- EXPECT_EQ(PaintInvalidationIncremental, (*rasterInvalidations)[1].reason);
+ EXPECT_EQ(1u, rasterInvalidations->size());
+ EXPECT_EQ(IntRect(0, 0, 70, 140), (*rasterInvalidations)[0].rect);
+ EXPECT_EQ(PaintInvalidationBoundsChange, (*rasterInvalidations)[0].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();
+ EXPECT_FALSE(targetObject->previousPaintInvalidationRectCoversExtraPixels());
+ rasterInvalidations =
+ &getRasterInvalidationTracking()->trackedRasterInvalidations;
+ EXPECT_EQ(1u, rasterInvalidations->size());
+ EXPECT_EQ(IntRect(0, 0, 70, 140), (*rasterInvalidations)[0].rect);
+ EXPECT_EQ(PaintInvalidationBoundsChange, (*rasterInvalidations)[0].reason);
+ document().view()->setTracksPaintInvalidations(false);
+
+ // 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_TRUE(targetObject->previousPaintInvalidationRectCoversExtraPixels());
+ rasterInvalidations =
+ &getRasterInvalidationTracking()->trackedRasterInvalidations;
+ EXPECT_EQ(1u, rasterInvalidations->size());
+ EXPECT_EQ(IntRect(0, 0, 70, 140), (*rasterInvalidations)[0].rect);
+ EXPECT_EQ(PaintInvalidationLocationChange, (*rasterInvalidations)[0].reason);
+ document().view()->setTracksPaintInvalidations(false);
+
+ document().view()->setTracksPaintInvalidations(true);
+ target->setAttribute(HTMLNames::styleAttr,
+ "margin-top: 0.6px; width: 50px; height: 100px");
+ document().view()->updateAllLifecyclePhases();
+ EXPECT_TRUE(targetObject->previousPaintInvalidationRectCoversExtraPixels());
+ rasterInvalidations =
+ &getRasterInvalidationTracking()->trackedRasterInvalidations;
+ EXPECT_EQ(1u, rasterInvalidations->size());
+ EXPECT_EQ(IntRect(0, 0, 70, 141), (*rasterInvalidations)[0].rect);
+ EXPECT_EQ(PaintInvalidationBoundsChange, (*rasterInvalidations)[0].reason);
document().view()->setTracksPaintInvalidations(false);
}

Powered by Google App Engine
This is Rietveld 408576698