Index: third_party/WebKit/Source/core/layout/LayoutBox.cpp |
diff --git a/third_party/WebKit/Source/core/layout/LayoutBox.cpp b/third_party/WebKit/Source/core/layout/LayoutBox.cpp |
index 6afb5f4d8739a566deca49491e37c711d15a3459..f260e4094fbd28f352e3bab0bd9ca71ea921bf11 100644 |
--- a/third_party/WebKit/Source/core/layout/LayoutBox.cpp |
+++ b/third_party/WebKit/Source/core/layout/LayoutBox.cpp |
@@ -1484,7 +1484,8 @@ void LayoutBox::imageChanged(WrappedImagePtr image, const IntRect*) |
if ((style()->borderImage().image() && style()->borderImage().image()->data() == image) |
|| (style()->maskBoxImage().image() && style()->maskBoxImage().image()->data() == image)) { |
setShouldDoFullPaintInvalidation(); |
- return; |
+ } else if (!invalidatePaintOfImageLayers(image, style()->backgroundLayers())) { |
+ invalidatePaintOfImageLayers(image, style()->maskLayers()); |
} |
ShapeValue* shapeOutsideValue = style()->shapeOutside(); |
chrishtr
2016/08/09 16:05:17
I guess you're fixing a bug also that this code di
Xianzhu
2016/08/09 18:51:48
There might be a bug if background and shape-outsi
|
@@ -1495,9 +1496,6 @@ void LayoutBox::imageChanged(WrappedImagePtr image, const IntRect*) |
markShapeOutsideDependentsForLayout(); |
} |
} |
- |
- if (!invalidatePaintOfLayerRectsForImage(image, style()->backgroundLayers(), true)) |
- invalidatePaintOfLayerRectsForImage(image, style()->maskLayers(), false); |
} |
ResourcePriority LayoutBox::computeResourcePriority() const |
@@ -1525,21 +1523,27 @@ ResourcePriority LayoutBox::computeResourcePriority() const |
return ResourcePriority(isVisible ? ResourcePriority::Visible : ResourcePriority::NotVisible, screenArea); |
} |
-bool LayoutBox::invalidatePaintOfLayerRectsForImage(WrappedImagePtr image, const FillLayer& layers, bool drawingBackground) |
+bool LayoutBox::invalidatePaintOfImageLayers(WrappedImagePtr image, const FillLayer& layers) |
{ |
- if (drawingBackground && (isDocumentElement() || backgroundStolenForBeingBody())) |
+ bool isBackground = &layers == &styleRef().backgroundLayers(); |
eae
2016/08/09 14:41:48
NIT: Comparing references like this is a little od
Xianzhu
2016/08/09 18:51:48
We have FillLayer::operator== that compares the va
|
+ if (isBackground && (isDocumentElement() || backgroundStolenForBeingBody())) |
Stephen Chennney
2016/08/09 14:22:31
if (isBackground) {
if (isDocumentElement() || .
Xianzhu
2016/08/09 18:51:48
Done.
|
return false; |
+ |
+ if (isBackground) { |
+ invalidateBackgroundObscurationStatus(); |
+ if (backgroundIsKnownToBeObscured()) |
+ return false; |
+ } |
+ |
for (const FillLayer* curLayer = &layers; curLayer; curLayer = curLayer->next()) { |
if (curLayer->image() && image == curLayer->image()->data()) { |
bool maybeAnimated = curLayer->image()->cachedImage() && curLayer->image()->cachedImage()->getImage() && curLayer->image()->cachedImage()->getImage()->maybeAnimated(); |
- if (maybeAnimated && drawingBackground) |
+ if (maybeAnimated && isBackground) { |
setShouldDoFullPaintInvalidation(PaintInvalidationDelayedFull); |
- else |
+ } else { |
setShouldDoFullPaintInvalidation(); |
- |
- if (drawingBackground) |
- invalidateBackgroundObscurationStatus(); |
- return true; |
+ return true; |
+ } |
} |
} |
return false; |