Index: src/heap/heap.h |
diff --git a/src/heap/heap.h b/src/heap/heap.h |
index 933c4dc4dc4c9480297a1e4cb5c05a0e599b8ef1..a5d113117430b42b36d4b25f7770368fcd5c3083 100644 |
--- a/src/heap/heap.h |
+++ b/src/heap/heap.h |
@@ -420,6 +420,7 @@ namespace internal { |
PRIVATE_SYMBOL_LIST(V) |
// Forward declarations. |
+class ArrayBufferTracker; |
class HeapObjectsFilter; |
class HeapStats; |
class Isolate; |
@@ -984,6 +985,10 @@ class Heap { |
return amount_of_external_allocated_memory_; |
} |
+ void update_amount_of_external_allocated_memory(int64_t delta) { |
+ amount_of_external_allocated_memory_ += delta; |
+ } |
+ |
void DeoptMarkedAllocationSites(); |
bool DeoptMaybeTenuredAllocationSites() { |
@@ -1009,29 +1014,6 @@ class Heap { |
bool deserialization_complete() const { return deserialization_complete_; } |
- // The following methods are used to track raw C++ pointers to externally |
- // allocated memory used as backing store in live array buffers. |
- |
- // A new ArrayBuffer was created with |data| as backing store. |
- void RegisterNewArrayBuffer(bool in_new_space, void* data, size_t length); |
- |
- // The backing store |data| is no longer owned by V8. |
- void UnregisterArrayBuffer(bool in_new_space, void* data); |
- |
- // A live ArrayBuffer was discovered during marking/scavenge. |
- void RegisterLiveArrayBuffer(bool in_new_space, void* data); |
- |
- // Frees all backing store pointers that weren't discovered in the previous |
- // marking or scavenge phase. |
- void FreeDeadArrayBuffers(bool from_scavenge); |
- |
- // Prepare for a new scavenge phase. A new marking phase is implicitly |
- // prepared by finishing the previous one. |
- void PrepareArrayBufferDiscoveryInNewSpace(); |
- |
- // An ArrayBuffer moved from new space to old space. |
- void PromoteArrayBuffer(Object* buffer); |
- |
bool HasLowAllocationRate(); |
bool HasHighFragmentation(); |
bool HasHighFragmentation(intptr_t used, intptr_t committed); |
@@ -1522,6 +1504,16 @@ class Heap { |
int allocation_size, |
AllocationAlignment alignment); |
+ // =========================================================================== |
+ // ArrayBufferTracker. ======================================================= |
+ // =========================================================================== |
+ void RegisterNewArrayBuffer(JSArrayBuffer* buffer); |
+ void UnregisterArrayBuffer(JSArrayBuffer* buffer); |
+ |
+ inline ArrayBufferTracker* array_buffer_tracker() { |
+ return array_buffer_tracker_; |
+ } |
+ |
// ============================================================================= |
#ifdef VERIFY_HEAP |
@@ -1755,9 +1747,6 @@ class Heap { |
// the old space. |
void EvaluateOldSpaceLocalPretenuring(uint64_t size_of_objects_before_gc); |
- // Called on heap tear-down. Frees all remaining ArrayBuffer backing stores. |
- void TearDownArrayBuffers(); |
- |
// Record statistics before and after garbage collection. |
void ReportStatisticsBeforeGC(); |
void ReportStatisticsAfterGC(); |
@@ -2339,27 +2328,10 @@ class Heap { |
bool concurrent_sweeping_enabled_; |
- // |live_array_buffers_| maps externally allocated memory used as backing |
- // store for ArrayBuffers to the length of the respective memory blocks. |
- // |
- // At the beginning of mark/compact, |not_yet_discovered_array_buffers_| is |
- // a copy of |live_array_buffers_| and we remove pointers as we discover live |
- // ArrayBuffer objects during marking. At the end of mark/compact, the |
- // remaining memory blocks can be freed. |
- std::map<void*, size_t> live_array_buffers_; |
- std::map<void*, size_t> not_yet_discovered_array_buffers_; |
- |
- // To be able to free memory held by ArrayBuffers during scavenge as well, we |
- // have a separate list of allocated memory held by ArrayBuffers in new space. |
- // |
- // Since mark/compact also evacuates the new space, all pointers in the |
- // |live_array_buffers_for_scavenge_| list are also in the |
- // |live_array_buffers_| list. |
- std::map<void*, size_t> live_array_buffers_for_scavenge_; |
- std::map<void*, size_t> not_yet_discovered_array_buffers_for_scavenge_; |
- |
StrongRootsList* strong_roots_list_; |
+ ArrayBufferTracker* array_buffer_tracker_; |
+ |
// Classes in "heap" can be friends. |
friend class AlwaysAllocateScope; |
friend class GCCallbacksScope; |