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

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: For eager tracing, check for cross-heap access 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 765 matching lines...) Expand 10 before | Expand all | Expand 10 after
880 static void pushWeakPointerCallback(void* closure, void* containerObject, We akPointerCallback); 875 static void pushWeakPointerCallback(void* closure, void* containerObject, We akPointerCallback);
881 876
882 // Similar to the more general pushWeakPointerCallback, but cell 877 // Similar to the more general pushWeakPointerCallback, but cell
883 // pointer callbacks are added to a static callback work list and the weak 878 // pointer callbacks are added to a static callback work list and the weak
884 // callback is performed on the thread performing garbage collection. This 879 // callback is performed on the thread performing garbage collection. This
885 // is OK because cells are just cleared and no deallocation can happen. 880 // is OK because cells are just cleared and no deallocation can happen.
886 static void pushWeakCellPointerCallback(void** cell, WeakPointerCallback); 881 static void pushWeakCellPointerCallback(void** cell, WeakPointerCallback);
887 882
888 // Pop the top of a marking stack and call the callback with the visitor 883 // Pop the top of a marking stack and call the callback with the visitor
889 // and the object. Returns false when there is nothing more to do. 884 // and the object. Returns false when there is nothing more to do.
890 template<CallbackInvocationMode Mode> static bool popAndInvokeTraceCallback( CallbackStack*, Visitor*); 885 static bool popAndInvokeTraceCallback(CallbackStack*, Visitor*);
891 886
892 // Remove an item from the post-marking callback stack and call 887 // Remove an item from the post-marking callback stack and call
893 // the callback with the visitor and the object pointer. Returns 888 // the callback with the visitor and the object pointer. Returns
894 // false when there is nothing more to do. 889 // false when there is nothing more to do.
895 static bool popAndInvokePostMarkingCallback(Visitor*); 890 static bool popAndInvokePostMarkingCallback(Visitor*);
896 891
897 // Remove an item from the weak callback work list and call the callback 892 // Remove an item from the weak callback work list and call the callback
898 // with the visitor and the closure pointer. Returns false when there is 893 // with the visitor and the closure pointer. Returns false when there is
899 // nothing more to do. 894 // nothing more to do.
900 static bool popAndInvokeWeakPointerCallback(Visitor*); 895 static bool popAndInvokeWeakPointerCallback(Visitor*);
901 896
902 // Register an ephemeron table for fixed-point iteration. 897 // Register an ephemeron table for fixed-point iteration.
903 static void registerWeakTable(void* containerObject, EphemeronCallback, Ephe meronCallback); 898 static void registerWeakTable(void* containerObject, EphemeronCallback, Ephe meronCallback);
904 #if ENABLE(ASSERT) 899 #if ENABLE(ASSERT)
905 static bool weakTableRegistered(const void*); 900 static bool weakTableRegistered(const void*);
906 #endif 901 #endif
907 902
908 template<typename T, typename HeapTraits> static Address allocate(size_t); 903 template<typename T, typename HeapTraits> static Address allocate(size_t);
909 // FIXME: remove this once c++11 is allowed everywhere: 904 // FIXME: remove this once c++11 is allowed everywhere:
910 template<typename T> static Address allocate(size_t); 905 template<typename T> static Address allocate(size_t);
911 906
912 template<typename T> static Address reallocate(void* previous, size_t); 907 template<typename T> static Address reallocate(void* previous, size_t);
913 908
914 static void collectGarbage(ThreadState::StackState, ThreadState::CauseOfGC = ThreadState::NormalGC); 909 static void collectGarbage(ThreadState::StackState, ThreadState::CauseOfGC = ThreadState::NormalGC);
915 static void collectGarbageForTerminatingThread(ThreadState*); 910 static void collectGarbageForTerminatingThread(ThreadState*);
916 static void collectAllGarbage(); 911 static void collectAllGarbage();
917 template<CallbackInvocationMode Mode> static void processMarkingStack(); 912 static void processMarkingStack();
918 static void postMarkingProcessing(); 913 static void postMarkingProcessing();
919 static void globalWeakProcessing(); 914 static void globalWeakProcessing();
920 static void setForcePreciseGCForTesting(); 915 static void setForcePreciseGCForTesting();
921 916
922 static void preGC(); 917 static void preGC();
923 static void postGC(); 918 static void postGC();
924 919
925 // Conservatively checks whether an address is a pointer in any of the threa d 920 // Conservatively checks whether an address is a pointer in any of the threa d
926 // heaps. If so marks the object pointed to as live. 921 // heaps. If so marks the object pointed to as live.
927 static Address checkAndMarkPointer(Visitor*, Address); 922 static Address checkAndMarkPointer(Visitor*, Address);
(...skipping 1418 matching lines...) Expand 10 before | Expand all | Expand 10 after
2346 template<typename T, size_t inlineCapacity> 2341 template<typename T, size_t inlineCapacity>
2347 struct GCInfoTrait<HeapVector<T, inlineCapacity> > : public GCInfoTrait<Vector<T , inlineCapacity, HeapAllocator> > { }; 2342 struct GCInfoTrait<HeapVector<T, inlineCapacity> > : public GCInfoTrait<Vector<T , inlineCapacity, HeapAllocator> > { };
2348 template<typename T, size_t inlineCapacity> 2343 template<typename T, size_t inlineCapacity>
2349 struct GCInfoTrait<HeapDeque<T, inlineCapacity> > : public GCInfoTrait<Deque<T, inlineCapacity, HeapAllocator> > { }; 2344 struct GCInfoTrait<HeapDeque<T, inlineCapacity> > : public GCInfoTrait<Deque<T, inlineCapacity, HeapAllocator> > { };
2350 template<typename T, typename U, typename V> 2345 template<typename T, typename U, typename V>
2351 struct GCInfoTrait<HeapHashCountedSet<T, U, V> > : public GCInfoTrait<HashCounte dSet<T, U, V, HeapAllocator> > { }; 2346 struct GCInfoTrait<HeapHashCountedSet<T, U, V> > : public GCInfoTrait<HashCounte dSet<T, U, V, HeapAllocator> > { };
2352 2347
2353 } // namespace blink 2348 } // namespace blink
2354 2349
2355 #endif // Heap_h 2350 #endif // Heap_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698