1// Copyright 2020 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_CPPGC_JS_UNIFIED_HEAP_MARKING_STATE_H_ 6#define V8_HEAP_CPPGC_JS_UNIFIED_HEAP_MARKING_STATE_H_ 7 8#include "include/v8-cppgc.h" 9#include "src/heap/mark-compact.h" 10#include "src/heap/marking-worklist.h" 11 12namespace v8 { 13namespace internal { 14 15// `UnifiedHeapMarkingState` is used to handle `TracedReferenceBase` and 16// friends. It is used when `CppHeap` is attached but also detached. In detached 17// mode, the expectation is that no non-null `TracedReferenceBase` is found. 18class UnifiedHeapMarkingState final { 19 public: 20 UnifiedHeapMarkingState(Heap*, MarkingWorklists::Local*); 21 22 UnifiedHeapMarkingState(const UnifiedHeapMarkingState&) = delete; 23 UnifiedHeapMarkingState& operator=(const UnifiedHeapMarkingState&) = delete; 24 25 void Update(MarkingWorklists::Local*); 26 27 V8_INLINE void MarkAndPush(const TracedReferenceBase&); 28 29 private: 30 Heap* const heap_; 31 MarkCompactCollector::MarkingState* const marking_state_; 32 MarkingWorklists::Local* local_marking_worklist_ = nullptr; 33 const bool track_retaining_path_; 34}; 35 36} // namespace internal 37} // namespace v8 38 39#endif // V8_HEAP_CPPGC_JS_UNIFIED_HEAP_MARKING_STATE_H_ 40