Index: Source/core/rendering/RenderObject.cpp |
diff --git a/Source/core/rendering/RenderObject.cpp b/Source/core/rendering/RenderObject.cpp |
index 9562761e91aeb1863012833c8bc802c1e974419b..52cbc219d972f87ab7151635d51f914b5f341bb1 100644 |
--- a/Source/core/rendering/RenderObject.cpp |
+++ b/Source/core/rendering/RenderObject.cpp |
@@ -1514,10 +1514,17 @@ bool RenderObject::repaintAfterLayoutIfNeeded(const RenderLayerModelObject* repa |
// This ASSERT fails due to animations. See https://bugs.webkit.org/show_bug.cgi?id=37048 |
// ASSERT(!newOutlineBoxRectPtr || *newOutlineBoxRectPtr == outlineBoundsForRepaint(repaintContainer)); |
newOutlineBox = newOutlineBoxRectPtr ? *newOutlineBoxRectPtr : outlineBoundsForRepaint(repaintContainer); |
- if (newOutlineBox.location() != oldOutlineBox.location() || (mustRepaintBackgroundOrBorder() && (newBounds != oldBounds || newOutlineBox != oldOutlineBox))) |
+ |
+ if ((hasOutline() && newOutlineBox.location() != oldOutlineBox.location()) |
+ || (mustRepaintBackgroundOrBorder() && (newBounds != oldBounds || (hasOutline() && newOutlineBox != oldOutlineBox)))) |
fullRepaint = true; |
} |
+ // If there is no intersection between the old and the new bounds, invalidating |
+ // the difference is more expensive than just doing a full repaint. |
+ if (!fullRepaint && !newBounds.intersects(oldBounds)) |
+ fullRepaint = true; |
+ |
if (!repaintContainer) |
repaintContainer = v; |