| 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 1549 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1560 // trigger the event. In order to track ALL allocations one must turn off | 1560 // trigger the event. In order to track ALL allocations one must turn off |
| 1561 // FLAG_inline_new and FLAG_use_allocation_folding. | 1561 // FLAG_inline_new and FLAG_use_allocation_folding. |
| 1562 inline void OnAllocationEvent(HeapObject* object, int size_in_bytes); | 1562 inline void OnAllocationEvent(HeapObject* object, int size_in_bytes); |
| 1563 | 1563 |
| 1564 // This event is triggered after object is moved to a new place. | 1564 // This event is triggered after object is moved to a new place. |
| 1565 inline void OnMoveEvent(HeapObject* target, HeapObject* source, | 1565 inline void OnMoveEvent(HeapObject* target, HeapObject* source, |
| 1566 int size_in_bytes); | 1566 int size_in_bytes); |
| 1567 | 1567 |
| 1568 bool deserialization_complete() const { return deserialization_complete_; } | 1568 bool deserialization_complete() const { return deserialization_complete_; } |
| 1569 | 1569 |
| 1570 // The following methods are used to track raw C++ pointers to externally | 1570 void RegisterNewArrayBuffer(void* data, size_t length); |
| 1571 // allocated memory used as backing store in live array buffers. | 1571 void UnregisterArrayBuffer(void* data); |
| 1572 | 1572 void RegisterLiveArrayBuffer(void* data); |
| 1573 // A new ArrayBuffer was created with |data| as backing store. | 1573 void FreeDeadArrayBuffers(); |
| 1574 void RegisterNewArrayBuffer(bool in_new_space, void* data, size_t length); | |
| 1575 | |
| 1576 // The backing store |data| is no longer owned by V8. | |
| 1577 void UnregisterArrayBuffer(bool in_new_space, void* data); | |
| 1578 | |
| 1579 // A live ArrayBuffer was discovered during marking/scavenge. | |
| 1580 void RegisterLiveArrayBuffer(bool in_new_space, void* data); | |
| 1581 | |
| 1582 // Frees all backing store pointers that weren't discovered in the previous | |
| 1583 // marking or scavenge phase. | |
| 1584 void FreeDeadArrayBuffers(bool in_new_space); | |
| 1585 | |
| 1586 // Prepare for a new scavenge phase. A new marking phase is implicitly | |
| 1587 // prepared by finishing the previous one. | |
| 1588 void PrepareArrayBufferDiscoveryInNewSpace(); | |
| 1589 | |
| 1590 // An ArrayBuffer moved from new space to old space. | |
| 1591 void PromoteArrayBuffer(Object* buffer); | |
| 1592 | 1574 |
| 1593 protected: | 1575 protected: |
| 1594 // Methods made available to tests. | 1576 // Methods made available to tests. |
| 1595 | 1577 |
| 1596 // Allocates a JS Map in the heap. | 1578 // Allocates a JS Map in the heap. |
| 1597 MUST_USE_RESULT AllocationResult | 1579 MUST_USE_RESULT AllocationResult |
| 1598 AllocateMap(InstanceType instance_type, int instance_size, | 1580 AllocateMap(InstanceType instance_type, int instance_size, |
| 1599 ElementsKind elements_kind = TERMINAL_FAST_ELEMENTS_KIND); | 1581 ElementsKind elements_kind = TERMINAL_FAST_ELEMENTS_KIND); |
| 1600 | 1582 |
| 1601 // Allocates and initializes a new JavaScript object based on a | 1583 // Allocates and initializes a new JavaScript object based on a |
| (...skipping 483 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2085 | 2067 |
| 2086 // Deopts all code that contains allocation instruction which are tenured or | 2068 // Deopts all code that contains allocation instruction which are tenured or |
| 2087 // not tenured. Moreover it clears the pretenuring allocation site statistics. | 2069 // not tenured. Moreover it clears the pretenuring allocation site statistics. |
| 2088 void ResetAllAllocationSitesDependentCode(PretenureFlag flag); | 2070 void ResetAllAllocationSitesDependentCode(PretenureFlag flag); |
| 2089 | 2071 |
| 2090 // Evaluates local pretenuring for the old space and calls | 2072 // Evaluates local pretenuring for the old space and calls |
| 2091 // ResetAllTenuredAllocationSitesDependentCode if too many objects died in | 2073 // ResetAllTenuredAllocationSitesDependentCode if too many objects died in |
| 2092 // the old space. | 2074 // the old space. |
| 2093 void EvaluateOldSpaceLocalPretenuring(uint64_t size_of_objects_before_gc); | 2075 void EvaluateOldSpaceLocalPretenuring(uint64_t size_of_objects_before_gc); |
| 2094 | 2076 |
| 2095 // Called on heap tear-down. Frees all remaining ArrayBuffer backing stores. | 2077 // Called on heap tear-down. |
| 2096 void TearDownArrayBuffers(); | 2078 void TearDownArrayBuffers(); |
| 2097 | 2079 |
| 2098 // These correspond to the non-Helper versions. | |
| 2099 void RegisterNewArrayBufferHelper(std::map<void*, size_t>& live_buffers, | |
| 2100 void* data, size_t length); | |
| 2101 void UnregisterArrayBufferHelper( | |
| 2102 std::map<void*, size_t>& live_buffers, | |
| 2103 std::map<void*, size_t>& not_yet_discovered_buffers, void* data); | |
| 2104 void RegisterLiveArrayBufferHelper( | |
| 2105 std::map<void*, size_t>& not_yet_discovered_buffers, void* data); | |
| 2106 size_t FreeDeadArrayBuffersHelper( | |
| 2107 Isolate* isolate, std::map<void*, size_t>& live_buffers, | |
| 2108 std::map<void*, size_t>& not_yet_discovered_buffers); | |
| 2109 void TearDownArrayBuffersHelper( | |
| 2110 Isolate* isolate, std::map<void*, size_t>& live_buffers, | |
| 2111 std::map<void*, size_t>& not_yet_discovered_buffers); | |
| 2112 | |
| 2113 // Record statistics before and after garbage collection. | 2080 // Record statistics before and after garbage collection. |
| 2114 void ReportStatisticsBeforeGC(); | 2081 void ReportStatisticsBeforeGC(); |
| 2115 void ReportStatisticsAfterGC(); | 2082 void ReportStatisticsAfterGC(); |
| 2116 | 2083 |
| 2117 // Slow part of scavenge object. | 2084 // Slow part of scavenge object. |
| 2118 static void ScavengeObjectSlow(HeapObject** p, HeapObject* object); | 2085 static void ScavengeObjectSlow(HeapObject** p, HeapObject* object); |
| 2119 | 2086 |
| 2120 // Total RegExp code ever generated | 2087 // Total RegExp code ever generated |
| 2121 double total_regexp_code_generated_; | 2088 double total_regexp_code_generated_; |
| 2122 | 2089 |
| (...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2345 | 2312 |
| 2346 base::Mutex relocation_mutex_; | 2313 base::Mutex relocation_mutex_; |
| 2347 | 2314 |
| 2348 int gc_callbacks_depth_; | 2315 int gc_callbacks_depth_; |
| 2349 | 2316 |
| 2350 bool deserialization_complete_; | 2317 bool deserialization_complete_; |
| 2351 | 2318 |
| 2352 bool concurrent_sweeping_enabled_; | 2319 bool concurrent_sweeping_enabled_; |
| 2353 | 2320 |
| 2354 std::map<void*, size_t> live_array_buffers_; | 2321 std::map<void*, size_t> live_array_buffers_; |
| 2355 std::map<void*, size_t> live_new_array_buffers_; | |
| 2356 std::map<void*, size_t> not_yet_discovered_array_buffers_; | 2322 std::map<void*, size_t> not_yet_discovered_array_buffers_; |
| 2357 std::map<void*, size_t> not_yet_discovered_new_array_buffers_; | |
| 2358 | 2323 |
| 2359 struct StrongRootsList; | 2324 struct StrongRootsList; |
| 2360 StrongRootsList* strong_roots_list_; | 2325 StrongRootsList* strong_roots_list_; |
| 2361 | 2326 |
| 2362 friend class AlwaysAllocateScope; | 2327 friend class AlwaysAllocateScope; |
| 2363 friend class Deserializer; | 2328 friend class Deserializer; |
| 2364 friend class Factory; | 2329 friend class Factory; |
| 2365 friend class GCCallbacksScope; | 2330 friend class GCCallbacksScope; |
| 2366 friend class GCTracer; | 2331 friend class GCTracer; |
| 2367 friend class HeapIterator; | 2332 friend class HeapIterator; |
| (...skipping 447 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2815 DisallowHeapAllocation no_allocation; // i.e. no gc allowed. | 2780 DisallowHeapAllocation no_allocation; // i.e. no gc allowed. |
| 2816 | 2781 |
| 2817 private: | 2782 private: |
| 2818 DISALLOW_IMPLICIT_CONSTRUCTORS(PathTracer); | 2783 DISALLOW_IMPLICIT_CONSTRUCTORS(PathTracer); |
| 2819 }; | 2784 }; |
| 2820 #endif // DEBUG | 2785 #endif // DEBUG |
| 2821 } | 2786 } |
| 2822 } // namespace v8::internal | 2787 } // namespace v8::internal |
| 2823 | 2788 |
| 2824 #endif // V8_HEAP_HEAP_H_ | 2789 #endif // V8_HEAP_HEAP_H_ |
| OLD | NEW |