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

Side by Side Diff: Source/heap/Visitor.h

Issue 222653003: Oilpan: Fix isAlive dispatching for GarbageCollectedMixins. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Add comment to virtual method Created 6 years, 8 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 | Annotate | Revision Log
« no previous file with comments | « Source/heap/HeapTest.cpp ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
172 #endif 172 #endif
173 }; 173 };
174 174
175 template<typename T> class TraceTrait<const T> : public TraceTrait<T> { }; 175 template<typename T> class TraceTrait<const T> : public TraceTrait<T> { };
176 176
177 template<typename Collection> 177 template<typename Collection>
178 struct OffHeapCollectionTraceTrait; 178 struct OffHeapCollectionTraceTrait;
179 179
180 template<typename T> 180 template<typename T>
181 struct ObjectAliveTrait { 181 struct ObjectAliveTrait {
182 static bool isAlive(Visitor*, T); 182 static bool isAlive(Visitor*, T*);
183 };
184
185 template<typename T>
186 struct ObjectAliveTrait<Member<T> > {
187 static bool isAlive(Visitor*, const Member<T>&);
188 }; 183 };
189 184
190 // Visitor is used to traverse the Blink object graph. Used for the 185 // Visitor is used to traverse the Blink object graph. Used for the
191 // marking phase of the mark-sweep garbage collector. 186 // marking phase of the mark-sweep garbage collector.
192 // 187 //
193 // Pointers are marked and pushed on the marking stack by calling the 188 // Pointers are marked and pushed on the marking stack by calling the
194 // |mark| method with the pointer as an argument. 189 // |mark| method with the pointer as an argument.
195 // 190 //
196 // Pointers within objects are traced by calling the |trace| methods 191 // Pointers within objects are traced by calling the |trace| methods
197 // with the object as an argument. Tracing objects will mark all of the 192 // with the object as an argument. Tracing objects will mark all of the
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
359 // run on the thread performing garbage collection. Therefore, all 354 // run on the thread performing garbage collection. Therefore, all
360 // threads are stopped during weak cell callbacks. 355 // threads are stopped during weak cell callbacks.
361 template<typename T> 356 template<typename T>
362 void registerWeakCell(T** cell) 357 void registerWeakCell(T** cell)
363 { 358 {
364 registerWeakCell(reinterpret_cast<void**>(cell), &handleWeakCell<T>); 359 registerWeakCell(reinterpret_cast<void**>(cell), &handleWeakCell<T>);
365 } 360 }
366 361
367 virtual bool isMarked(const void*) = 0; 362 virtual bool isMarked(const void*) = 0;
368 363
369 template<typename T> inline bool isAlive(T obj) { return ObjectAliveTrait<T> ::isAlive(this, obj); } 364 template<typename T> inline bool isAlive(T* obj)
365 {
366 return ObjectAliveTrait<T>::isAlive(this, obj);
367 }
370 template<typename T> inline bool isAlive(const Member<T>& member) 368 template<typename T> inline bool isAlive(const Member<T>& member)
371 { 369 {
372 return isAlive(member.get()); 370 return isAlive(member.get());
373 } 371 }
374 372
375 #ifndef NDEBUG 373 #ifndef NDEBUG
376 void checkGCInfo(const void*, const GCInfo*); 374 void checkGCInfo(const void*, const GCInfo*);
377 #endif 375 #endif
378 376
379 // Macro to declare methods needed for each typed heap. 377 // Macro to declare methods needed for each typed heap.
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
518 #ifndef NDEBUG 516 #ifndef NDEBUG
519 static void checkGCInfo(Visitor*, const T*) { } 517 static void checkGCInfo(Visitor*, const T*) { }
520 #endif 518 #endif
521 }; 519 };
522 520
523 template<typename T, bool = NeedsAdjustAndMark<T>::value> class DefaultObjectAli veTrait; 521 template<typename T, bool = NeedsAdjustAndMark<T>::value> class DefaultObjectAli veTrait;
524 522
525 template<typename T> 523 template<typename T>
526 class DefaultObjectAliveTrait<T, false> { 524 class DefaultObjectAliveTrait<T, false> {
527 public: 525 public:
528 static bool isAlive(Visitor* visitor, T obj) 526 static bool isAlive(Visitor* visitor, T* obj)
529 { 527 {
530 return visitor->isMarked(obj); 528 return visitor->isMarked(obj);
531 } 529 }
532 }; 530 };
533 531
534 template<typename T> 532 template<typename T>
535 class DefaultObjectAliveTrait<T, true> { 533 class DefaultObjectAliveTrait<T, true> {
536 public: 534 public:
537 static bool isAlive(Visitor* visitor, T obj) 535 static bool isAlive(Visitor* visitor, T* obj)
538 { 536 {
539 return obj->isAlive(visitor); 537 return obj->isAlive(visitor);
540 } 538 }
541 }; 539 };
542 540
543 template<typename T> bool ObjectAliveTrait<T>::isAlive(Visitor* visitor, T obj) 541 template<typename T> bool ObjectAliveTrait<T>::isAlive(Visitor* visitor, T* obj)
544 { 542 {
545 return DefaultObjectAliveTrait<T>::isAlive(visitor, obj); 543 return DefaultObjectAliveTrait<T>::isAlive(visitor, obj);
546 } 544 }
547 template<typename T> bool ObjectAliveTrait<Member<T> >::isAlive(Visitor* visitor , const Member<T>& obj)
548 {
549 return visitor->isMarked(obj.get());
550 }
551 545
552 // The GarbageCollectedMixin interface and helper macro 546 // The GarbageCollectedMixin interface and helper macro
553 // USING_GARBAGE_COLLECTED_MIXIN can be used to automatically define 547 // USING_GARBAGE_COLLECTED_MIXIN can be used to automatically define
554 // TraceTrait/ObjectAliveTrait on non-leftmost deriving classes 548 // TraceTrait/ObjectAliveTrait on non-leftmost deriving classes
555 // which need to be garbage collected. 549 // which need to be garbage collected.
556 // 550 //
557 // Consider the following case: 551 // Consider the following case:
558 // class B {}; 552 // class B {};
559 // class A : public GarbageCollected, public B {}; 553 // class A : public GarbageCollected, public B {};
560 // 554 //
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
625 struct GCInfoTrait { 619 struct GCInfoTrait {
626 static const GCInfo* get() 620 static const GCInfo* get()
627 { 621 {
628 return GCInfoAtBase<typename GetGarbageCollectedBase<T>::type>::get(); 622 return GCInfoAtBase<typename GetGarbageCollectedBase<T>::type>::get();
629 } 623 }
630 }; 624 };
631 625
632 } 626 }
633 627
634 #endif 628 #endif
OLDNEW
« no previous file with comments | « Source/heap/HeapTest.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698