Index: third_party/WebKit/Source/core/layout/compositing/CompositedLayerMappingTest.cpp |
diff --git a/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMappingTest.cpp b/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMappingTest.cpp |
index 267daa88bda871bcb603522b112a99671bca5d10..34b8fa8e4556bd872886353c19df4007630248cc 100644 |
--- a/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMappingTest.cpp |
+++ b/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMappingTest.cpp |
@@ -24,6 +24,11 @@ protected: |
return CompositedLayerMapping::computeInterestRect(graphicsLayer, owningLayoutObject); |
} |
+ bool interestRectChangedEnoughToRepaint(const IntRect& previousInterestRect, const IntRect& newInterestRect, const IntSize& layerSize) |
+ { |
+ return CompositedLayerMapping::interestRectChangedEnoughToRepaint(previousInterestRect, newInterestRect, layerSize); |
+ } |
+ |
private: |
void SetUp() override |
{ |
@@ -203,4 +208,69 @@ TEST_F(CompositedLayerMappingTest, ClippedBigLayer) |
EXPECT_TRUE(checkRectsEqual(IntRect(0, 0, 4001, 4001), computeInterestRect(paintLayer->graphicsLayerBacking(), paintLayer->layoutObject()))); |
} |
+TEST_F(CompositedLayerMappingTest, InterestRectChangedEnoughToRepaintEmpty) |
+{ |
+ IntSize layerSize(1000, 1000); |
+ // Both empty means there is nothing to do. |
+ EXPECT_FALSE(interestRectChangedEnoughToRepaint(IntRect(), IntRect(), layerSize)); |
+ // Going from empty to non-empty means we must re-record because it could be the first frame after construction or Clear. |
+ EXPECT_TRUE(interestRectChangedEnoughToRepaint(IntRect(), IntRect(0, 0, 1, 1), layerSize)); |
+ // Going from non-empty to empty is not special-cased. |
+ EXPECT_FALSE(interestRectChangedEnoughToRepaint(IntRect(0, 0, 1, 1), IntRect(), layerSize)); |
+} |
+ |
+TEST_F(CompositedLayerMappingTest, InterestRectChangedEnoughToRepaintNotBigEnough) |
+{ |
+ IntSize layerSize(1000, 1000); |
+ IntRect previousInterestRect(100, 100, 100, 100); |
+ EXPECT_FALSE(interestRectChangedEnoughToRepaint(previousInterestRect, IntRect(100, 100, 90, 90), layerSize)); |
+ EXPECT_FALSE(interestRectChangedEnoughToRepaint(previousInterestRect, IntRect(100, 100, 100, 100), layerSize)); |
+ EXPECT_FALSE(interestRectChangedEnoughToRepaint(previousInterestRect, IntRect(1, 1, 200, 200), layerSize)); |
+} |
+ |
+TEST_F(CompositedLayerMappingTest, InterestRectChangedEnoughToRepaintNotBigEnoughButNewAreaTouchesEdge) |
+{ |
+ IntSize layerSize(500, 500); |
+ IntRect previousInterestRect(100, 100, 100, 100); |
+ // Top edge. |
+ EXPECT_TRUE(interestRectChangedEnoughToRepaint(previousInterestRect, IntRect(100, 0, 100, 200), layerSize)); |
+ // Left edge. |
+ EXPECT_TRUE(interestRectChangedEnoughToRepaint(previousInterestRect, IntRect(0, 100, 200, 100), layerSize)); |
+ // Bottom edge. |
+ EXPECT_TRUE(interestRectChangedEnoughToRepaint(previousInterestRect, IntRect(100, 100, 100, 400), layerSize)); |
+ // Right edge. |
+ EXPECT_TRUE(interestRectChangedEnoughToRepaint(previousInterestRect, IntRect(100, 100, 400, 100), layerSize)); |
+} |
+ |
+// Verifies that having a current viewport that touches a layer edge does not |
+// force re-recording. |
+TEST_F(CompositedLayerMappingTest, InterestRectChangedEnoughToRepaintCurrentViewportTouchesEdge) |
+{ |
+ IntSize layerSize(500, 500); |
+ IntRect newInterestRect(100, 100, 300, 300); |
+ // Top edge. |
+ EXPECT_FALSE(interestRectChangedEnoughToRepaint(IntRect(100, 0, 100, 100), newInterestRect, layerSize)); |
+ // Left edge. |
+ EXPECT_FALSE(interestRectChangedEnoughToRepaint(IntRect(0, 100, 100, 100), newInterestRect, layerSize)); |
+ // Bottom edge. |
+ EXPECT_FALSE(interestRectChangedEnoughToRepaint(IntRect(300, 400, 100, 100), newInterestRect, layerSize)); |
+ // Right edge. |
+ EXPECT_FALSE(interestRectChangedEnoughToRepaint(IntRect(400, 300, 100, 100), newInterestRect, layerSize)); |
+} |
+ |
+TEST_F(CompositedLayerMappingTest, InterestRectChangedEnoughToRepaintScrollScenarios) |
+{ |
+ IntSize layerSize(1000, 1000); |
+ IntRect previousInterestRect(100, 100, 100, 100); |
+ IntRect newInterestRect(previousInterestRect); |
+ newInterestRect.move(512, 0); |
+ EXPECT_FALSE(interestRectChangedEnoughToRepaint(previousInterestRect, newInterestRect, layerSize)); |
+ newInterestRect.move(0, 512); |
+ EXPECT_FALSE(interestRectChangedEnoughToRepaint(previousInterestRect, newInterestRect, layerSize)); |
+ newInterestRect.move(1, 0); |
+ EXPECT_TRUE(interestRectChangedEnoughToRepaint(previousInterestRect, newInterestRect, layerSize)); |
+ newInterestRect.move(-1, 1); |
+ EXPECT_TRUE(interestRectChangedEnoughToRepaint(previousInterestRect, newInterestRect, layerSize)); |
+} |
+ |
} // namespace blink |