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

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

Issue 130493003: Alternative approach to supporting ref counting and garbage collection (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Fix copyright. Created 6 years, 11 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/Handle.h ('k') | Source/heap/HeapTest.cpp » ('j') | 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 19 matching lines...) Expand all
30 30
31 #ifndef Heap_h 31 #ifndef Heap_h
32 #define Heap_h 32 #define Heap_h
33 33
34 #include "heap/HeapExport.h" 34 #include "heap/HeapExport.h"
35 #include "heap/ThreadState.h" 35 #include "heap/ThreadState.h"
36 #include "heap/Visitor.h" 36 #include "heap/Visitor.h"
37 37
38 #include "wtf/Assertions.h" 38 #include "wtf/Assertions.h"
39 #include "wtf/OwnPtr.h" 39 #include "wtf/OwnPtr.h"
40 #include "wtf/RefCounted.h"
40 41
41 #include <stdint.h> 42 #include <stdint.h>
42 43
43 namespace WebCore { 44 namespace WebCore {
44 45
45 // ASAN integration defintions 46 // ASAN integration defintions
46 #if COMPILER(CLANG) 47 #if COMPILER(CLANG)
47 #define USE_ASAN (__has_feature(address_sanitizer) || defined(__SANITIZE_ADDRESS __)) 48 #define USE_ASAN (__has_feature(address_sanitizer) || defined(__SANITIZE_ADDRESS __))
48 #else 49 #else
49 #define USE_ASAN 0 50 #define USE_ASAN 0
(...skipping 827 matching lines...) Expand 10 before | Expand all | Expand 10 after
877 private: 878 private:
878 void enter() const 879 void enter() const
879 { 880 {
880 if (m_active) 881 if (m_active)
881 ThreadStateFor<Affinity>::state()->enterNoAllocationScope(); 882 ThreadStateFor<Affinity>::state()->enterNoAllocationScope();
882 } 883 }
883 884
884 bool m_active; 885 bool m_active;
885 }; 886 };
886 887
888 #if !ENABLE(OILPAN)
889 template<typename T>
890 class Dummy {
891 public:
892 Dummy() { }
893 ~Dummy() { }
894 };
895 #endif
896
887 // Base class for objects allocated in the Blink garbage-collected 897 // Base class for objects allocated in the Blink garbage-collected
888 // heap. 898 // heap.
889 // 899 //
890 // Defines a 'new' operator that allocates the memory in the 900 // Defines a 'new' operator that allocates the memory in the
891 // heap. 'delete' should not be called on objects that inherit from 901 // heap. 'delete' should not be called on objects that inherit from
892 // GarbageCollected. 902 // GarbageCollected.
893 // 903 //
894 // Instances of GarbageCollected will *NOT* get finalized. Their 904 // Instances of GarbageCollected will *NOT* get finalized. Their
895 // destructor will not be called. Therefore, only classes that have 905 // destructor will not be called. Therefore, only classes that have
896 // trivial destructors with no semantic meaning (including all their 906 // trivial destructors with no semantic meaning (including all their
897 // subclasses) should inherit from GarbageCollected. If there are 907 // subclasses) should inherit from GarbageCollected. If there are
898 // non-trival destructors in a given class or any of its subclasses, 908 // non-trival destructors in a given class or any of its subclasses,
899 // GarbageCollectedFinalized should be used which guarantees that the 909 // GarbageCollectedFinalized should be used which guarantees that the
900 // destructor is called on an instance when the garbage collector 910 // destructor is called on an instance when the garbage collector
901 // determines that it is no longer reachable. 911 // determines that it is no longer reachable.
902 template<typename T> 912 template<typename T>
903 class GarbageCollected { 913 class GarbageCollected {
904 WTF_MAKE_NONCOPYABLE(GarbageCollected); 914 WTF_MAKE_NONCOPYABLE(GarbageCollected);
905 915
906 // For now direct allocation of arrays on the heap is not allowed. 916 // For now direct allocation of arrays on the heap is not allowed.
907 void* operator new[](size_t size); 917 void* operator new[](size_t size);
908 void operator delete[](void* p); 918 void operator delete[](void* p);
909 public: 919 public:
920 #if ENABLE(OILPAN)
921 typedef GarbageCollected<T> FromRefCounted;
922 #else
923 typedef RefCounted<T> FromRefCounted;
924 #endif
925
910 void* operator new(size_t size) 926 void* operator new(size_t size)
911 { 927 {
912 return Heap::allocate<T>(size); 928 return Heap::allocate<T>(size);
913 } 929 }
914 930
915 void operator delete(void* p) 931 void operator delete(void* p)
916 { 932 {
917 ASSERT_NOT_REACHED(); 933 ASSERT_NOT_REACHED();
918 } 934 }
919 935
(...skipping 12 matching lines...) Expand all
932 // heap. 'delete' should not be called on objects that inherit from 948 // heap. 'delete' should not be called on objects that inherit from
933 // GarbageCollected. 949 // GarbageCollected.
934 // 950 //
935 // Instances of GarbageCollectedFinalized will have their destructor 951 // Instances of GarbageCollectedFinalized will have their destructor
936 // called when the garbage collector determines that the object is no 952 // called when the garbage collector determines that the object is no
937 // longer reachable. 953 // longer reachable.
938 template<typename T> 954 template<typename T>
939 class GarbageCollectedFinalized : public GarbageCollected<T> { 955 class GarbageCollectedFinalized : public GarbageCollected<T> {
940 WTF_MAKE_NONCOPYABLE(GarbageCollectedFinalized); 956 WTF_MAKE_NONCOPYABLE(GarbageCollectedFinalized);
941 957
958 public:
959 #if ENABLE(OILPAN)
960 typedef GarbageCollectedFinalized<T> FromRefCounted;
961 typedef GarbageCollectedFinalized<T> FromNoBase;
962 #else
963 typedef RefCounted<T> FromRefCounted;
964 typedef Dummy<T> FromNoBase;
965 #endif
966
942 protected: 967 protected:
943 // Finalize is called when the object is freed from the heap. By 968 // Finalize is called when the object is freed from the heap. By
944 // default finalization means calling the destructor on the 969 // default finalization means calling the destructor on the
945 // object. Finalize can be overridden to support calling the 970 // object. Finalize can be overridden to support calling the
946 // destructor of a subclass. This is useful for objects without 971 // destructor of a subclass. This is useful for objects without
947 // vtables that require explicit dispatching. 972 // vtables that require explicit dispatching.
948 void finalize() 973 void finalize()
949 { 974 {
950 static_cast<T*>(this)->~T(); 975 static_cast<T*>(this)->~T();
951 } 976 }
(...skipping 679 matching lines...) Expand 10 before | Expand all | Expand 10 after
1631 // to export. This forces it to export all the methods from ThreadHeap. 1656 // to export. This forces it to export all the methods from ThreadHeap.
1632 template<> void ThreadHeap<FinalizedHeapObjectHeader>::addPageToHeap(const GCInf o*); 1657 template<> void ThreadHeap<FinalizedHeapObjectHeader>::addPageToHeap(const GCInf o*);
1633 template<> void ThreadHeap<HeapObjectHeader>::addPageToHeap(const GCInfo*); 1658 template<> void ThreadHeap<HeapObjectHeader>::addPageToHeap(const GCInfo*);
1634 extern template class HEAP_EXPORT ThreadHeap<FinalizedHeapObjectHeader>; 1659 extern template class HEAP_EXPORT ThreadHeap<FinalizedHeapObjectHeader>;
1635 extern template class HEAP_EXPORT ThreadHeap<HeapObjectHeader>; 1660 extern template class HEAP_EXPORT ThreadHeap<HeapObjectHeader>;
1636 #endif 1661 #endif
1637 1662
1638 } 1663 }
1639 1664
1640 #endif // Heap_h 1665 #endif // Heap_h
OLDNEW
« no previous file with comments | « Source/heap/Handle.h ('k') | Source/heap/HeapTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698