5#ifndef V8_HEAP_SAFEPOINT_H_
6#define V8_HEAP_SAFEPOINT_H_
23class PerClientSafepointData;
36 template <
typename Callback>
40 current = current->
next_) {
53 pthread_override_t qos_override;
119 template <
typename Callback>
130 local_heap->
prev_ =
nullptr;
135 template <
typename Callback>
144 if (local_heap->
prev_)
189 template <
typename Callback>
194 DCHECK(!current->is_shared_space_isolate());
199 template <
typename Callback>
V8_INLINE void AssertHeld() const
Isolate *const shared_space_isolate_
Isolate *const initiator_
void IterateClientIsolates(Callback callback)
void IterateSharedSpaceAndClientIsolates(Callback callback)
void RemoveClient(Isolate *client)
GlobalSafepoint(Isolate *isolate)
int active_safepoint_scopes_
base::RecursiveMutex clients_mutex_
void AssertNoClientsOnTearDown()
void AppendClient(Isolate *client)
V8_EXPORT_PRIVATE bool IsRequestedForTesting()
void LeaveGlobalSafepointScope(Isolate *initiator)
void EnterGlobalSafepointScope(Isolate *initiator)
Isolate *const shared_space_isolate_
IsolateSafepoint * safepoint_
void WaitUntilRunningThreadsInSafepoint(const IsolateSafepoint::RunningLocalHeaps &running_threads)
base::ConditionVariable cv_stopped_
base::ConditionVariable cv_resume_
Isolate * shared_space_isolate() const
IsolateSafepoint(Heap *heap)
IncludeMainThread ShouldIncludeMainThread(Isolate *initiator)
V8_EXPORT_PRIVATE void AssertMainThreadIsOnlyThread()
void ClearSafepointRequestedFlags(IncludeMainThread include_main_thread)
void InitiateGlobalSafepointScope(Isolate *initiator, PerClientSafepointData *client_data)
void IterateLocalHeaps(Callback callback)
LocalHeap * local_heaps_head_
void TryInitiateGlobalSafepointScope(Isolate *initiator, PerClientSafepointData *client_data)
void AddLocalHeap(LocalHeap *local_heap, Callback callback)
base::RecursiveMutex local_heaps_mutex_
int active_safepoint_scopes_
void LeaveGlobalSafepointScope(Isolate *initiator)
void InitiateGlobalSafepointScopeRaw(Isolate *initiator, PerClientSafepointData *client_data)
Isolate * isolate() const
void EnterLocalSafepointScope()
void WaitUntilRunningThreadsInSafepoint(const PerClientSafepointData *client_data)
void Iterate(RootVisitor *visitor)
void RemoveLocalHeap(LocalHeap *local_heap, Callback callback)
void LeaveLocalSafepointScope()
void SetSafepointRequestedFlags(IncludeMainThread include_main_thread, IsolateSafepoint::RunningLocalHeaps &running_local_heaps)
void LockMutex(LocalHeap *local_heap)
Isolate * global_safepoint_next_client_isolate_
std::optional< IsolateSafepointScope > isolate_safepoint_
std::optional< GlobalSafepointScope > global_safepoint_
static constexpr GlobalSafepointForSharedSpaceIsolateTag kGlobalSafepointForSharedSpaceIsolate
#define DCHECK(condition)
#define V8_EXPORT_PRIVATE