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

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

Issue 765673004: Oilpan: support eager tracing of objects when marking. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: rebased Created 6 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 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 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
90 #else 90 #else
91 const size_t sizeMask = ~static_cast<size_t>(7); 91 const size_t sizeMask = ~static_cast<size_t>(7);
92 #endif 92 #endif
93 const uint8_t freelistZapValue = 42; 93 const uint8_t freelistZapValue = 42;
94 const uint8_t finalizedZapValue = 24; 94 const uint8_t finalizedZapValue = 24;
95 // The orphaned zap value must be zero in the lowest bits to allow for using 95 // The orphaned zap value must be zero in the lowest bits to allow for using
96 // the mark bit when tracing. 96 // the mark bit when tracing.
97 const uint8_t orphanedZapValue = 240; 97 const uint8_t orphanedZapValue = 240;
98 const int numberOfPagesToConsiderForCoalescing = 100; 98 const int numberOfPagesToConsiderForCoalescing = 100;
99 99
100 enum CallbackInvocationMode {
101 GlobalMarking,
102 ThreadLocalMarking,
103 };
104
105 class CallbackStack; 100 class CallbackStack;
106 class PageMemory; 101 class PageMemory;
107 template<ThreadAffinity affinity> class ThreadLocalPersistents; 102 template<ThreadAffinity affinity> class ThreadLocalPersistents;
108 template<typename T, typename RootsAccessor = ThreadLocalPersistents<ThreadingTr ait<T>::Affinity > > class Persistent; 103 template<typename T, typename RootsAccessor = ThreadLocalPersistents<ThreadingTr ait<T>::Affinity > > class Persistent;
109 104
110 #if ENABLE(GC_PROFILE_HEAP) 105 #if ENABLE(GC_PROFILE_HEAP)
111 class TracedValue; 106 class TracedValue;
112 #endif 107 #endif
113 108
114 // Blink heap pages are set up with a guard page before and after the 109 // Blink heap pages are set up with a guard page before and after the
(...skipping 768 matching lines...) Expand 10 before | Expand all | Expand 10 after
883 static void pushWeakPointerCallback(void* closure, void* containerObject, We akPointerCallback); 878 static void pushWeakPointerCallback(void* closure, void* containerObject, We akPointerCallback);
884 879
885 // Similar to the more general pushWeakPointerCallback, but cell 880 // Similar to the more general pushWeakPointerCallback, but cell
886 // pointer callbacks are added to a static callback work list and the weak 881 // pointer callbacks are added to a static callback work list and the weak
887 // callback is performed on the thread performing garbage collection. This 882 // callback is performed on the thread performing garbage collection. This
888 // is OK because cells are just cleared and no deallocation can happen. 883 // is OK because cells are just cleared and no deallocation can happen.
889 static void pushWeakCellPointerCallback(void** cell, WeakPointerCallback); 884 static void pushWeakCellPointerCallback(void** cell, WeakPointerCallback);
890 885
891 // Pop the top of a marking stack and call the callback with the visitor 886 // Pop the top of a marking stack and call the callback with the visitor
892 // and the object. Returns false when there is nothing more to do. 887 // and the object. Returns false when there is nothing more to do.
893 template<CallbackInvocationMode Mode> static bool popAndInvokeTraceCallback( CallbackStack*, Visitor*); 888 static bool popAndInvokeTraceCallback(CallbackStack*, Visitor*);
894 889
895 // Remove an item from the post-marking callback stack and call 890 // Remove an item from the post-marking callback stack and call
896 // the callback with the visitor and the object pointer. Returns 891 // the callback with the visitor and the object pointer. Returns
897 // false when there is nothing more to do. 892 // false when there is nothing more to do.
898 static bool popAndInvokePostMarkingCallback(Visitor*); 893 static bool popAndInvokePostMarkingCallback(Visitor*);
899 894
900 // Remove an item from the weak callback work list and call the callback 895 // Remove an item from the weak callback work list and call the callback
901 // with the visitor and the closure pointer. Returns false when there is 896 // with the visitor and the closure pointer. Returns false when there is
902 // nothing more to do. 897 // nothing more to do.
903 static bool popAndInvokeWeakPointerCallback(Visitor*); 898 static bool popAndInvokeWeakPointerCallback(Visitor*);
904 899
905 // Register an ephemeron table for fixed-point iteration. 900 // Register an ephemeron table for fixed-point iteration.
906 static void registerWeakTable(void* containerObject, EphemeronCallback, Ephe meronCallback); 901 static void registerWeakTable(void* containerObject, EphemeronCallback, Ephe meronCallback);
907 #if ENABLE(ASSERT) 902 #if ENABLE(ASSERT)
908 static bool weakTableRegistered(const void*); 903 static bool weakTableRegistered(const void*);
909 #endif 904 #endif
910 905
911 template<typename T, typename HeapTraits> static Address allocate(size_t); 906 template<typename T, typename HeapTraits> static Address allocate(size_t);
912 // FIXME: remove this once c++11 is allowed everywhere: 907 // FIXME: remove this once c++11 is allowed everywhere:
913 template<typename T> static Address allocate(size_t); 908 template<typename T> static Address allocate(size_t);
914 909
915 template<typename T> static Address reallocate(void* previous, size_t); 910 template<typename T> static Address reallocate(void* previous, size_t);
916 911
917 static void collectGarbage(ThreadState::StackState, ThreadState::GCType = Th readState::ForcedGC); 912 static void collectGarbage(ThreadState::StackState, ThreadState::GCType = Th readState::ForcedGC);
918 static void collectGarbageForTerminatingThread(ThreadState*); 913 static void collectGarbageForTerminatingThread(ThreadState*);
919 static void collectAllGarbage(); 914 static void collectAllGarbage();
920 template<CallbackInvocationMode Mode> static void processMarkingStack(); 915
921 static void postMarkingProcessing(); 916 static void processMarkingStack(Visitor*);
922 static void globalWeakProcessing(); 917 static void postMarkingProcessing(Visitor*);
918 static void globalWeakProcessing(Visitor*);
923 static void setForcePreciseGCForTesting(); 919 static void setForcePreciseGCForTesting();
924 920
925 static void preGC(); 921 static void preGC();
926 static void postGC(); 922 static void postGC();
927 923
928 // Conservatively checks whether an address is a pointer in any of the threa d 924 // Conservatively checks whether an address is a pointer in any of the threa d
929 // heaps. If so marks the object pointed to as live. 925 // heaps. If so marks the object pointed to as live.
930 static Address checkAndMarkPointer(Visitor*, Address); 926 static Address checkAndMarkPointer(Visitor*, Address);
931 927
932 #if ENABLE(GC_PROFILE_MARKING) 928 #if ENABLE(GC_PROFILE_MARKING)
(...skipping 1383 matching lines...) Expand 10 before | Expand all | Expand 10 after
2316 template<typename T, size_t inlineCapacity> 2312 template<typename T, size_t inlineCapacity>
2317 struct GCInfoTrait<HeapVector<T, inlineCapacity> > : public GCInfoTrait<Vector<T , inlineCapacity, HeapAllocator> > { }; 2313 struct GCInfoTrait<HeapVector<T, inlineCapacity> > : public GCInfoTrait<Vector<T , inlineCapacity, HeapAllocator> > { };
2318 template<typename T, size_t inlineCapacity> 2314 template<typename T, size_t inlineCapacity>
2319 struct GCInfoTrait<HeapDeque<T, inlineCapacity> > : public GCInfoTrait<Deque<T, inlineCapacity, HeapAllocator> > { }; 2315 struct GCInfoTrait<HeapDeque<T, inlineCapacity> > : public GCInfoTrait<Deque<T, inlineCapacity, HeapAllocator> > { };
2320 template<typename T, typename U, typename V> 2316 template<typename T, typename U, typename V>
2321 struct GCInfoTrait<HeapHashCountedSet<T, U, V> > : public GCInfoTrait<HashCounte dSet<T, U, V, HeapAllocator> > { }; 2317 struct GCInfoTrait<HeapHashCountedSet<T, U, V> > : public GCInfoTrait<HashCounte dSet<T, U, V, HeapAllocator> > { };
2322 2318
2323 } // namespace blink 2319 } // namespace blink
2324 2320
2325 #endif // Heap_h 2321 #endif // Heap_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698