Index: src/heap/array-buffer-tracker-inl.h |
diff --git a/src/heap/array-buffer-tracker-inl.h b/src/heap/array-buffer-tracker-inl.h |
index a6a0f54a0900f6b9eac96feafacfc0a44576f542..a176744e7af0f27ae7a685d2991b6fd376135416 100644 |
--- a/src/heap/array-buffer-tracker-inl.h |
+++ b/src/heap/array-buffer-tracker-inl.h |
@@ -24,7 +24,7 @@ |
tracker = page->local_tracker(); |
} |
DCHECK_NOT_NULL(tracker); |
- tracker->Add(buffer); |
+ tracker->Add(buffer, std::make_pair(data, length)); |
} |
// We may go over the limit of externally allocated memory here. We call the |
// api function to trigger a GC in this case. |
@@ -37,29 +37,30 @@ |
if (!data) return; |
Page* page = Page::FromAddress(buffer->address()); |
- size_t length = NumberToSize(heap->isolate(), buffer->byte_length()); |
+ size_t length = 0; |
{ |
base::LockGuard<base::Mutex> guard(page->mutex()); |
LocalArrayBufferTracker* tracker = page->local_tracker(); |
DCHECK_NOT_NULL(tracker); |
- tracker->Remove(buffer); |
+ length = tracker->Remove(buffer).second; |
} |
heap->update_external_memory(-static_cast<intptr_t>(length)); |
} |
-void LocalArrayBufferTracker::Add(Key key) { |
- auto ret = array_buffers_.insert(key); |
+void LocalArrayBufferTracker::Add(Key key, const Value& value) { |
+ auto ret = array_buffers_.insert(std::make_pair(key, value)); |
USE(ret); |
// Check that we indeed inserted a new value and did not overwrite an existing |
// one (which would be a bug). |
DCHECK(ret.second); |
} |
-void LocalArrayBufferTracker::Remove(Key key) { |
- TrackingData::iterator it = array_buffers_.find(key); |
- // Check that we indeed find a key to remove. |
+LocalArrayBufferTracker::Value LocalArrayBufferTracker::Remove(Key key) { |
+ TrackingMap::iterator it = array_buffers_.find(key); |
DCHECK(it != array_buffers_.end()); |
+ Value value = it->second; |
array_buffers_.erase(it); |
+ return value; |
} |
} // namespace internal |