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

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

Issue 2531973002: Simple BlinkGC heap compaction. (Closed)
Patch Set: rebased upto r438110 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/Visitor.h
diff --git a/third_party/WebKit/Source/platform/heap/Visitor.h b/third_party/WebKit/Source/platform/heap/Visitor.h
index f93d1e4d52fd9ce3516a7bc9399758f7c60a2343..6b8c13a66fe25a8ab9fd628c1d42c03703e5396e 100644
--- a/third_party/WebKit/Source/platform/heap/Visitor.h
+++ b/third_party/WebKit/Source/platform/heap/Visitor.h
@@ -243,10 +243,26 @@ class VisitorHelper {
void registerWeakMembers(const T* obj) {
registerWeakMembers(obj, &TraceMethodDelegate<T, method>::trampoline);
}
+
void registerWeakMembers(const void* object, WeakCallback callback) {
Derived::fromHelper(this)->registerWeakMembers(object, object, callback);
}
+ template <typename T>
+ void registerBackingStoreReference(T** slot) {
+ Derived::fromHelper(this)->registerMovingObjectReference(
+ reinterpret_cast<MovableReference*>(slot));
+ }
+
+ template <typename T>
+ void registerBackingStoreCallback(T* backingStore,
+ MovingObjectCallback callback,
+ void* callbackData) {
+ Derived::fromHelper(this)->registerMovingObjectCallback(
+ reinterpret_cast<MovableReference>(backingStore), callback,
+ callbackData);
+ }
+
inline ThreadState* state() const { return m_state; }
inline ThreadHeap& heap() const { return state()->heap(); }
@@ -254,7 +270,7 @@ class VisitorHelper {
template <typename T>
static void handleWeakCell(Visitor* self, void* object);
- ThreadState* m_state;
+ ThreadState* const m_state;
};
// Visitor is used to traverse the Blink object graph. Used for the
@@ -284,6 +300,13 @@ class PLATFORM_EXPORT Visitor : public VisitorHelper<Visitor> {
// This visitor is used to trace objects during weak processing.
// This visitor is allowed to trace only already marked objects.
WeakProcessing,
+ // Perform global marking along with preparing for additional sweep
+ // compaction of heap arenas afterwards. Compared to the GlobalMarking
+ // visitor, this visitor will also register references to objects
+ // that might be moved during arena compaction -- the compaction
+ // pass will then fix up those references when the object move goes
+ // ahead.
+ GlobalMarkingWithCompaction,
};
static std::unique_ptr<Visitor> create(ThreadState*, BlinkGC::GCType);
@@ -344,10 +367,21 @@ class PLATFORM_EXPORT Visitor : public VisitorHelper<Visitor> {
virtual bool ensureMarked(const void*) = 0;
+ virtual void registerMovingObjectReference(MovableReference*) = 0;
+
+ virtual void registerMovingObjectCallback(MovableReference,
+ MovingObjectCallback,
+ void*) = 0;
+
virtual void registerWeakCellWithCallback(void**, WeakCallback) = 0;
inline MarkingMode getMarkingMode() const { return m_markingMode; }
+ inline bool isGlobalMarking() const {
+ return m_markingMode == GlobalMarking ||
+ m_markingMode == GlobalMarkingWithCompaction;
+ }
+
protected:
Visitor(ThreadState*, MarkingMode);
@@ -356,7 +390,6 @@ class PLATFORM_EXPORT Visitor : public VisitorHelper<Visitor> {
return static_cast<Visitor*>(helper);
}
- ThreadState* m_state;
const MarkingMode m_markingMode;
};
« no previous file with comments | « third_party/WebKit/Source/platform/heap/TraceTraits.h ('k') | third_party/WebKit/Source/platform/heap/Visitor.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698