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

Unified Diff: third_party/WebKit/Source/platform/heap/GarbageCollected.h

Issue 2585433003: [wrapper-tracing] Reduce marking overhead: Tri-color marking without 3 colors (Closed)
Patch Set: Fix test case Created 4 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: third_party/WebKit/Source/platform/heap/GarbageCollected.h
diff --git a/third_party/WebKit/Source/platform/heap/GarbageCollected.h b/third_party/WebKit/Source/platform/heap/GarbageCollected.h
index 42f78a3770679e3f841a1983978cd158895070e0..e814c8c0d1a0b3a518b12577051c49a1fc7a0c34 100644
--- a/third_party/WebKit/Source/platform/heap/GarbageCollected.h
+++ b/third_party/WebKit/Source/platform/heap/GarbageCollected.h
@@ -77,7 +77,9 @@ class PLATFORM_EXPORT GarbageCollectedMixin {
virtual void trace(Visitor*) {}
virtual void adjustAndMark(InlinedGlobalMarkingVisitor) const = 0;
virtual void trace(InlinedGlobalMarkingVisitor);
- virtual void adjustAndMarkWrapper(const WrapperVisitor*) const = 0;
+ virtual void adjustAndMarkAndTraceWrapper(const WrapperVisitor*) const = 0;
+ virtual void adjustAndMarkWrapperNoTracing(const WrapperVisitor*) const = 0;
+ virtual void adjustAndTraceMarkedWrapper(const WrapperVisitor*) const = 0;
virtual bool isHeapObjectAlive() const = 0;
virtual HeapObjectHeader* adjustAndGetHeapObjectHeader() const = 0;
};
@@ -102,29 +104,45 @@ class PLATFORM_EXPORT GarbageCollectedMixin {
\
private:
-#define DEFINE_GARBAGE_COLLECTED_MIXIN_WRAPPER_METHODS(TYPE) \
- public: \
- void adjustAndMarkWrapper(const WrapperVisitor* visitor) const override { \
- typedef WTF::IsSubclassOfTemplate<typename std::remove_const<TYPE>::type, \
- blink::GarbageCollected> \
- IsSubclassOfGarbageCollected; \
- static_assert( \
- IsSubclassOfGarbageCollected::value, \
- "only garbage collected objects can have garbage collected mixins"); \
- AdjustAndMarkTrait<TYPE>::markWrapper(visitor, \
- static_cast<const TYPE*>(this)); \
- } \
- HeapObjectHeader* adjustAndGetHeapObjectHeader() const override { \
- typedef WTF::IsSubclassOfTemplate<typename std::remove_const<TYPE>::type, \
- blink::GarbageCollected> \
- IsSubclassOfGarbageCollected; \
- static_assert( \
- IsSubclassOfGarbageCollected::value, \
- "only garbage collected objects can have garbage collected mixins"); \
- return AdjustAndMarkTrait<TYPE>::heapObjectHeader( \
- static_cast<const TYPE*>(this)); \
- } \
- \
+#define DEFINE_GARBAGE_COLLECTED_MIXIN_WRAPPER_METHODS(TYPE) \
+ private: \
+ typedef WTF::IsSubclassOfTemplate<typename std::remove_const<TYPE>::type, \
+ blink::GarbageCollected> \
+ IsSubclassOfGarbageCollected; \
+ \
+ public: \
+ void adjustAndMarkAndTraceWrapper(const WrapperVisitor* visitor) \
+ const override { \
+ static_assert( \
+ IsSubclassOfGarbageCollected::value, \
+ "only garbage collected objects can have garbage collected mixins"); \
+ return AdjustAndMarkTrait<TYPE>::markAndTraceWrapper( \
+ visitor, static_cast<const TYPE*>(this)); \
+ } \
+ void adjustAndMarkWrapperNoTracing(const WrapperVisitor* visitor) \
+ const override { \
+ static_assert( \
+ IsSubclassOfGarbageCollected::value, \
+ "only garbage collected objects can have garbage collected mixins"); \
+ return AdjustAndMarkTrait<TYPE>::markWrapperNoTracing( \
+ visitor, static_cast<const TYPE*>(this)); \
+ } \
+ void adjustAndTraceMarkedWrapper(const WrapperVisitor* visitor) \
+ const override { \
+ static_assert( \
+ IsSubclassOfGarbageCollected::value, \
+ "only garbage collected objects can have garbage collected mixins"); \
+ AdjustAndMarkTrait<TYPE>::traceMarkedWrapper( \
+ visitor, static_cast<const TYPE*>(this)); \
+ } \
+ HeapObjectHeader* adjustAndGetHeapObjectHeader() const override { \
+ static_assert( \
+ IsSubclassOfGarbageCollected::value, \
+ "only garbage collected objects can have garbage collected mixins"); \
+ return AdjustAndMarkTrait<TYPE>::heapObjectHeader( \
+ static_cast<const TYPE*>(this)); \
+ } \
+ \
private:
// A C++ object's vptr will be initialized to its leftmost base's vtable after

Powered by Google App Engine
This is Rietveld 408576698