// Copyright 2020 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_LOCAL_HEAP_H_ #define V8_HEAP_LOCAL_HEAP_H_ #include <atomic> #include <memory> #include "src/base/logging.h" #include "src/base/macros.h" #include "src/base/platform/condition-variable.h" #include "src/base/platform/mutex.h" #include "src/common/assert-scope.h" #include "src/common/ptr-compr.h" #include "src/execution/isolate.h" #include "src/handles/global-handles.h" #include "src/handles/persistent-handles.h" #include "src/heap/base/stack.h" #include "src/heap/gc-callbacks.h" namespace v8 { namespace internal { class Heap; class LocalHandles; class MarkingBarrier; class MutablePageMetadata; class Safepoint; // LocalHeap is used by the GC to track all threads with heap access in order to // stop them before performing a collection. LocalHeaps can be either Parked or // Running and are in Parked mode when initialized. // Running: Thread is allowed to access the heap but needs to give the GC the // chance to run regularly by manually invoking Safepoint(). The // thread can be parked using ParkedScope. // Parked: Heap access is not allowed, so the GC will not stop this thread // for a collection. Useful when threads do not need heap access for // some time or for blocking operations like locking a mutex. class V8_EXPORT_PRIVATE LocalHeap { … }; } // namespace internal } // namespace v8 #endif // V8_HEAP_LOCAL_HEAP_H_