| Index: third_party/WebKit/Source/core/layout/svg/LayoutSVGShape.cpp | 
| diff --git a/third_party/WebKit/Source/core/layout/svg/LayoutSVGShape.cpp b/third_party/WebKit/Source/core/layout/svg/LayoutSVGShape.cpp | 
| index b7671c4696908d97dcb7e9ab9ca4fa87a98a1779..a049d04325e2849b8ecedb9dc70ba5a42e46425b 100644 | 
| --- a/third_party/WebKit/Source/core/layout/svg/LayoutSVGShape.cpp | 
| +++ b/third_party/WebKit/Source/core/layout/svg/LayoutSVGShape.cpp | 
| @@ -156,31 +156,40 @@ void LayoutSVGShape::updateLocalTransform() | 
|  | 
| void LayoutSVGShape::layout() | 
| { | 
| -    bool updateCachedBoundariesInParents = false; | 
| LayoutAnalyzer::Scope analyzer(*this); | 
|  | 
| +    // Invalidate all resources of this client if our layout changed. | 
| +    if (everHadLayout() && selfNeedsLayout()) | 
| +        SVGResourcesCache::clientLayoutChanged(this); | 
| + | 
| +    bool updateParentBoundaries = false; | 
| +    // updateShapeFromElement() also updates the object & stroke bounds - which | 
| +    // feeds into the paint invalidation rect - so we need to call it for both | 
| +    // the shape-update and the bounds-update flag, since . | 
| if (m_needsShapeUpdate || m_needsBoundariesUpdate) { | 
| updateShapeFromElement(); | 
| m_needsShapeUpdate = false; | 
| -        updatePaintInvalidationBoundingBox(); | 
| + | 
| +        m_paintInvalidationBoundingBox = strokeBoundingBox(); | 
| +        SVGLayoutSupport::intersectPaintInvalidationRectWithResources(this, m_paintInvalidationBoundingBox); | 
| m_needsBoundariesUpdate = false; | 
| -        updateCachedBoundariesInParents = true; | 
| + | 
| +        updateParentBoundaries = true; | 
| } | 
|  | 
| if (m_needsTransformUpdate) { | 
| updateLocalTransform(); | 
| m_needsTransformUpdate = false; | 
| -        updateCachedBoundariesInParents = true; | 
| +        updateParentBoundaries = true; | 
| } | 
|  | 
| -    // Invalidate all resources of this client if our layout changed. | 
| -    if (everHadLayout() && selfNeedsLayout()) | 
| -        SVGResourcesCache::clientLayoutChanged(this); | 
| - | 
| // If our bounds changed, notify the parents. | 
| -    if (updateCachedBoundariesInParents) | 
| +    if (updateParentBoundaries) | 
| LayoutSVGModelObject::setNeedsBoundariesUpdate(); | 
|  | 
| +    ASSERT(!m_needsShapeUpdate); | 
| +    ASSERT(!m_needsBoundariesUpdate); | 
| +    ASSERT(!m_needsTransformUpdate); | 
| clearNeedsLayout(); | 
| } | 
|  | 
| @@ -283,12 +292,6 @@ FloatRect LayoutSVGShape::calculateStrokeBoundingBox() const | 
| return strokeBoundingBox; | 
| } | 
|  | 
| -void LayoutSVGShape::updatePaintInvalidationBoundingBox() | 
| -{ | 
| -    m_paintInvalidationBoundingBox = strokeBoundingBox(); | 
| -    SVGLayoutSupport::intersectPaintInvalidationRectWithResources(this, m_paintInvalidationBoundingBox); | 
| -} | 
| - | 
| float LayoutSVGShape::strokeWidth() const | 
| { | 
| SVGLengthContext lengthContext(element()); | 
|  |