OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef V8_HEAP_HEAP_H_ | 5 #ifndef V8_HEAP_HEAP_H_ |
6 #define V8_HEAP_HEAP_H_ | 6 #define V8_HEAP_HEAP_H_ |
7 | 7 |
8 #include <cmath> | 8 #include <cmath> |
9 #include <map> | 9 #include <map> |
10 | 10 |
(...skipping 1209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1220 | 1220 |
1221 void FinalizeIncrementalMarkingIfComplete(GarbageCollectionReason gc_reason); | 1221 void FinalizeIncrementalMarkingIfComplete(GarbageCollectionReason gc_reason); |
1222 | 1222 |
1223 bool TryFinalizeIdleIncrementalMarking(double idle_time_in_ms, | 1223 bool TryFinalizeIdleIncrementalMarking(double idle_time_in_ms, |
1224 GarbageCollectionReason gc_reason); | 1224 GarbageCollectionReason gc_reason); |
1225 | 1225 |
1226 void RegisterReservationsForBlackAllocation(Reservation* reservations); | 1226 void RegisterReservationsForBlackAllocation(Reservation* reservations); |
1227 | 1227 |
1228 IncrementalMarking* incremental_marking() { return incremental_marking_; } | 1228 IncrementalMarking* incremental_marking() { return incremental_marking_; } |
1229 | 1229 |
| 1230 // The runtime uses this function to notify potentially unsafe object layout |
| 1231 // changes that require special synchronization with the concurrent marker. |
| 1232 // A layout change is unsafe if |
| 1233 // - it removes a tagged in-object field. |
| 1234 // - it replaces a tagged in-objects field with an untagged in-object field. |
| 1235 void NotifyObjectLayoutChange(HeapObject* object, |
| 1236 const DisallowHeapAllocation&); |
| 1237 #ifdef VERIFY_HEAP |
| 1238 // This function checks that either |
| 1239 // - the map transition is safe, |
| 1240 // - or it was communicated to GC using NotifyObjectLayoutChange. |
| 1241 void VerifyObjectLayoutChange(HeapObject* object, Map* new_map); |
| 1242 #endif |
| 1243 |
1230 // =========================================================================== | 1244 // =========================================================================== |
1231 // Embedder heap tracer support. ============================================= | 1245 // Embedder heap tracer support. ============================================= |
1232 // =========================================================================== | 1246 // =========================================================================== |
1233 | 1247 |
1234 LocalEmbedderHeapTracer* local_embedder_heap_tracer() { | 1248 LocalEmbedderHeapTracer* local_embedder_heap_tracer() { |
1235 return local_embedder_heap_tracer_; | 1249 return local_embedder_heap_tracer_; |
1236 } | 1250 } |
1237 void SetEmbedderHeapTracer(EmbedderHeapTracer* tracer); | 1251 void SetEmbedderHeapTracer(EmbedderHeapTracer* tracer); |
1238 void TracePossibleWrapper(JSObject* js_object); | 1252 void TracePossibleWrapper(JSObject* js_object); |
1239 void RegisterExternallyReferencedObject(Object** object); | 1253 void RegisterExternallyReferencedObject(Object** object); |
(...skipping 1097 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2337 int heap_iterator_depth_; | 2351 int heap_iterator_depth_; |
2338 | 2352 |
2339 LocalEmbedderHeapTracer* local_embedder_heap_tracer_; | 2353 LocalEmbedderHeapTracer* local_embedder_heap_tracer_; |
2340 | 2354 |
2341 bool fast_promotion_mode_; | 2355 bool fast_promotion_mode_; |
2342 | 2356 |
2343 // Used for testing purposes. | 2357 // Used for testing purposes. |
2344 bool force_oom_; | 2358 bool force_oom_; |
2345 bool delay_sweeper_tasks_for_testing_; | 2359 bool delay_sweeper_tasks_for_testing_; |
2346 | 2360 |
| 2361 HeapObject* pending_layout_change_object_; |
| 2362 |
2347 // Classes in "heap" can be friends. | 2363 // Classes in "heap" can be friends. |
2348 friend class AlwaysAllocateScope; | 2364 friend class AlwaysAllocateScope; |
2349 friend class GCCallbacksScope; | 2365 friend class GCCallbacksScope; |
2350 friend class GCTracer; | 2366 friend class GCTracer; |
2351 friend class HeapIterator; | 2367 friend class HeapIterator; |
2352 friend class IdleScavengeObserver; | 2368 friend class IdleScavengeObserver; |
2353 friend class IncrementalMarking; | 2369 friend class IncrementalMarking; |
2354 friend class IncrementalMarkingJob; | 2370 friend class IncrementalMarkingJob; |
2355 friend class LargeObjectSpace; | 2371 friend class LargeObjectSpace; |
2356 friend class MarkCompactCollector; | 2372 friend class MarkCompactCollector; |
(...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2648 friend class LargeObjectSpace; | 2664 friend class LargeObjectSpace; |
2649 friend class NewSpace; | 2665 friend class NewSpace; |
2650 friend class PagedSpace; | 2666 friend class PagedSpace; |
2651 DISALLOW_COPY_AND_ASSIGN(AllocationObserver); | 2667 DISALLOW_COPY_AND_ASSIGN(AllocationObserver); |
2652 }; | 2668 }; |
2653 | 2669 |
2654 } // namespace internal | 2670 } // namespace internal |
2655 } // namespace v8 | 2671 } // namespace v8 |
2656 | 2672 |
2657 #endif // V8_HEAP_HEAP_H_ | 2673 #endif // V8_HEAP_HEAP_H_ |
OLD | NEW |