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

Unified Diff: Source/core/svg/SVGDocumentExtensions.cpp

Issue 327473002: Prepare SVGDocumentExtensions::m_elementDependencies for oilpan (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 6 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
Index: Source/core/svg/SVGDocumentExtensions.cpp
diff --git a/Source/core/svg/SVGDocumentExtensions.cpp b/Source/core/svg/SVGDocumentExtensions.cpp
index 6f678e64e5167d0c64efa8a5029687b7485050a9..378690592da1750b9c403e4d261a2a6b69339258 100644
--- a/Source/core/svg/SVGDocumentExtensions.cpp
+++ b/Source/core/svg/SVGDocumentExtensions.cpp
@@ -38,6 +38,7 @@ namespace WebCore {
SVGDocumentExtensions::SVGDocumentExtensions(Document* document)
: m_document(document)
+ , m_elementDependencies(adoptPtrWillBeNoop(new ElementDependenciesMap))
, m_resourcesCache(adoptPtr(new SVGResourcesCache))
#if !ASSERT_DISABLED
, m_inRelativeLengthSVGRootsInvalidation(false)
@@ -307,11 +308,11 @@ Element* SVGDocumentExtensions::removeElementFromPendingResourcesForRemoval(cons
return element;
}
-HashSet<SVGElement*>* SVGDocumentExtensions::setOfElementsReferencingTarget(SVGElement* referencedElement) const
+WeakSVGElementSet* SVGDocumentExtensions::setOfElementsReferencingTarget(SVGElement* referencedElement) const
{
ASSERT(referencedElement);
- const HashMap<SVGElement*, OwnPtr<HashSet<SVGElement*> > >::const_iterator it = m_elementDependencies.find(referencedElement);
- if (it == m_elementDependencies.end())
+ const ElementDependenciesMap::const_iterator it = m_elementDependencies->find(referencedElement);
+ if (it == m_elementDependencies->end())
return 0;
return it->value.get();
}
@@ -321,25 +322,25 @@ void SVGDocumentExtensions::addElementReferencingTarget(SVGElement* referencingE
ASSERT(referencingElement);
ASSERT(referencedElement);
- if (HashSet<SVGElement*>* elements = m_elementDependencies.get(referencedElement)) {
+ if (WeakSVGElementSet* elements = m_elementDependencies->get(referencedElement)) {
elements->add(referencingElement);
return;
}
- OwnPtr<HashSet<SVGElement*> > elements = adoptPtr(new HashSet<SVGElement*>);
+ OwnPtrWillBeRawPtr<WeakSVGElementSet> elements = adoptPtrWillBeNoop(new WeakSVGElementSet);
elements->add(referencingElement);
- m_elementDependencies.set(referencedElement, elements.release());
+ m_elementDependencies->set(referencedElement, elements.release());
}
void SVGDocumentExtensions::removeAllTargetReferencesForElement(SVGElement* referencingElement)
{
- Vector<SVGElement*> toBeRemoved;
+ WillBeHeapVector<RawPtrWillBeMember<SVGElement> > toBeRemoved;
- HashMap<SVGElement*, OwnPtr<HashSet<SVGElement*> > >::iterator end = m_elementDependencies.end();
- for (HashMap<SVGElement*, OwnPtr<HashSet<SVGElement*> > >::iterator it = m_elementDependencies.begin(); it != end; ++it) {
+ ElementDependenciesMap::iterator end = m_elementDependencies->end();
+ for (ElementDependenciesMap::iterator it = m_elementDependencies->begin(); it != end; ++it) {
SVGElement* referencedElement = it->key;
- HashSet<SVGElement*>* referencingElements = it->value.get();
- HashSet<SVGElement*>::iterator setIt = referencingElements->find(referencingElement);
+ WeakSVGElementSet* referencingElements = it->value.get();
+ WeakSVGElementSet::iterator setIt = referencingElements->find(referencingElement);
if (setIt == referencingElements->end())
continue;
@@ -348,28 +349,26 @@ void SVGDocumentExtensions::removeAllTargetReferencesForElement(SVGElement* refe
toBeRemoved.append(referencedElement);
}
- m_elementDependencies.removeAll(toBeRemoved);
+ m_elementDependencies->removeAll(toBeRemoved);
}
void SVGDocumentExtensions::rebuildAllElementReferencesForTarget(SVGElement* referencedElement)
{
ASSERT(referencedElement);
- HashMap<SVGElement*, OwnPtr<HashSet<SVGElement*> > >::iterator it = m_elementDependencies.find(referencedElement);
- if (it == m_elementDependencies.end())
+ ElementDependenciesMap::iterator it = m_elementDependencies->find(referencedElement);
+ if (it == m_elementDependencies->end())
return;
ASSERT(it->key == referencedElement);
- Vector<SVGElement*> toBeNotified;
- HashSet<SVGElement*>* referencingElements = it->value.get();
- HashSet<SVGElement*>::iterator setEnd = referencingElements->end();
- for (HashSet<SVGElement*>::iterator setIt = referencingElements->begin(); setIt != setEnd; ++setIt)
- toBeNotified.append(*setIt);
+ WillBeHeapVector<RawPtrWillBeMember<SVGElement> > toBeNotified;
+ WeakSVGElementSet* referencingElements = it->value.get();
+ copyToVector(*referencingElements, toBeNotified);
// Force rebuilding the referencingElement so it knows about this change.
- Vector<SVGElement*>::iterator vectorEnd = toBeNotified.end();
- for (Vector<SVGElement*>::iterator vectorIt = toBeNotified.begin(); vectorIt != vectorEnd; ++vectorIt) {
+ WillBeHeapVector<RawPtrWillBeMember<SVGElement> >::iterator vectorEnd = toBeNotified.end();
+ for (WillBeHeapVector<RawPtrWillBeMember<SVGElement> >::iterator vectorIt = toBeNotified.begin(); vectorIt != vectorEnd; ++vectorIt) {
// Before rebuilding referencingElement ensure it was not removed from under us.
- if (HashSet<SVGElement*>* referencingElements = setOfElementsReferencingTarget(referencedElement)) {
+ if (WeakSVGElementSet* referencingElements = setOfElementsReferencingTarget(referencedElement)) {
if (referencingElements->contains(*vectorIt))
(*vectorIt)->svgAttributeChanged(XLinkNames::hrefAttr);
}
@@ -379,12 +378,12 @@ void SVGDocumentExtensions::rebuildAllElementReferencesForTarget(SVGElement* ref
void SVGDocumentExtensions::removeAllElementReferencesForTarget(SVGElement* referencedElement)
{
ASSERT(referencedElement);
- HashMap<SVGElement*, OwnPtr<HashSet<SVGElement*> > >::iterator it = m_elementDependencies.find(referencedElement);
- if (it == m_elementDependencies.end())
+ ElementDependenciesMap::iterator it = m_elementDependencies->find(referencedElement);
+ if (it == m_elementDependencies->end())
return;
ASSERT(it->key == referencedElement);
- m_elementDependencies.remove(it);
+ m_elementDependencies->remove(it);
}
void SVGDocumentExtensions::addSVGRootWithRelativeLengthDescendents(SVGSVGElement* svgRoot)
@@ -480,9 +479,11 @@ SVGSVGElement* SVGDocumentExtensions::rootElement() const
void SVGDocumentExtensions::trace(Visitor* visitor)
{
+ visitor->trace(m_document);
visitor->trace(m_timeContainers);
visitor->trace(m_svgFontFaceElements);
visitor->trace(m_pendingSVGFontFaceElementsForRemoval);
+ visitor->trace(m_elementDependencies);
}
}

Powered by Google App Engine
This is Rietveld 408576698