summaryrefslogtreecommitdiff
path: root/deps/v8/src/heap/array-buffer-sweeper.h
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/heap/array-buffer-sweeper.h')
-rw-r--r--deps/v8/src/heap/array-buffer-sweeper.h18
1 files changed, 14 insertions, 4 deletions
diff --git a/deps/v8/src/heap/array-buffer-sweeper.h b/deps/v8/src/heap/array-buffer-sweeper.h
index 14360dd67f..b49e54b994 100644
--- a/deps/v8/src/heap/array-buffer-sweeper.h
+++ b/deps/v8/src/heap/array-buffer-sweeper.h
@@ -9,6 +9,7 @@
#include "src/base/logging.h"
#include "src/base/platform/mutex.h"
+#include "src/heap/sweeper.h"
#include "src/objects/js-array-buffer.h"
#include "src/tasks/cancelable-task.h"
@@ -46,11 +47,13 @@ struct ArrayBufferList final {
class ArrayBufferSweeper final {
public:
enum class SweepingType { kYoung, kFull };
+ enum class TreatAllYoungAsPromoted { kNo, kYes };
explicit ArrayBufferSweeper(Heap* heap);
~ArrayBufferSweeper();
- void RequestSweep(SweepingType sweeping_type);
+ void RequestSweep(SweepingType sweeping_type,
+ TreatAllYoungAsPromoted treat_young_as_promoted);
void EnsureFinished();
// Track the given ArrayBufferExtension for the given JSArrayBuffer.
@@ -67,13 +70,16 @@ class ArrayBufferSweeper final {
// Bytes accounted in the old generation. Rebuilt during sweeping.
size_t OldBytes() const { return old().ApproximateBytes(); }
+ bool sweeping_in_progress() const {
+ DCHECK_IMPLIES(!job_, local_sweeper_.IsEmpty());
+ return job_.get();
+ }
+
private:
struct SweepingJob;
enum class SweepingState { kInProgress, kDone };
- bool sweeping_in_progress() const { return job_.get(); }
-
// Finishes sweeping if it is already done.
void FinishIfDone();
@@ -82,17 +88,21 @@ class ArrayBufferSweeper final {
void IncrementExternalMemoryCounters(size_t bytes);
void DecrementExternalMemoryCounters(size_t bytes);
- void Prepare(SweepingType type);
+ void Prepare(SweepingType type,
+ TreatAllYoungAsPromoted treat_all_young_as_promoted);
void Finalize();
void ReleaseAll(ArrayBufferList* extension);
+ void DoSweep();
+
Heap* const heap_;
std::unique_ptr<SweepingJob> job_;
base::Mutex sweeping_mutex_;
base::ConditionVariable job_finished_;
ArrayBufferList young_;
ArrayBufferList old_;
+ Sweeper::LocalSweeper local_sweeper_;
};
} // namespace internal