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

Side by Side Diff: third_party/WebKit/Source/platform/heap/Visitor.h

Issue 1974693002: Make Visitor use heap for the current thread (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2013 Google Inc. All rights reserved. 2 * Copyright (C) 2013 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
112 #define DEFINE_INLINE_TRACE() DEFINE_INLINE_TRACE_IMPL(EMPTY_MACRO_ARGUMENT) 112 #define DEFINE_INLINE_TRACE() DEFINE_INLINE_TRACE_IMPL(EMPTY_MACRO_ARGUMENT)
113 #define DEFINE_INLINE_VIRTUAL_TRACE() DEFINE_INLINE_TRACE_IMPL(virtual) 113 #define DEFINE_INLINE_VIRTUAL_TRACE() DEFINE_INLINE_TRACE_IMPL(virtual)
114 114
115 // VisitorHelper contains common implementation of Visitor helper methods. 115 // VisitorHelper contains common implementation of Visitor helper methods.
116 // 116 //
117 // VisitorHelper avoids virtual methods by using CRTP. 117 // VisitorHelper avoids virtual methods by using CRTP.
118 // c.f. http://en.wikipedia.org/wiki/Curiously_Recurring_Template_Pattern 118 // c.f. http://en.wikipedia.org/wiki/Curiously_Recurring_Template_Pattern
119 template<typename Derived> 119 template<typename Derived>
120 class VisitorHelper { 120 class VisitorHelper {
121 public: 121 public:
122 VisitorHelper(ThreadState* state) : m_state(state) { }
123
122 // One-argument templated mark method. This uses the static type of 124 // One-argument templated mark method. This uses the static type of
123 // the argument to get the TraceTrait. By default, the mark method 125 // the argument to get the TraceTrait. By default, the mark method
124 // of the TraceTrait just calls the virtual two-argument mark method on this 126 // of the TraceTrait just calls the virtual two-argument mark method on this
125 // visitor, where the second argument is the static trace method of the trai t. 127 // visitor, where the second argument is the static trace method of the trai t.
126 template<typename T> 128 template<typename T>
127 void mark(T* t) 129 void mark(T* t)
128 { 130 {
129 static_assert(sizeof(T), "T must be fully defined"); 131 static_assert(sizeof(T), "T must be fully defined");
130 static_assert(IsGarbageCollectedType<T>::value, "T needs to be a garbage collected object"); 132 static_assert(IsGarbageCollectedType<T>::value, "T needs to be a garbage collected object");
131 if (!t) 133 if (!t)
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
214 template<typename T, void (T::*method)(Visitor*)> 216 template<typename T, void (T::*method)(Visitor*)>
215 void registerWeakMembers(const T* obj) 217 void registerWeakMembers(const T* obj)
216 { 218 {
217 registerWeakMembers(obj, &TraceMethodDelegate<T, method>::trampoline); 219 registerWeakMembers(obj, &TraceMethodDelegate<T, method>::trampoline);
218 } 220 }
219 void registerWeakMembers(const void* object, WeakCallback callback) 221 void registerWeakMembers(const void* object, WeakCallback callback)
220 { 222 {
221 Derived::fromHelper(this)->registerWeakMembers(object, object, callback) ; 223 Derived::fromHelper(this)->registerWeakMembers(object, object, callback) ;
222 } 224 }
223 225
226 inline ThreadState* state() const { return m_state; }
227 inline ThreadHeap& heap() const { return state()->heap(); }
228
224 private: 229 private:
225 template<typename T> 230 template<typename T>
226 static void handleWeakCell(Visitor* self, void* object); 231 static void handleWeakCell(Visitor* self, void* object);
232
233 ThreadState* m_state;
227 }; 234 };
228 235
229 // Visitor is used to traverse the Blink object graph. Used for the 236 // Visitor is used to traverse the Blink object graph. Used for the
230 // marking phase of the mark-sweep garbage collector. 237 // marking phase of the mark-sweep garbage collector.
231 // 238 //
232 // Pointers are marked and pushed on the marking stack by calling the 239 // Pointers are marked and pushed on the marking stack by calling the
233 // |mark| method with the pointer as an argument. 240 // |mark| method with the pointer as an argument.
234 // 241 //
235 // Pointers within objects are traced by calling the |trace| methods 242 // Pointers within objects are traced by calling the |trace| methods
236 // with the object as an argument. Tracing objects will mark all of the 243 // with the object as an argument. Tracing objects will mark all of the
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
306 313
307 virtual void registerWeakTable(const void*, EphemeronCallback, EphemeronCall back) = 0; 314 virtual void registerWeakTable(const void*, EphemeronCallback, EphemeronCall back) = 0;
308 #if ENABLE(ASSERT) 315 #if ENABLE(ASSERT)
309 virtual bool weakTableRegistered(const void*) = 0; 316 virtual bool weakTableRegistered(const void*) = 0;
310 #endif 317 #endif
311 318
312 virtual bool ensureMarked(const void*) = 0; 319 virtual bool ensureMarked(const void*) = 0;
313 320
314 inline MarkingMode getMarkingMode() const { return m_markingMode; } 321 inline MarkingMode getMarkingMode() const { return m_markingMode; }
315 322
316 inline ThreadHeap& heap() const { return m_state->heap(); }
317
318 protected: 323 protected:
319 Visitor(ThreadState*, MarkingMode); 324 Visitor(ThreadState*, MarkingMode);
320 325
321 virtual void registerWeakCellWithCallback(void**, WeakCallback) = 0; 326 virtual void registerWeakCellWithCallback(void**, WeakCallback) = 0;
322 327
323 private: 328 private:
324 static Visitor* fromHelper(VisitorHelper<Visitor>* helper) { return static_c ast<Visitor*>(helper); } 329 static Visitor* fromHelper(VisitorHelper<Visitor>* helper) { return static_c ast<Visitor*>(helper); }
325 330
326 ThreadState* m_state; 331 ThreadState* m_state;
327 const MarkingMode m_markingMode; 332 const MarkingMode m_markingMode;
328 }; 333 };
329 334
330 } // namespace blink 335 } // namespace blink
331 336
332 #endif // Visitor_h 337 #endif // Visitor_h
OLDNEW
« 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