Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1606)

Unified Diff: Source/core/rendering/svg/SVGResourcesCycleSolver.cpp

Issue 294393004: Simplify SVGResourcesCycleSolver::resourceContainsCycles (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Fold the method; Use pre-order traversal to avoid recursion. Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « LayoutTests/svg/custom/pattern-content-cycle-w-resourceless-container-expected.txt ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/rendering/svg/SVGResourcesCycleSolver.cpp
diff --git a/Source/core/rendering/svg/SVGResourcesCycleSolver.cpp b/Source/core/rendering/svg/SVGResourcesCycleSolver.cpp
index f1a40d490b9bdebf0d91c30a7f1fd5039e7e21d9..8c48d7bd3d4ab6a29c95655d68df5200e991c3ed 100644
--- a/Source/core/rendering/svg/SVGResourcesCycleSolver.cpp
+++ b/Source/core/rendering/svg/SVGResourcesCycleSolver.cpp
@@ -51,25 +51,14 @@ bool SVGResourcesCycleSolver::resourceContainsCycles(RenderObject* renderer) con
{
ASSERT(renderer);
- // First operate on the resources of the given renderer.
+ // First (first loop iteration) operate on the resources of the given
+ // renderer.
// <marker id="a"> <path marker-start="url(#b)"/> ...
// <marker id="b" marker-start="url(#a)"/>
- if (SVGResources* resources = SVGResourcesCache::cachedResourcesForRenderObject(renderer)) {
- HashSet<RenderSVGResourceContainer*> resourceSet;
- resources->buildSetOfResources(resourceSet);
-
- // Walk all resources and check wheter they reference any resource contained in the resources set.
- HashSet<RenderSVGResourceContainer*>::iterator end = resourceSet.end();
- for (HashSet<RenderSVGResourceContainer*>::iterator it = resourceSet.begin(); it != end; ++it) {
- if (m_allResources.contains(*it))
- return true;
- }
- }
-
// Then operate on the child resources of the given renderer.
// <marker id="a"> <path marker-start="url(#b)"/> ...
// <marker id="b"> <path marker-start="url(#a)"/> ...
- for (RenderObject* child = renderer->slowFirstChild(); child; child = child->nextSibling()) {
+ for (RenderObject* child = renderer; child; child = child->nextInPreOrder(renderer)) {
SVGResources* childResources = SVGResourcesCache::cachedResourcesForRenderObject(child);
if (!childResources)
continue;
@@ -78,18 +67,13 @@ bool SVGResourcesCycleSolver::resourceContainsCycles(RenderObject* renderer) con
HashSet<RenderSVGResourceContainer*> childSet;
childResources->buildSetOfResources(childSet);
- // Walk all child resources and check wheter they reference any resource contained in the resources set.
+ // Walk all child resources and check whether they reference any resource contained in the resources set.
HashSet<RenderSVGResourceContainer*>::iterator end = childSet.end();
for (HashSet<RenderSVGResourceContainer*>::iterator it = childSet.begin(); it != end; ++it) {
if (m_allResources.contains(*it))
return true;
}
-
- // Walk children recursively, stop immediately if we found a cycle
- if (resourceContainsCycles(child))
- return true;
}
-
return false;
}
« no previous file with comments | « LayoutTests/svg/custom/pattern-content-cycle-w-resourceless-container-expected.txt ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698