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

Unified Diff: Source/core/html/HTMLCollection.h

Issue 280123002: Oilpan: move LiveNodeList collections to the heap. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Have NodeRareData clear out NodeListsNodeData instead. 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 | « Source/core/html/HTMLAllCollection.idl ('k') | Source/core/html/HTMLCollection.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/html/HTMLCollection.h
diff --git a/Source/core/html/HTMLCollection.h b/Source/core/html/HTMLCollection.h
index 4f6d52a467a501c0402f0784c8d0a8aa38677569..6fd0eaf751a471445ceedbd193146ebfe9b0b6c4 100644
--- a/Source/core/html/HTMLCollection.h
+++ b/Source/core/html/HTMLCollection.h
@@ -33,14 +33,15 @@
namespace WebCore {
-class HTMLCollection : public ScriptWrappable, public RefCounted<HTMLCollection>, public LiveNodeListBase {
+class HTMLCollection : public RefCountedWillBeGarbageCollectedFinalized<HTMLCollection>, public ScriptWrappable, public LiveNodeListBase {
+ WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(HTMLCollection);
public:
enum ItemAfterOverrideType {
OverridesItemAfter,
DoesNotOverrideItemAfter,
};
- static PassRefPtr<HTMLCollection> create(ContainerNode& base, CollectionType);
+ static PassRefPtrWillBeRawPtr<HTMLCollection> create(ContainerNode& base, CollectionType);
virtual ~HTMLCollection();
virtual void invalidateCache(Document* oldDocument = 0) const OVERRIDE;
void invalidateCacheForAttribute(const QualifiedName*) const;
@@ -53,7 +54,7 @@ public:
void namedPropertyEnumerator(Vector<String>& names, ExceptionState&);
// Non-DOM API
- void namedItems(const AtomicString& name, Vector<RefPtr<Element> >&) const;
+ void namedItems(const AtomicString& name, WillBeHeapVector<RefPtrWillBeMember<Element> >&) const;
bool isEmpty() const { return m_collectionIndexCache.isEmpty(*this); }
bool hasExactlyOneItem() const { return m_collectionIndexCache.hasExactlyOneNode(*this); }
@@ -64,29 +65,37 @@ public:
Element* traverseForwardToOffset(unsigned offset, Element& currentElement, unsigned& currentOffset) const;
Element* traverseBackwardToOffset(unsigned offset, Element& currentElement, unsigned& currentOffset) const;
+ virtual void trace(Visitor*);
+
protected:
HTMLCollection(ContainerNode& base, CollectionType, ItemAfterOverrideType);
- class NamedItemCache {
+ class NamedItemCache FINAL : public NoBaseWillBeGarbageCollected<NamedItemCache> {
public:
- static PassOwnPtr<NamedItemCache> create()
+ static PassOwnPtrWillBeRawPtr<NamedItemCache> create()
{
- return adoptPtr(new NamedItemCache);
+ return adoptPtrWillBeNoop(new NamedItemCache);
}
- Vector<Element*>* getElementsById(const AtomicString& id) const { return m_idCache.get(id.impl()); }
- Vector<Element*>* getElementsByName(const AtomicString& name) const { return m_nameCache.get(name.impl()); }
+ WillBeHeapVector<RawPtrWillBeMember<Element> >* getElementsById(const AtomicString& id) const { return m_idCache.get(id.impl()); }
+ WillBeHeapVector<RawPtrWillBeMember<Element> >* getElementsByName(const AtomicString& name) const { return m_nameCache.get(name.impl()); }
void addElementWithId(const AtomicString& id, Element* element) { addElementToMap(m_idCache, id, element); }
void addElementWithName(const AtomicString& name, Element* element) { addElementToMap(m_nameCache, name, element); }
+ void trace(Visitor* visitor)
+ {
+ visitor->trace(m_idCache);
+ visitor->trace(m_nameCache);
+ }
+
private:
NamedItemCache();
- typedef HashMap<StringImpl*, OwnPtr<Vector<Element*> > > StringToElementsMap;
+ typedef WillBeHeapHashMap<StringImpl*, OwnPtrWillBeMember<WillBeHeapVector<RawPtrWillBeMember<Element> > > > StringToElementsMap;
static void addElementToMap(StringToElementsMap& map, const AtomicString& key, Element* element)
{
- OwnPtr<Vector<Element*> >& vector = map.add(key.impl(), nullptr).storedValue->value;
+ OwnPtrWillBeMember<WillBeHeapVector<RawPtrWillBeMember<Element> > >& vector = map.add(key.impl(), nullptr).storedValue->value;
if (!vector)
- vector = adoptPtr(new Vector<Element*>);
+ vector = adoptPtrWillBeNoop(new WillBeHeapVector<RawPtrWillBeMember<Element> >);
vector->append(element);
}
@@ -102,10 +111,10 @@ protected:
virtual void updateIdNameCache() const;
bool hasValidIdNameCache() const { return m_namedItemCache; }
- void setNamedItemCache(PassOwnPtr<NamedItemCache> cache) const
+ void setNamedItemCache(PassOwnPtrWillBeRawPtr<NamedItemCache> cache) const
{
ASSERT(!m_namedItemCache);
- document().incrementNodeListWithIdNameCacheCount();
+ document().registerNodeListWithIdNameCache(this);
m_namedItemCache = cache;
}
@@ -134,12 +143,12 @@ private:
void unregisterIdNameCacheFromDocument(Document& document) const
{
ASSERT(hasValidIdNameCache());
- document.decrementNodeListWithIdNameCacheCount();
+ document.unregisterNodeListWithIdNameCache(this);
}
const unsigned m_overridesItemAfter : 1;
const unsigned m_shouldOnlyIncludeDirectChildren : 1;
- mutable OwnPtr<NamedItemCache> m_namedItemCache;
+ mutable OwnPtrWillBeMember<NamedItemCache> m_namedItemCache;
mutable CollectionIndexCache<HTMLCollection, Element> m_collectionIndexCache;
};
« no previous file with comments | « Source/core/html/HTMLAllCollection.idl ('k') | Source/core/html/HTMLCollection.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698