%PDF- %PDF-
Direktori : /home/vacivi36/vittasync.vacivitta.com.br/vittasync/node/deps/v8/src/heap/ |
Current File : /home/vacivi36/vittasync.vacivitta.com.br/vittasync/node/deps/v8/src/heap/mark-sweep-utilities.h |
// Copyright 2023 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_MARK_SWEEP_UTILITIES_H_ #define V8_HEAP_MARK_SWEEP_UTILITIES_H_ #include <memory> #include <vector> #include "src/common/globals.h" #include "src/heap/heap.h" #include "src/heap/marking-state.h" #include "src/heap/marking-worklist.h" #include "src/heap/spaces.h" #include "src/objects/string-forwarding-table.h" #include "src/objects/visitors.h" namespace v8 { namespace internal { #ifdef VERIFY_HEAP class MarkingVerifierBase : public ObjectVisitorWithCageBases, public RootVisitor { public: virtual void Run() = 0; protected: explicit MarkingVerifierBase(Heap* heap); virtual const MarkingBitmap* bitmap(const MemoryChunk* chunk) = 0; virtual void VerifyMap(Tagged<Map> map) = 0; virtual void VerifyPointers(ObjectSlot start, ObjectSlot end) = 0; virtual void VerifyPointers(MaybeObjectSlot start, MaybeObjectSlot end) = 0; virtual void VerifyCodePointer(InstructionStreamSlot slot) = 0; virtual void VerifyRootPointers(FullObjectSlot start, FullObjectSlot end) = 0; virtual bool IsMarked(Tagged<HeapObject> object) = 0; void VisitPointers(Tagged<HeapObject> host, ObjectSlot start, ObjectSlot end) override { VerifyPointers(start, end); } void VisitPointers(Tagged<HeapObject> host, MaybeObjectSlot start, MaybeObjectSlot end) override { VerifyPointers(start, end); } void VisitInstructionStreamPointer(Tagged<Code> host, InstructionStreamSlot slot) override { VerifyCodePointer(slot); } void VisitRootPointers(Root root, const char* description, FullObjectSlot start, FullObjectSlot end) override { VerifyRootPointers(start, end); } void VisitMapPointer(Tagged<HeapObject> object) override; void VerifyRoots(); void VerifyMarkingOnPage(const Page* page, Address start, Address end); void VerifyMarking(NewSpace* new_space); void VerifyMarking(PagedSpaceBase* paged_space); void VerifyMarking(LargeObjectSpace* lo_space); Heap* heap_; }; #endif // VERIFY_HEAP enum class ExternalStringTableCleaningMode { kAll, kYoungOnly }; template <ExternalStringTableCleaningMode mode> class ExternalStringTableCleanerVisitor final : public RootVisitor { public: explicit ExternalStringTableCleanerVisitor(Heap* heap) : heap_(heap) {} void VisitRootPointers(Root root, const char* description, FullObjectSlot start, FullObjectSlot end) final; private: Heap* heap_; }; class StringForwardingTableCleanerBase { protected: explicit StringForwardingTableCleanerBase(Heap* heap); // Dispose external resource, if it wasn't disposed already. // We can have multiple entries of the same external resource in the string // forwarding table (i.e. concurrent externalization of a string with the // same resource), therefore we keep track of already disposed resources to // not dispose a resource more than once. void DisposeExternalResource(StringForwardingTable::Record* record); Isolate* const isolate_; NonAtomicMarkingState* const marking_state_; std::unordered_set<Address> disposed_resources_; }; bool IsCppHeapMarkingFinished(Heap* heap, MarkingWorklists::Local* local_marking_worklists); #if DEBUG void VerifyRememberedSetsAfterEvacuation(Heap* heap, GarbageCollector garbage_collector); #endif // DEBUG template class ExternalStringTableCleanerVisitor< ExternalStringTableCleaningMode::kAll>; template class ExternalStringTableCleanerVisitor< ExternalStringTableCleaningMode::kYoungOnly>; } // namespace internal } // namespace v8 #endif // V8_HEAP_MARK_SWEEP_UTILITIES_H_