summaryrefslogtreecommitdiff
path: root/deps/v8/src/heap/array-buffer-tracker.cc
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/heap/array-buffer-tracker.cc')
-rw-r--r--deps/v8/src/heap/array-buffer-tracker.cc35
1 files changed, 27 insertions, 8 deletions
diff --git a/deps/v8/src/heap/array-buffer-tracker.cc b/deps/v8/src/heap/array-buffer-tracker.cc
index 5acf9b9bfb..589756fdc3 100644
--- a/deps/v8/src/heap/array-buffer-tracker.cc
+++ b/deps/v8/src/heap/array-buffer-tracker.cc
@@ -29,7 +29,7 @@ void LocalArrayBufferTracker::Process(Callback callback) {
size_t moved_size = 0;
for (TrackingData::iterator it = array_buffers_.begin();
it != array_buffers_.end();) {
- old_buffer = reinterpret_cast<JSArrayBuffer*>(*it);
+ old_buffer = reinterpret_cast<JSArrayBuffer*>(it->first);
const CallbackResult result = callback(old_buffer, &new_buffer);
if (result == kKeepEntry) {
new_retained_size += NumberToSize(old_buffer->byte_length());
@@ -51,13 +51,12 @@ void LocalArrayBufferTracker::Process(Callback callback) {
}
it = array_buffers_.erase(it);
} else if (result == kRemoveEntry) {
- // Size of freed memory is computed to avoid looking at dead objects.
- void* allocation_base = old_buffer->allocation_base();
- DCHECK_NOT_NULL(allocation_base);
-
- backing_stores_to_free->emplace_back(allocation_base,
- old_buffer->allocation_length(),
- old_buffer->allocation_mode());
+ // We pass backing_store() and stored length to the collector for freeing
+ // the backing store. Wasm allocations will go through their own tracker
+ // based on the backing store.
+ backing_stores_to_free->emplace_back(
+ old_buffer->backing_store(), it->second, old_buffer->backing_store(),
+ old_buffer->allocation_mode(), old_buffer->is_wasm_memory());
it = array_buffers_.erase(it);
} else {
UNREACHABLE();
@@ -135,5 +134,25 @@ bool ArrayBufferTracker::IsTracked(JSArrayBuffer* buffer) {
}
}
+void ArrayBufferTracker::TearDown(Heap* heap) {
+ // ArrayBuffers can only be found in NEW_SPACE and OLD_SPACE.
+ for (Page* p : *heap->old_space()) {
+ FreeAll(p);
+ }
+ NewSpace* new_space = heap->new_space();
+ if (new_space->to_space().is_committed()) {
+ for (Page* p : new_space->to_space()) {
+ FreeAll(p);
+ }
+ }
+#ifdef DEBUG
+ if (new_space->from_space().is_committed()) {
+ for (Page* p : new_space->from_space()) {
+ DCHECK(!p->contains_array_buffers());
+ }
+ }
+#endif // DEBUG
+}
+
} // namespace internal
} // namespace v8