Index: Source/core/layout/LayoutImage.cpp |
diff --git a/Source/core/layout/LayoutImage.cpp b/Source/core/layout/LayoutImage.cpp |
index d93280a590121c736797572bd0154ec2b1a3282f..237c5aa70db2b5f54ce9f24aecacf901736ee274 100644 |
--- a/Source/core/layout/LayoutImage.cpp |
+++ b/Source/core/layout/LayoutImage.cpp |
@@ -39,6 +39,7 @@ |
#include "core/html/HTMLInputElement.h" |
#include "core/html/HTMLMapElement.h" |
#include "core/layout/HitTestResult.h" |
+#include "core/layout/LayoutPart.h" |
#include "core/layout/LayoutView.h" |
#include "core/layout/PaintInfo.h" |
#include "core/layout/TextRunConstructor.h" |
@@ -175,6 +176,30 @@ void LayoutImage::invalidatePaintAndMarkForLayoutIfNeeded() |
contentChanged(ImageChanged); |
} |
+bool LayoutImage::rectIntersectsVisibleViewport(const LayoutRect& localRect) |
+{ |
+ LayoutRect rect = localRect; |
+ LayoutView* layoutView = view(); |
+ while (layoutView->frame()->ownerLayoutObject()) |
+ layoutView = layoutView->frame()->ownerLayoutObject()->view(); |
+ mapRectToPaintInvalidationBacking(layoutView, rect, 0); |
+ return rect.intersects(LayoutRect(layoutView->frameView()->visualViewportRect())); |
+} |
+ |
+PaintInvalidationReason LayoutImage::invalidatePaintIfNeeded(const PaintInvalidationState& paintInvalidationState, const LayoutBoxModelObject& paintInvalidationContainer) |
+{ |
+ if (!RuntimeEnabledFeatures::slimmingPaintEnabled()) |
+ return LayoutReplaced::invalidatePaintIfNeeded(paintInvalidationState, paintInvalidationContainer); |
+ |
+ if (!imageResource() || !imageResource()->image() || !imageResource()->image()->maybeAnimated() |
+ || rectIntersectsVisibleViewport(visualOverflowRect())) { |
+ return LayoutReplaced::invalidatePaintIfNeeded(paintInvalidationState, paintInvalidationContainer); |
esprehn
2015/03/20 06:52:32
It might be nice to paint the first frame of an an
chrishtr
2015/03/20 16:44:45
That is indeed a bug in this version, thanks for p
|
+ } |
+ |
+ return PaintInvalidationDelayedFull; |
+} |
+ |
+ |
void LayoutImage::notifyFinished(Resource* newImage) |
{ |
if (!m_imageResource) |