 Chromium Code Reviews
 Chromium Code Reviews Issue 1026823002:
  [S.P.] Don't draw frames of animated images that are offscreen  (Closed) 
  Base URL: svn://svn.chromium.org/blink/trunk
    
  
    Issue 1026823002:
  [S.P.] Don't draw frames of animated images that are offscreen  (Closed) 
  Base URL: svn://svn.chromium.org/blink/trunk| 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) | 
| 
esprehn
2015/03/25 05:06:36
This generic method doesn't seem neccesary, can we
 
chrishtr
2015/03/25 23:30:35
Done.
 | 
| +{ | 
| + 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); | 
| + } | 
| + | 
| + return PaintInvalidationDelayedFull; | 
| +} | 
| + | 
| + | 
| void LayoutImage::notifyFinished(Resource* newImage) | 
| { | 
| if (!m_imageResource) |