%PDF- <> %âãÏÓ endobj 2 0 obj <> endobj 3 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 28 0 R 29 0 R] /MediaBox[ 0 0 595.5 842.25] /Contents 4 0 R/Group<>/Tabs/S>> endobj ºaâÚÎΞ-ÌE1ÍØÄ÷{òò2ÿ ÛÖ^ÔÀá TÎ{¦?§®¥kuµùÕ5sLOšuY>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<> endobj 2 0 obj<>endobj 2 0 obj<>es 3 0 R>> endobj 2 0 obj<> ox[ 0.000000 0.000000 609.600000 935.600000]/Fi endobj 3 0 obj<> endobj 7 1 obj<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/Subtype/Form>> stream
// 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_CPPGC_MARKING_VERIFIER_H_ #define V8_HEAP_CPPGC_MARKING_VERIFIER_H_ #include <unordered_set> #include "src/heap/base/stack.h" #include "src/heap/cppgc/heap-object-header.h" #include "src/heap/cppgc/heap-visitor.h" #include "src/heap/cppgc/heap.h" #include "src/heap/cppgc/visitor.h" namespace cppgc { namespace internal { class VerificationState { public: void VerifyMarked(const void*) const; void SetCurrentParent(const HeapObjectHeader* header) { parent_ = header; } // No parent means parent was on stack. bool IsParentOnStack() const { return !parent_; } private: const HeapObjectHeader* parent_ = nullptr; }; class V8_EXPORT_PRIVATE MarkingVerifierBase : private HeapVisitor<MarkingVerifierBase>, public ConservativeTracingVisitor, public heap::base::StackVisitor { friend class HeapVisitor<MarkingVerifierBase>; public: ~MarkingVerifierBase() override = default; MarkingVerifierBase(const MarkingVerifierBase&) = delete; MarkingVerifierBase& operator=(const MarkingVerifierBase&) = delete; void Run(Heap::Config::StackState, uintptr_t, size_t); protected: MarkingVerifierBase(HeapBase&, VerificationState&, std::unique_ptr<cppgc::Visitor>); private: void VisitInConstructionConservatively(HeapObjectHeader&, TraceConservativelyCallback) final; void VisitPointer(const void*) final; bool VisitHeapObjectHeader(HeapObjectHeader&); VerificationState& verification_state_; std::unique_ptr<cppgc::Visitor> visitor_; std::unordered_set<const HeapObjectHeader*> in_construction_objects_heap_; std::unordered_set<const HeapObjectHeader*> in_construction_objects_stack_; std::unordered_set<const HeapObjectHeader*>* in_construction_objects_ = &in_construction_objects_heap_; size_t found_marked_bytes_ = 0; }; class V8_EXPORT_PRIVATE MarkingVerifier final : public MarkingVerifierBase { public: explicit MarkingVerifier(HeapBase&); ~MarkingVerifier() final = default; private: VerificationState state_; }; } // namespace internal } // namespace cppgc #endif // V8_HEAP_CPPGC_MARKING_VERIFIER_H_