// Copyright 2017 the V8 project authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef V8_HEAP_ARRAY_BUFFER_COLLECTOR_H_ #define V8_HEAP_ARRAY_BUFFER_COLLECTOR_H_ #include #include "src/base/platform/mutex.h" #include "src/objects/js-array-buffer.h" namespace v8 { namespace internal { class Heap; // To support background processing of array buffer backing stores, we process // array buffers using the ArrayBufferTracker class. The ArrayBufferCollector // keeps track of garbage backing stores so that they can be freed on a // background thread. class ArrayBufferCollector { public: explicit ArrayBufferCollector(Heap* heap) : heap_(heap) {} ~ArrayBufferCollector() { PerformFreeAllocations(); } // These allocations will be either // - freed immediately when under memory pressure, or // - queued for freeing in FreeAllocations() or during tear down. // // FreeAllocations() potentially triggers a background task for processing. void QueueOrFreeGarbageAllocations( std::vector allocations); // Calls FreeAllocations() on a background thread. void FreeAllocations(); private: class FreeingTask; // Begin freeing the allocations added through QueueOrFreeGarbageAllocations. // Also called by TearDown. void PerformFreeAllocations(); Heap* const heap_; base::Mutex allocations_mutex_; std::vector> allocations_; }; } // namespace internal } // namespace v8 #endif // V8_HEAP_ARRAY_BUFFER_COLLECTOR_H_