Index: src/heap/spaces.h |
diff --git a/src/heap/spaces.h b/src/heap/spaces.h |
index cf06ca78aafc57fd7f6569c2217b730864c86fbd..a06db3298926b264ef2d4b88abb604fcb5bd4433 100644 |
--- a/src/heap/spaces.h |
+++ b/src/heap/spaces.h |
@@ -14,6 +14,7 @@ |
#include "src/base/platform/mutex.h" |
#include "src/flags.h" |
#include "src/hashmap.h" |
+#include "src/heap/array-buffer-tracker.h" |
#include "src/list.h" |
#include "src/objects.h" |
#include "src/utils.h" |
@@ -468,6 +469,8 @@ class MemoryChunk { |
kSweepingInProgress, |
}; |
+ enum ArrayBufferTrackerAccessMode { kDontCreate, kCreateIfNotPresent }; |
+ |
// Every n write barrier invocations we go to runtime even though |
// we could have handled it in generated code. This lets us check |
// whether we have hit the limit and should do some more marking. |
@@ -523,7 +526,8 @@ class MemoryChunk { |
+ kPointerSize // AtomicValue next_chunk_ |
+ kPointerSize // AtomicValue prev_chunk_ |
// FreeListCategory categories_[kNumberOfCategories] |
- + FreeListCategory::kSize * kNumberOfCategories; |
+ + FreeListCategory::kSize * kNumberOfCategories + |
+ kPointerSize; // LocalArrayBufferTracker tracker_ |
// We add some more space to the computed header size to amount for missing |
// alignment requirements in our computation. |
@@ -642,6 +646,21 @@ class MemoryChunk { |
void AllocateTypedOldToOldSlots(); |
void ReleaseTypedOldToOldSlots(); |
+ template <ArrayBufferTrackerAccessMode tracker_access> |
+ inline LocalArrayBufferTracker* local_tracker() { |
+ LocalArrayBufferTracker* tracker = local_tracker_.Value(); |
+ if (tracker == nullptr && tracker_access == kCreateIfNotPresent) { |
+ tracker = new LocalArrayBufferTracker(heap_); |
+ if (!local_tracker_.TrySetValue(nullptr, tracker)) { |
+ tracker = local_tracker_.Value(); |
+ } |
+ DCHECK_NOT_NULL(tracker); |
+ } |
+ return tracker; |
+ } |
+ |
+ void ReleaseLocalTracker(); |
+ |
Address area_start() { return area_start_; } |
Address area_end() { return area_end_; } |
int area_size() { return static_cast<int>(area_end() - area_start()); } |
@@ -827,6 +846,8 @@ class MemoryChunk { |
FreeListCategory categories_[kNumberOfCategories]; |
+ base::AtomicValue<LocalArrayBufferTracker*> local_tracker_; |
+ |
private: |
void InitializeReservedMemory() { reservation_.Reset(); } |