Chromium Code Reviews| Index: Source/core/rendering/svg/RenderSVGResourceContainer.cpp |
| diff --git a/Source/core/rendering/svg/RenderSVGResourceContainer.cpp b/Source/core/rendering/svg/RenderSVGResourceContainer.cpp |
| index 575266e1a0b35db6f3f611e8d59f6d5684f86b06..d0ff572c4df39129bc24b753370d23cb731fd028 100644 |
| --- a/Source/core/rendering/svg/RenderSVGResourceContainer.cpp |
| +++ b/Source/core/rendering/svg/RenderSVGResourceContainer.cpp |
| @@ -23,11 +23,12 @@ |
| #include "core/rendering/RenderLayer.h" |
| #include "core/rendering/RenderView.h" |
| -#include "core/rendering/svg/RenderSVGRoot.h" |
| #include "core/rendering/svg/SVGRenderingContext.h" |
| #include "core/rendering/svg/SVGResourcesCache.h" |
| #include "core/svg/SVGGraphicsElement.h" |
| +#include "wtf/TemporaryChange.h" |
| + |
| namespace WebCore { |
| static inline SVGDocumentExtensions* svgExtensionsFromElement(SVGElement* element) |
| @@ -41,6 +42,7 @@ RenderSVGResourceContainer::RenderSVGResourceContainer(SVGElement* node) |
| , m_id(node->getIdAttribute()) |
| , m_registered(false) |
| , m_isInvalidating(false) |
| + , m_isInLayout(false) |
| { |
| } |
| @@ -52,9 +54,14 @@ RenderSVGResourceContainer::~RenderSVGResourceContainer() |
| void RenderSVGResourceContainer::layout() |
| { |
| + if (!needsLayout() || m_isInLayout) |
|
pdr.
2013/09/23 22:26:02
Should these be asserts?
f(malita)
2013/09/23 23:20:33
m_isInLayout is used for runtime layout cycle dete
|
| + return; |
| + |
| + TemporaryChange<bool> inLayoutChange(m_isInLayout, true); |
| + |
| // Invalidate all resources if our layout changed. |
| if (everHadLayout() && selfNeedsLayout()) |
| - RenderSVGRoot::addResourceForClientInvalidation(this); |
| + removeAllClientsFromCache(); |
| RenderSVGHiddenContainer::layout(); |
| } |