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 |
11 // Clients of this interface shouldn't depend on lots of heap internals. | 11 // Clients of this interface shouldn't depend on lots of heap internals. |
12 // Do not include anything from src/heap here! | 12 // Do not include anything from src/heap here! |
13 #include "include/v8.h" | 13 #include "include/v8.h" |
14 #include "src/allocation.h" | 14 #include "src/allocation.h" |
15 #include "src/assert-scope.h" | 15 #include "src/assert-scope.h" |
16 #include "src/base/atomic-utils.h" | 16 #include "src/base/atomic-utils.h" |
| 17 #include "src/debug/debug-interface.h" |
17 #include "src/globals.h" | 18 #include "src/globals.h" |
18 #include "src/heap-symbols.h" | 19 #include "src/heap-symbols.h" |
19 #include "src/list.h" | 20 #include "src/list.h" |
20 #include "src/objects.h" | 21 #include "src/objects.h" |
21 | 22 |
22 namespace v8 { | 23 namespace v8 { |
23 namespace internal { | 24 namespace internal { |
24 | 25 |
25 using v8::MemoryPressureLevel; | 26 using v8::MemoryPressureLevel; |
26 | 27 |
(...skipping 812 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
839 void CreateApiObjects(); | 840 void CreateApiObjects(); |
840 | 841 |
841 // Implements the corresponding V8 API function. | 842 // Implements the corresponding V8 API function. |
842 bool IdleNotification(double deadline_in_seconds); | 843 bool IdleNotification(double deadline_in_seconds); |
843 bool IdleNotification(int idle_time_in_ms); | 844 bool IdleNotification(int idle_time_in_ms); |
844 | 845 |
845 void MemoryPressureNotification(MemoryPressureLevel level, | 846 void MemoryPressureNotification(MemoryPressureLevel level, |
846 bool is_isolate_locked); | 847 bool is_isolate_locked); |
847 void CheckMemoryPressure(); | 848 void CheckMemoryPressure(); |
848 | 849 |
| 850 void SetOutOfMemoryCallback(v8::debug::OutOfMemoryCallback callback, |
| 851 void* data); |
| 852 |
849 double MonotonicallyIncreasingTimeInMs(); | 853 double MonotonicallyIncreasingTimeInMs(); |
850 | 854 |
851 void RecordStats(HeapStats* stats, bool take_snapshot = false); | 855 void RecordStats(HeapStats* stats, bool take_snapshot = false); |
852 | 856 |
853 // Check new space expansion criteria and expand semispaces if it was hit. | 857 // Check new space expansion criteria and expand semispaces if it was hit. |
854 void CheckNewSpaceExpansionCriteria(); | 858 void CheckNewSpaceExpansionCriteria(); |
855 | 859 |
856 void VisitExternalResources(v8::ExternalResourceVisitor* visitor); | 860 void VisitExternalResources(v8::ExternalResourceVisitor* visitor); |
857 | 861 |
858 // An object should be promoted if the object has survived a | 862 // An object should be promoted if the object has survived a |
(...skipping 893 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1752 inline void UpdateAllocationsHash(uint32_t value); | 1756 inline void UpdateAllocationsHash(uint32_t value); |
1753 void PrintAlloctionsHash(); | 1757 void PrintAlloctionsHash(); |
1754 | 1758 |
1755 void AddToRingBuffer(const char* string); | 1759 void AddToRingBuffer(const char* string); |
1756 void GetFromRingBuffer(char* buffer); | 1760 void GetFromRingBuffer(char* buffer); |
1757 | 1761 |
1758 void CompactRetainedMaps(ArrayList* retained_maps); | 1762 void CompactRetainedMaps(ArrayList* retained_maps); |
1759 | 1763 |
1760 void CollectGarbageOnMemoryPressure(); | 1764 void CollectGarbageOnMemoryPressure(); |
1761 | 1765 |
| 1766 void InvokeOutOfMemoryCallback(); |
| 1767 |
1762 // Attempt to over-approximate the weak closure by marking object groups and | 1768 // Attempt to over-approximate the weak closure by marking object groups and |
1763 // implicit references from global handles, but don't atomically complete | 1769 // implicit references from global handles, but don't atomically complete |
1764 // marking. If we continue to mark incrementally, we might have marked | 1770 // marking. If we continue to mark incrementally, we might have marked |
1765 // objects that die later. | 1771 // objects that die later. |
1766 void FinalizeIncrementalMarking(GarbageCollectionReason gc_reason); | 1772 void FinalizeIncrementalMarking(GarbageCollectionReason gc_reason); |
1767 | 1773 |
1768 // Returns the timer used for a given GC type. | 1774 // Returns the timer used for a given GC type. |
1769 // - GCScavenger: young generation GC | 1775 // - GCScavenger: young generation GC |
1770 // - GCCompactor: full GC | 1776 // - GCCompactor: full GC |
1771 // - GCFinalzeMC: finalization of incremental full GC | 1777 // - GCFinalzeMC: finalization of incremental full GC |
(...skipping 390 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2162 size_t survived_last_scavenge_; | 2168 size_t survived_last_scavenge_; |
2163 | 2169 |
2164 // This is not the depth of nested AlwaysAllocateScope's but rather a single | 2170 // This is not the depth of nested AlwaysAllocateScope's but rather a single |
2165 // count, as scopes can be acquired from multiple tasks (read: threads). | 2171 // count, as scopes can be acquired from multiple tasks (read: threads). |
2166 base::AtomicNumber<size_t> always_allocate_scope_count_; | 2172 base::AtomicNumber<size_t> always_allocate_scope_count_; |
2167 | 2173 |
2168 // Stores the memory pressure level that set by MemoryPressureNotification | 2174 // Stores the memory pressure level that set by MemoryPressureNotification |
2169 // and reset by a mark-compact garbage collection. | 2175 // and reset by a mark-compact garbage collection. |
2170 base::AtomicValue<MemoryPressureLevel> memory_pressure_level_; | 2176 base::AtomicValue<MemoryPressureLevel> memory_pressure_level_; |
2171 | 2177 |
| 2178 v8::debug::OutOfMemoryCallback out_of_memory_callback_; |
| 2179 void* out_of_memory_callback_data_; |
| 2180 |
2172 // For keeping track of context disposals. | 2181 // For keeping track of context disposals. |
2173 int contexts_disposed_; | 2182 int contexts_disposed_; |
2174 | 2183 |
2175 // The length of the retained_maps array at the time of context disposal. | 2184 // The length of the retained_maps array at the time of context disposal. |
2176 // This separates maps in the retained_maps array that were created before | 2185 // This separates maps in the retained_maps array that were created before |
2177 // and after context disposal. | 2186 // and after context disposal. |
2178 int number_of_disposed_maps_; | 2187 int number_of_disposed_maps_; |
2179 | 2188 |
2180 int global_ic_age_; | 2189 int global_ic_age_; |
2181 | 2190 |
(...skipping 496 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2678 friend class LargeObjectSpace; | 2687 friend class LargeObjectSpace; |
2679 friend class NewSpace; | 2688 friend class NewSpace; |
2680 friend class PagedSpace; | 2689 friend class PagedSpace; |
2681 DISALLOW_COPY_AND_ASSIGN(AllocationObserver); | 2690 DISALLOW_COPY_AND_ASSIGN(AllocationObserver); |
2682 }; | 2691 }; |
2683 | 2692 |
2684 } // namespace internal | 2693 } // namespace internal |
2685 } // namespace v8 | 2694 } // namespace v8 |
2686 | 2695 |
2687 #endif // V8_HEAP_HEAP_H_ | 2696 #endif // V8_HEAP_HEAP_H_ |
OLD | NEW |