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

Unified Diff: Source/heap/Heap.h

Issue 106423003: [oilpan] Rename visit to mark. (Closed) Base URL: svn://svn.chromium.org/blink/branches/oilpan
Patch Set: Fix typo Created 7 years 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/heap/Heap.h
diff --git a/Source/heap/Heap.h b/Source/heap/Heap.h
index 19ba86b1bed229144ff0f0405516dd2cb31e4e5a..13d1cee310655c8a483d7305fc0b2cf489dbdf41 100644
--- a/Source/heap/Heap.h
+++ b/Source/heap/Heap.h
@@ -225,7 +225,7 @@ public:
inline bool hasDebugMark() const;
// Zap magic number with a new magic number that means there was once an
- // object allocated here, but it was freed because nobody visited it during
+ // object allocated here, but it was freed because nobody marked it during
// GC.
void zapMagic();
@@ -348,7 +348,7 @@ public:
Address address() { return reinterpret_cast<Address>(this); }
const GCInfo* gcInfo() { return m_gcInfo; }
- virtual bool checkAndVisitPointer(Visitor*, Address) = 0;
+ virtual bool checkAndMarkPointer(Visitor*, Address) = 0;
PageMemory* storage() const { return m_storage; }
@@ -408,9 +408,9 @@ public:
bool isMarked();
void unmark();
void getStats(HeapStats&);
- void visit(Visitor*);
+ void trace(Visitor*);
Erik Corry 2013/12/06 10:30:33 Should this not be mark?
Mads Ager (chromium) 2013/12/06 11:00:10 Yeah, I probably went a little bit too far with th
void finalize();
- virtual bool checkAndVisitPointer(Visitor*, Address);
+ virtual bool checkAndMarkPointer(Visitor*, Address);
private:
friend class Heap;
@@ -513,7 +513,7 @@ public:
void sweep();
void clearObjectStartBitMap();
void finalize(Header*);
- virtual bool checkAndVisitPointer(Visitor*, Address);
+ virtual bool checkAndMarkPointer(Visitor*, Address);
ThreadHeap<Header>* heap() { return m_heap; }
#if USE_ASAN
void poisonUnmarkedObjects();
@@ -594,20 +594,6 @@ private:
friend class ThreadState;
};
-enum TraceRequirement {
- // TraceChecker does not perform checks, because there are weak pointers
- // present that cannot be distinguished from pointers that were incorrectly
- // not visited. Later, however, we can check that the weak pointers were
- // cleared by the weak pointer callback.
- NoRequirement,
- // The trace method must visit all member pointers.
- AllPointersMustBeVisited,
- // All member pointers must be marked live if they were not already. This
- // also means that all weak pointers must be cleared if they are not
- // pointing to objects that are marked live.
- AllPointersMustBeMarked
-};
-
typedef void (*TraceTrampoline)(VisitorCallback, Visitor*, void*);
class Heap {
@@ -648,7 +634,7 @@ public:
static void prepareForGC();
static void visitRoots(Visitor*);
- static Address checkAndVisitPointer(Visitor*, Address);
+ static Address checkAndMarkPointer(Visitor*, Address);
static void getStats(HeapStats*);
@@ -687,7 +673,7 @@ public:
// Large objects and adding pages are handled by the ThreadHeap
virtual BaseHeapPage* heapPageFromAddress(Address) = 0;
virtual BaseHeapPage* largeHeapObjectFromAddress(Address) = 0;
- virtual bool checkAndVisitLargeHeapObjects(Visitor*, Address) = 0;
+ virtual bool checkAndMarkLargeHeapObjects(Visitor*, Address) = 0;
virtual void sweep() = 0;
virtual void finalizeAll(const void* except = 0) = 0;
virtual bool inFinalizeAll() = 0;
@@ -715,7 +701,7 @@ public:
virtual BaseHeapPage* heapPageFromAddress(Address);
virtual BaseHeapPage* largeHeapObjectFromAddress(Address);
- virtual bool checkAndVisitLargeHeapObjects(Visitor*, Address);
+ virtual bool checkAndMarkLargeHeapObjects(Visitor*, Address);
virtual void sweep();
virtual void finalizeAll(const void* except = 0);
virtual bool inFinalizeAll() { return m_inFinalizeAll; }
@@ -1073,7 +1059,7 @@ public:
static void init(CallbackStack** first);
static void shutdown(CallbackStack** first);
- bool popAndTrace(CallbackStack** first, Visitor*, TraceRequirement, TraceTrampoline);
+ bool popAndTrace(CallbackStack** first, Visitor*, TraceTrampoline);
Item* allocateEntry(CallbackStack** first)
{
@@ -1155,130 +1141,130 @@ void FinalizerTrait<HeapHashTableBacking<Key, Value, Extractor, Traits, KeyTrait
}
}
-template<bool visitWeakPointersStrongly, typename T, typename Traits>
+template<bool markWeakPointersStrongly, typename T, typename Traits>
struct BaseVisitVectorBackingTrait {
- static void visit(WebCore::Visitor* visitor, void* self)
+ static void mark(WebCore::Visitor* visitor, void* self)
{
// The alllocator can oversize the allocation a little, according to
// the allocation granularity. The extra size is included in the
// payloadSize call below, since there is nowhere to store the
// originally allocated memory. This assert ensures that visiting the
// last bit of memory can't cause trouble.
- COMPILE_ASSERT(!Traits::needsVisiting || sizeof(T) > allocationGranularity || Traits::canInitializeWithMemset, HeapOverallocationCanCauseSpuriousVisits);
+ COMPILE_ASSERT(!Traits::needsMarking || sizeof(T) > allocationGranularity || Traits::canInitializeWithMemset, HeapOverallocationCanCauseSpuriousVisits);
T* array = reinterpret_cast<T*>(self);
WebCore::FinalizedHeapObjectHeader* header = WebCore::FinalizedHeapObjectHeader::fromPayload(self);
// Use the payload size as recorded by the heap to determine how many
- // elements to visit.
+ // elements to mark.
int length = header->payloadSize() / sizeof(T);
for (int i = 0; i < length; i++)
- VisitCollectionBackingTrait<Traits::needsVisiting, Traits::isWeak, visitWeakPointersStrongly, T, Traits>::visit(visitor, array[i]);
+ CollectionBackingTraceTrait<Traits::needsMarking, Traits::isWeak, markWeakPointersStrongly, T, Traits>::mark(visitor, array[i]);
}
};
-template<bool visitWeakPointersStrongly, typename Key, typename Value, typename Extractor, typename Traits, typename KeyTraits>
+template<bool markWeakPointersStrongly, typename Key, typename Value, typename Extractor, typename Traits, typename KeyTraits>
struct BaseVisitHashTableBackingTrait {
- static void visit(WebCore::Visitor* visitor, void* self)
+ static void mark(WebCore::Visitor* visitor, void* self)
{
Value* array = reinterpret_cast<Value*>(self);
WebCore::FinalizedHeapObjectHeader* header = WebCore::FinalizedHeapObjectHeader::fromPayload(self);
int length = header->payloadSize() / sizeof(Value);
for (int i = 0; i < length; i++) {
if (!WTF::HashTableHelper<Value, Extractor, KeyTraits>::isEmptyOrDeletedBucket(array[i]))
- VisitCollectionBackingTrait<Traits::needsVisiting, Traits::isWeak, visitWeakPointersStrongly, Value, Traits>::visit(visitor, array[i]);
+ CollectionBackingTraceTrait<Traits::needsMarking, Traits::isWeak, markWeakPointersStrongly, Value, Traits>::mark(visitor, array[i]);
}
}
};
-template<bool visitWeakPointersStrongly, typename Key, typename Value, typename Traits>
+template<bool markWeakPointersStrongly, typename Key, typename Value, typename Traits>
struct BaseVisitKeyValuePairTrait {
- static void visit(WebCore::Visitor* visitor, WTF::KeyValuePair<Key, Value>& self)
+ static void mark(WebCore::Visitor* visitor, WTF::KeyValuePair<Key, Value>& self)
{
- ASSERT(Traits::needsVisiting || (Traits::isWeak && visitWeakPointersStrongly));
- VisitCollectionBackingTrait<Traits::KeyTraits::needsVisiting, Traits::KeyTraits::isWeak, visitWeakPointersStrongly, Key, typename Traits::KeyTraits>::visit(visitor, self.key);
- VisitCollectionBackingTrait<Traits::ValueTraits::needsVisiting, Traits::ValueTraits::isWeak, visitWeakPointersStrongly, Value, typename Traits::ValueTraits>::visit(visitor, self.value);
+ ASSERT(Traits::needsMarking || (Traits::isWeak && markWeakPointersStrongly));
+ CollectionBackingTraceTrait<Traits::KeyTraits::needsMarking, Traits::KeyTraits::isWeak, markWeakPointersStrongly, Key, typename Traits::KeyTraits>::mark(visitor, self.key);
+ CollectionBackingTraceTrait<Traits::ValueTraits::needsMarking, Traits::ValueTraits::isWeak, markWeakPointersStrongly, Value, typename Traits::ValueTraits>::mark(visitor, self.value);
}
};
-// FFX - Things that don't need visiting and have no weak pointers.
-template<bool visitWeakPointersStrongly, typename T, typename U>
-struct VisitCollectionBackingTrait<false, false, visitWeakPointersStrongly, T, U> {
- static void visit(Visitor*, const T&) { }
- static void visit(Visitor*, const void*) { }
+// FFX - Things that don't need marking and have no weak pointers.
+template<bool markWeakPointersStrongly, typename T, typename U>
+struct CollectionBackingTraceTrait<false, false, markWeakPointersStrongly, T, U> {
+ static void mark(Visitor*, const T&) { }
+ static void mark(Visitor*, const void*) { }
};
-// FTF - Things that don't need visiting. They have weak pointers, but we are
-// not visiting weak pointers in this object in this GC.
+// FTF - Things that don't need marking. They have weak pointers, but we are
+// not marking weak pointers in this object in this GC.
template<typename T, typename U>
-struct VisitCollectionBackingTrait<false, true, false, T, U> {
- static void visit(Visitor*, const T&) { }
- static void visit(Visitor*, const void*) { }
+struct CollectionBackingTraceTrait<false, true, false, T, U> {
+ static void mark(Visitor*, const T&) { }
+ static void mark(Visitor*, const void*) { }
};
// For each type that we understand we have the FTT case and the TXX case. The
-// FTT case is where we would not normally need to visit it, but it has weak
-// pointers, and we are visiting them as strong. The TXX case is the regular
-// case for things that need visiting.
+// FTT case is where we would not normally need to mark it, but it has weak
+// pointers, and we are marking them as strong. The TXX case is the regular
+// case for things that need marking.
// FTT (vector)
template<typename T, typename Traits>
-struct VisitCollectionBackingTrait<false, true, true, HeapVectorBacking<T, Traits>, void> : public BaseVisitVectorBackingTrait<true, T, Traits> {
+struct CollectionBackingTraceTrait<false, true, true, HeapVectorBacking<T, Traits>, void> : public BaseVisitVectorBackingTrait<true, T, Traits> {
};
// TXX (vector)
-template<bool isWeak, bool visitWeakPointersStrongly, typename T, typename Traits>
-struct VisitCollectionBackingTrait<true, isWeak, visitWeakPointersStrongly, HeapVectorBacking<T, Traits>, void> : public BaseVisitVectorBackingTrait<visitWeakPointersStrongly, T, Traits> {
+template<bool isWeak, bool markWeakPointersStrongly, typename T, typename Traits>
+struct CollectionBackingTraceTrait<true, isWeak, markWeakPointersStrongly, HeapVectorBacking<T, Traits>, void> : public BaseVisitVectorBackingTrait<markWeakPointersStrongly, T, Traits> {
};
// FTT (hash table)
template<typename Key, typename Value, typename Extractor, typename Traits, typename KeyTraits>
-struct VisitCollectionBackingTrait<false, true, true, HeapHashTableBacking<Key, Value, Extractor, Traits, KeyTraits>, void> : public BaseVisitHashTableBackingTrait<true, Key, Value, Extractor, Traits, KeyTraits> {
+struct CollectionBackingTraceTrait<false, true, true, HeapHashTableBacking<Key, Value, Extractor, Traits, KeyTraits>, void> : public BaseVisitHashTableBackingTrait<true, Key, Value, Extractor, Traits, KeyTraits> {
};
// TXX (hash table)
-template<bool isWeak, bool visitWeakPointersStrongly, typename Key, typename Value, typename Extractor, typename Traits, typename KeyTraits>
-struct VisitCollectionBackingTrait<true, isWeak, visitWeakPointersStrongly, HeapHashTableBacking<Key, Value, Extractor, Traits, KeyTraits>, void> : public BaseVisitHashTableBackingTrait<visitWeakPointersStrongly, Key, Value, Extractor, Traits, KeyTraits> {
+template<bool isWeak, bool markWeakPointersStrongly, typename Key, typename Value, typename Extractor, typename Traits, typename KeyTraits>
+struct CollectionBackingTraceTrait<true, isWeak, markWeakPointersStrongly, HeapHashTableBacking<Key, Value, Extractor, Traits, KeyTraits>, void> : public BaseVisitHashTableBackingTrait<markWeakPointersStrongly, Key, Value, Extractor, Traits, KeyTraits> {
};
// FTT (key value pair)
template<typename Key, typename Value, typename Traits>
-struct VisitCollectionBackingTrait<false, true, true, WTF::KeyValuePair<Key, Value>, Traits> : public BaseVisitKeyValuePairTrait<true, Key, Value, Traits> {
+struct CollectionBackingTraceTrait<false, true, true, WTF::KeyValuePair<Key, Value>, Traits> : public BaseVisitKeyValuePairTrait<true, Key, Value, Traits> {
};
// TXX (key value pair)
-template<bool isWeak, bool visitWeakPointersStrongly, typename Key, typename Value, typename Traits>
-struct VisitCollectionBackingTrait<true, isWeak, visitWeakPointersStrongly, WTF::KeyValuePair<Key, Value>, Traits> : public BaseVisitKeyValuePairTrait<visitWeakPointersStrongly, Key, Value, Traits> {
+template<bool isWeak, bool markWeakPointersStrongly, typename Key, typename Value, typename Traits>
+struct CollectionBackingTraceTrait<true, isWeak, markWeakPointersStrongly, WTF::KeyValuePair<Key, Value>, Traits> : public BaseVisitKeyValuePairTrait<markWeakPointersStrongly, Key, Value, Traits> {
};
// TFX (member)
-template<bool visitWeakPointersStrongly, typename T, typename Traits>
-struct VisitCollectionBackingTrait<true, false, visitWeakPointersStrongly, Member<T>, Traits> {
- static void visit(WebCore::Visitor* visitor, Member<T> self)
+template<bool markWeakPointersStrongly, typename T, typename Traits>
+struct CollectionBackingTraceTrait<true, false, markWeakPointersStrongly, Member<T>, Traits> {
+ static void mark(WebCore::Visitor* visitor, Member<T> self)
{
- visitor->visit(self.raw());
+ visitor->mark(self.raw());
}
};
// FTT (weak member)
template<typename T, typename Traits>
-struct VisitCollectionBackingTrait<false, true, true, WeakMember<T>, Traits> {
- static void visit(WebCore::Visitor* visitor, WeakMember<T> self)
+struct CollectionBackingTraceTrait<false, true, true, WeakMember<T>, Traits> {
+ static void mark(WebCore::Visitor* visitor, WeakMember<T> self)
{
- // This can visit weak members as if they were strong. The reason we
+ // This can mark weak members as if they were strong. The reason we
// need this is that we don't do weak processing unless we reach the
// backing only through the hash table. Reaching it in any other way
// makes it impossible to update the size and deleted slot count of the
// table, and exposes us to weak processing during iteration issues.
- visitor->visit(self.raw());
+ visitor->mark(self.raw());
}
};
// Catch-all for things that have a way to trace. For things that contain weak
// pointers they will generally be visited weakly even if
-// visitWeakPointersStrongly is true. This is what you want.
-template<bool isWeak, bool visitWeakPointersStrongly, typename T, typename Traits>
-struct VisitCollectionBackingTrait<true, isWeak, visitWeakPointersStrongly, T, Traits> {
- static void visit(WebCore::Visitor* visitor, T& t)
+// markWeakPointersStrongly is true. This is what you want.
+template<bool isWeak, bool markWeakPointersStrongly, typename T, typename Traits>
+struct CollectionBackingTraceTrait<true, isWeak, markWeakPointersStrongly, T, Traits> {
+ static void mark(WebCore::Visitor* visitor, T& t)
{
TraceTrait<T>::trace(visitor, reinterpret_cast<void*>(&t));
}
@@ -1290,12 +1276,12 @@ struct TraceTrait<HeapVectorBacking<T, Traits> > {
static void trace(WebCore::Visitor* visitor, void* self)
{
COMPILE_ASSERT(!Traits::isWeak, WeDontSupportWeaknessInHeapVectors);
- if (Traits::needsVisiting)
- VisitCollectionBackingTrait<Traits::needsVisiting, false, false, HeapVectorBacking<T, Traits>, void>::visit(visitor, self);
+ if (Traits::needsMarking)
Erik Corry 2013/12/06 10:30:33 I think this should be needsTracing
Mads Ager (chromium) 2013/12/06 11:00:10 Yes, will fix.
+ CollectionBackingTraceTrait<Traits::needsMarking, false, false, HeapVectorBacking<T, Traits>, void>::mark(visitor, self);
}
- static void visit(Visitor* v, const Backing* p)
+ static void mark(Visitor* v, const Backing* p)
{
- v->visit(p, &trace);
+ v->mark(p, &trace);
}
static void checkTypeMarker(Visitor* visitor, const Backing* t)
{
@@ -1314,18 +1300,18 @@ struct TraceTrait<HeapVectorBacking<T, Traits> > {
template<typename Key, typename Value, typename Extractor, typename Traits, typename KeyTraits>
struct TraceTrait<HeapHashTableBacking<Key, Value, Extractor, Traits, KeyTraits> > {
typedef HeapHashTableBacking<Key, Value, Extractor, Traits, KeyTraits> Backing;
- static const bool needsVisiting = (Traits::needsVisiting || Traits::isWeak);
+ static const bool needsMarking = (Traits::needsMarking || Traits::isWeak);
static void trace(WebCore::Visitor* visitor, void* self)
{
- if (needsVisiting)
- VisitCollectionBackingTrait<Traits::needsVisiting, Traits::isWeak, true, HeapHashTableBacking<Key, Value, Extractor, Traits, KeyTraits>, void>::visit(visitor, self);
+ if (needsMarking)
+ CollectionBackingTraceTrait<Traits::needsMarking, Traits::isWeak, true, HeapHashTableBacking<Key, Value, Extractor, Traits, KeyTraits>, void>::mark(visitor, self);
}
- static void visit(Visitor* v, const Backing* p)
+ static void mark(Visitor* v, const Backing* p)
{
- if (needsVisiting)
- v->visit(p, &trace);
+ if (needsMarking)
+ v->mark(p, &trace);
else
- v->visit(p, nullptr);
+ v->mark(p, nullptr);
}
static void checkTypeMarker(Visitor* visitor, const Backing* t)
{
« Source/heap/Handle.h ('K') | « Source/heap/Handle.h ('k') | Source/heap/Heap.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698