Home | History | Annotate | Download | only in heap
      1 // Copyright 2017 the V8 project authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef V8_HEAP_ARRAY_BUFFER_COLLECTOR_H_
      6 #define V8_HEAP_ARRAY_BUFFER_COLLECTOR_H_
      7 
      8 #include <vector>
      9 
     10 #include "src/base/platform/mutex.h"
     11 #include "src/objects/js-array-buffer.h"
     12 
     13 namespace v8 {
     14 namespace internal {
     15 
     16 class Heap;
     17 
     18 // To support background processing of array buffer backing stores, we process
     19 // array buffers using the ArrayBufferTracker class. The ArrayBufferCollector
     20 // keeps track of garbage backing stores so that they can be freed on a
     21 // background thread.
     22 class ArrayBufferCollector {
     23  public:
     24   explicit ArrayBufferCollector(Heap* heap) : heap_(heap) {}
     25 
     26   ~ArrayBufferCollector() { FreeAllocations(); }
     27 
     28   // These allocations will begin to be freed once FreeAllocations() is called,
     29   // or on TearDown.
     30   void AddGarbageAllocations(
     31       std::vector<JSArrayBuffer::Allocation> allocations);
     32 
     33   // Calls FreeAllocations() on a background thread.
     34   void FreeAllocationsOnBackgroundThread();
     35 
     36  private:
     37   class FreeingTask;
     38 
     39   // Begin freeing the allocations added through AddGarbageAllocations. Also
     40   // called by TearDown.
     41   void FreeAllocations();
     42 
     43   Heap* heap_;
     44   base::Mutex allocations_mutex_;
     45   std::vector<std::vector<JSArrayBuffer::Allocation>> allocations_;
     46 };
     47 
     48 }  // namespace internal
     49 }  // namespace v8
     50 
     51 #endif  // V8_HEAP_ARRAY_BUFFER_COLLECTOR_H_
     52