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

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

Issue 383743002: Oilpan: GC profiling. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: TracedValue contexts Created 6 years, 5 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
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 29 matching lines...) Expand all
40 #include "wtf/HashMap.h" 40 #include "wtf/HashMap.h"
41 #include "wtf/HashSet.h" 41 #include "wtf/HashSet.h"
42 #include "wtf/HashTraits.h" 42 #include "wtf/HashTraits.h"
43 #include "wtf/InstanceCounter.h" 43 #include "wtf/InstanceCounter.h"
44 #include "wtf/LinkedHashSet.h" 44 #include "wtf/LinkedHashSet.h"
45 #include "wtf/ListHashSet.h" 45 #include "wtf/ListHashSet.h"
46 #include "wtf/OwnPtr.h" 46 #include "wtf/OwnPtr.h"
47 #include "wtf/RefPtr.h" 47 #include "wtf/RefPtr.h"
48 #include "wtf/TypeTraits.h" 48 #include "wtf/TypeTraits.h"
49 #include "wtf/WeakPtr.h" 49 #include "wtf/WeakPtr.h"
50 #if ENABLE(GC_TRACING) 50 #if GC_PROFILE_DEFINE_CLASSNAME
51 #include "wtf/text/WTFString.h" 51 #include "wtf/text/WTFString.h"
52 #endif 52 #endif
53 53
54 #ifndef NDEBUG 54 #ifndef NDEBUG
55 #define DEBUG_ONLY(x) x 55 #define DEBUG_ONLY(x) x
56 #else 56 #else
57 #define DEBUG_ONLY(x) 57 #define DEBUG_ONLY(x)
58 #endif 58 #endif
59 59
60 namespace WebCore { 60 namespace WebCore {
(...skipping 25 matching lines...) Expand all
86 // the garbage collector determines that the object is no longer 86 // the garbage collector determines that the object is no longer
87 // reachable. There is a GCInfo struct for each class that directly 87 // reachable. There is a GCInfo struct for each class that directly
88 // inherits from GarbageCollected or GarbageCollectedFinalized. 88 // inherits from GarbageCollected or GarbageCollectedFinalized.
89 struct GCInfo { 89 struct GCInfo {
90 bool hasFinalizer() const { return m_nonTrivialFinalizer; } 90 bool hasFinalizer() const { return m_nonTrivialFinalizer; }
91 bool hasVTable() const { return m_hasVTable; } 91 bool hasVTable() const { return m_hasVTable; }
92 TraceCallback m_trace; 92 TraceCallback m_trace;
93 FinalizationCallback m_finalize; 93 FinalizationCallback m_finalize;
94 bool m_nonTrivialFinalizer; 94 bool m_nonTrivialFinalizer;
95 bool m_hasVTable; 95 bool m_hasVTable;
96 #if ENABLE(GC_TRACING) 96 #if GC_PROFILE_DEFINE_CLASSNAME
97 // |m_className| is held as a reference to prevent dtor being called at exit . 97 // |m_className| is held as a reference to prevent dtor being called at exit .
98 const String& m_className; 98 const String& m_className;
99 #endif 99 #endif
100 }; 100 };
101 101
102 // The FinalizerTraitImpl specifies how to finalize objects. Object 102 // The FinalizerTraitImpl specifies how to finalize objects. Object
103 // that inherit from GarbageCollectedFinalized are finalized by 103 // that inherit from GarbageCollectedFinalized are finalized by
104 // calling their 'finalize' method which by default will call the 104 // calling their 'finalize' method which by default will call the
105 // destructor on the object. 105 // destructor on the object.
106 template<typename T, bool isGarbageCollectedFinalized> 106 template<typename T, bool isGarbageCollectedFinalized>
(...skipping 312 matching lines...) Expand 10 before | Expand all | Expand 10 after
419 419
420 // Macro to declare methods needed for each typed heap. 420 // Macro to declare methods needed for each typed heap.
421 #define DECLARE_VISITOR_METHODS(Type) \ 421 #define DECLARE_VISITOR_METHODS(Type) \
422 DEBUG_ONLY(void checkGCInfo(const Type*, const GCInfo*);) \ 422 DEBUG_ONLY(void checkGCInfo(const Type*, const GCInfo*);) \
423 virtual void mark(const Type*, TraceCallback) = 0; \ 423 virtual void mark(const Type*, TraceCallback) = 0; \
424 virtual bool isMarked(const Type*) = 0; 424 virtual bool isMarked(const Type*) = 0;
425 425
426 FOR_EACH_TYPED_HEAP(DECLARE_VISITOR_METHODS) 426 FOR_EACH_TYPED_HEAP(DECLARE_VISITOR_METHODS)
427 #undef DECLARE_VISITOR_METHODS 427 #undef DECLARE_VISITOR_METHODS
428 428
429 #if ENABLE(GC_TRACING) 429 #if GC_PROFILE_MARKING
430 void setHostInfo(void* object, const String& name) 430 void setHostInfo(void* object, const String& name)
431 { 431 {
432 m_hostObject = object; 432 m_hostObject = object;
433 m_hostName = name; 433 m_hostName = name;
434 } 434 }
435 #endif 435 #endif
436 436
437 protected: 437 protected:
438 virtual void registerWeakCell(void**, WeakPointerCallback) = 0; 438 virtual void registerWeakCell(void**, WeakPointerCallback) = 0;
439 #if ENABLE(GC_TRACING) 439 #if GC_PROFILE_MARKING
440 void* m_hostObject; 440 void* m_hostObject;
441 String m_hostName; 441 String m_hostName;
442 #endif 442 #endif
443 443
444 private: 444 private:
445 template<typename T> 445 template<typename T>
446 static void handleWeakCell(Visitor* self, void* obj) 446 static void handleWeakCell(Visitor* self, void* obj)
447 { 447 {
448 T** cell = reinterpret_cast<T**>(obj); 448 T** cell = reinterpret_cast<T**>(obj);
449 if (*cell && !self->isAlive(*cell)) 449 if (*cell && !self->isAlive(*cell))
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after
668 return visitor->isAlive(this); \ 668 return visitor->isAlive(this); \
669 } \ 669 } \
670 private: 670 private:
671 671
672 #if ENABLE(OILPAN) 672 #if ENABLE(OILPAN)
673 #define WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(TYPE) USING_GARBAGE_COLLECTED_MIXI N(TYPE) 673 #define WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(TYPE) USING_GARBAGE_COLLECTED_MIXI N(TYPE)
674 #else 674 #else
675 #define WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(TYPE) 675 #define WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(TYPE)
676 #endif 676 #endif
677 677
678 #if ENABLE(GC_TRACING) 678 #if GC_PROFILE_DEFINE_CLASSNAME
679 template<typename T> 679 template<typename T>
680 struct TypenameStringTrait { 680 struct TypenameStringTrait {
681 static const String& get() 681 static const String& get()
682 { 682 {
683 DEFINE_STATIC_LOCAL(String, typenameString, (WTF::extractTypeNameFromFun ctionName(WTF::extractNameFunction<T>()))); 683 DEFINE_STATIC_LOCAL(String, typenameString, (WTF::extractTypeNameFromFun ctionName(WTF::extractNameFunction<T>())));
684 return typenameString; 684 return typenameString;
685 } 685 }
686 }; 686 };
687 #endif 687 #endif
688 688
689 template<typename T> 689 template<typename T>
690 struct GCInfoAtBase { 690 struct GCInfoAtBase {
691 static const GCInfo* get() 691 static const GCInfo* get()
692 { 692 {
693 static const GCInfo gcInfo = { 693 static const GCInfo gcInfo = {
694 TraceTrait<T>::trace, 694 TraceTrait<T>::trace,
695 FinalizerTrait<T>::finalize, 695 FinalizerTrait<T>::finalize,
696 FinalizerTrait<T>::nonTrivialFinalizer, 696 FinalizerTrait<T>::nonTrivialFinalizer,
697 WTF::IsPolymorphic<T>::value, 697 WTF::IsPolymorphic<T>::value,
698 #if ENABLE(GC_TRACING) 698 #if GC_PROFILE_DEFINE_CLASSNAME
699 TypenameStringTrait<T>::get() 699 TypenameStringTrait<T>::get()
700 #endif 700 #endif
701 }; 701 };
702 return &gcInfo; 702 return &gcInfo;
703 } 703 }
704 }; 704 };
705 705
706 template<typename T> class GarbageCollected; 706 template<typename T> class GarbageCollected;
707 template<typename T, bool = WTF::IsSubclassOfTemplate<typename WTF::RemoveConst< T>::Type, GarbageCollected>::value> struct GetGarbageCollectedBase; 707 template<typename T, bool = WTF::IsSubclassOfTemplate<typename WTF::RemoveConst< T>::Type, GarbageCollected>::value> struct GetGarbageCollectedBase;
708 708
(...skipping 11 matching lines...) Expand all
720 struct GCInfoTrait { 720 struct GCInfoTrait {
721 static const GCInfo* get() 721 static const GCInfo* get()
722 { 722 {
723 return GCInfoAtBase<typename GetGarbageCollectedBase<T>::type>::get(); 723 return GCInfoAtBase<typename GetGarbageCollectedBase<T>::type>::get();
724 } 724 }
725 }; 725 };
726 726
727 } 727 }
728 728
729 #endif 729 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698