// 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 <vector>
|
|
#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() { FreeAllocations(); }
|
|
// These allocations will begin to be freed once FreeAllocations() is called,
|
// or on TearDown.
|
void AddGarbageAllocations(
|
std::vector<JSArrayBuffer::Allocation> allocations);
|
|
// Calls FreeAllocations() on a background thread.
|
void FreeAllocationsOnBackgroundThread();
|
|
private:
|
class FreeingTask;
|
|
// Begin freeing the allocations added through AddGarbageAllocations. Also
|
// called by TearDown.
|
void FreeAllocations();
|
|
Heap* heap_;
|
base::Mutex allocations_mutex_;
|
std::vector<std::vector<JSArrayBuffer::Allocation>> allocations_;
|
};
|
|
} // namespace internal
|
} // namespace v8
|
|
#endif // V8_HEAP_ARRAY_BUFFER_COLLECTOR_H_
|