| Index: src/heap/spaces.h
|
| diff --git a/src/heap/spaces.h b/src/heap/spaces.h
|
| index c8c4d3f5bbd6dd7d97a1d471377e94bf4f416ef4..ae2ff5af9e04f4bf5f7f5f4a6f0f30df72a9c360 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"
|
| @@ -522,7 +523,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.
|
| @@ -817,6 +819,8 @@ class MemoryChunk {
|
|
|
| FreeListCategory categories_[kNumberOfCategories];
|
|
|
| + LocalArrayBufferTracker* local_tracker_;
|
| +
|
| private:
|
| void InitializeReservedMemory() { reservation_.Reset(); }
|
|
|
| @@ -947,6 +951,23 @@ class Page : public MemoryChunk {
|
| available_in_free_list_.Increment(available);
|
| }
|
|
|
| + LocalArrayBufferTracker* local_tracker() {
|
| + if (local_tracker_ == nullptr) {
|
| + local_tracker_ = new LocalArrayBufferTracker(heap_);
|
| + }
|
| + return local_tracker_;
|
| + }
|
| +
|
| + void FreeDeadArraybuffersAndResetTracker() {
|
| + if (local_tracker_ != nullptr) {
|
| + local_tracker_->FreeDeadAndReset();
|
| + if (local_tracker_->IsEmpty()) {
|
| + delete local_tracker_;
|
| + local_tracker_ = nullptr;
|
| + }
|
| + }
|
| + }
|
| +
|
| #ifdef DEBUG
|
| void Print();
|
| #endif // DEBUG
|
| @@ -2859,6 +2880,9 @@ class NewSpace : public Space {
|
| void PauseAllocationObservers() override;
|
| void ResumeAllocationObservers() override;
|
|
|
| + SemiSpace* from_space() { return &from_space_; }
|
| + SemiSpace* to_space() { return &to_space_; }
|
| +
|
| private:
|
| // Update allocation info to match the current to-space page.
|
| void UpdateAllocationInfo();
|
|
|