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

Unified Diff: Source/platform/Supplementable.h

Issue 587393002: Oilpan: make Supplementable tracing more regular. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Improve dummy trace() comment Created 6 years, 3 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/platform/RefCountedSupplement.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/platform/Supplementable.h
diff --git a/Source/platform/Supplementable.h b/Source/platform/Supplementable.h
index a15d59cabe3ade8cb9958434e6fa48b60b83ee02..25f0cf7ccfe7883537e9ba671dcb6a05cccb5e41 100644
--- a/Source/platform/Supplementable.h
+++ b/Source/platform/Supplementable.h
@@ -100,13 +100,11 @@ struct SupplementableTraits;
template<typename T>
struct SupplementableTraits<T, true> {
typedef RawPtr<SupplementBase<T, true> > SupplementArgumentType;
- typedef HeapHashMap<const char*, Member<SupplementBase<T, true> >, PtrHash<const char*> > SupplementMap;
};
template<typename T>
struct SupplementableTraits<T, false> {
typedef PassOwnPtr<SupplementBase<T, false> > SupplementArgumentType;
- typedef HashMap<const char*, OwnPtr<SupplementBase<T, false> >, PtrHash<const char*> > SupplementMap;
};
template<bool>
@@ -119,6 +117,12 @@ template<>
class SupplementTracing<false> {
public:
virtual ~SupplementTracing() { }
+ // FIXME: Oilpan: this trace() method is only provided to minimize
+ // the use of ENABLE(OILPAN) for Supplements deriving from the
+ // transition type WillBeHeapSupplement<>.
+ //
+ // When that transition type is removed (or its use is substantially
+ // reduced), remove this dummy trace method also.
virtual void trace(Visitor*) { }
};
@@ -145,9 +149,32 @@ public:
}
};
+template<typename T, bool isGarbageCollected>
+class SupplementableTracing;
+
+template<typename T>
+class SupplementableTracing<T, true> : public GarbageCollectedMixin {
+public:
+ virtual void trace(Visitor* visitor)
+ {
+ visitor->trace(m_supplements);
+ }
+
+protected:
+ typedef HeapHashMap<const char*, Member<SupplementBase<T, true> >, PtrHash<const char*> > SupplementMap;
+ SupplementMap m_supplements;
+};
+
+template<typename T>
+class SupplementableTracing<T, false> {
+protected:
+ typedef HashMap<const char*, OwnPtr<SupplementBase<T, false> >, PtrHash<const char*> > SupplementMap;
+ SupplementMap m_supplements;
+};
+
// Helper class for implementing Supplementable and HeapSupplementable.
template<typename T, bool isGarbageCollected = false>
-class SupplementableBase {
+class SupplementableBase : public SupplementableTracing<T, isGarbageCollected> {
public:
void provideSupplement(const char* key, typename SupplementableTraits<T, isGarbageCollected>::SupplementArgumentType supplement)
{
@@ -175,17 +202,6 @@ public:
#endif
}
- // We have a trace method in the SupplementableBase class to ensure we have
- // the vtable at the first word of the object. However we don't trace the
- // m_supplements here, but in the partially specialized template subclasses
- // since we only want to trace it for garbage collected classes.
- virtual void trace(Visitor*) { }
-
- // FIXME: Oilpan: Make private and remove this ignore once PersistentHeapSupplementable is removed again.
-protected:
- GC_PLUGIN_IGNORE("")
- typename SupplementableTraits<T, isGarbageCollected>::SupplementMap m_supplements;
-
#if ENABLE(ASSERT)
protected:
SupplementableBase() : m_threadId(currentThread()) { }
@@ -195,38 +211,17 @@ private:
#endif
};
-// This class is used to make an on-heap class supplementable. Its supplements
-// must be HeapSupplement.
template<typename T>
class HeapSupplement : public SupplementBase<T, true> { };
-// FIXME: Oilpan: Move GarbageCollectedMixin to SupplementableBase<T, true> once PersistentHeapSupplementable is removed again.
template<typename T>
-class GC_PLUGIN_IGNORE("http://crbug.com/395036") HeapSupplementable : public SupplementableBase<T, true>, public GarbageCollectedMixin {
-public:
- virtual void trace(Visitor* visitor) OVERRIDE
- {
- visitor->trace(this->m_supplements);
- SupplementableBase<T, true>::trace(visitor);
- }
-};
+class HeapSupplementable : public SupplementableBase<T, true> { };
template<typename T>
class Supplement : public SupplementBase<T, false> { };
-// This class is used to make an off-heap class supplementable with off-heap
-// supplements (Supplement).
template<typename T>
-class GC_PLUGIN_IGNORE("http://crbug.com/395036") Supplementable : public SupplementableBase<T, false> {
-public:
- virtual void trace(Visitor* visitor)
- {
- // No tracing of off-heap supplements. We should not have any Supplementable
- // object on the heap.
- COMPILE_ASSERT(!IsGarbageCollectedType<T>::value, GarbageCollectedObjectMustBeHeapSupplementable);
- SupplementableBase<T, false>::trace(visitor);
- }
-};
+class Supplementable : public SupplementableBase<T, false> { };
template<typename T>
struct ThreadingTrait<SupplementBase<T, true> > {
« no previous file with comments | « Source/platform/RefCountedSupplement.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698