v8
V8 is Google’s open source high-performance JavaScript and WebAssembly engine, written in C++.
Loading...
Searching...
No Matches
mark-sweep-utilities.h
Go to the documentation of this file.
1// Copyright 2023 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_MARK_SWEEP_UTILITIES_H_
6#define V8_HEAP_MARK_SWEEP_UTILITIES_H_
7
8#include <memory>
9#include <vector>
10
11#include "src/common/globals.h"
12#include "src/heap/heap.h"
15#include "src/heap/spaces.h"
18
19namespace v8 {
20namespace internal {
21
22#ifdef VERIFY_HEAP
23class MarkingVerifierBase : public ObjectVisitorWithCageBases,
24 public RootVisitor {
25 public:
26 virtual void Run() = 0;
27
28 protected:
29 explicit MarkingVerifierBase(Heap* heap);
30
31 virtual const MarkingBitmap* bitmap(const MutablePageMetadata* chunk) = 0;
32
33 virtual void VerifyMap(Tagged<Map> map) = 0;
34 virtual void VerifyPointers(ObjectSlot start, ObjectSlot end) = 0;
35 virtual void VerifyPointers(MaybeObjectSlot start, MaybeObjectSlot end) = 0;
36 virtual void VerifyCodePointer(InstructionStreamSlot slot) = 0;
37 virtual void VerifyRootPointers(FullObjectSlot start, FullObjectSlot end) = 0;
38
39 virtual bool IsMarked(Tagged<HeapObject> object) = 0;
40
41 void VisitPointers(Tagged<HeapObject> host, ObjectSlot start,
42 ObjectSlot end) override {
43 VerifyPointers(start, end);
44 }
45
46 void VisitPointers(Tagged<HeapObject> host, MaybeObjectSlot start,
47 MaybeObjectSlot end) override {
48 VerifyPointers(start, end);
49 }
50
51 void VisitInstructionStreamPointer(Tagged<Code> host,
52 InstructionStreamSlot slot) override {
53 VerifyCodePointer(slot);
54 }
55
56 void VisitRootPointers(Root root, const char* description,
57 FullObjectSlot start, FullObjectSlot end) override {
58 VerifyRootPointers(start, end);
59 }
60
61 void VisitMapPointer(Tagged<HeapObject> object) override;
62
63 void VerifyRoots();
64 void VerifyMarkingOnPage(const PageMetadata* page, Address start,
65 Address end);
66 void VerifyMarking(NewSpace* new_space);
67 void VerifyMarking(PagedSpaceBase* paged_space);
68 void VerifyMarking(LargeObjectSpace* lo_space);
69
70 Heap* heap_;
71};
72#endif // VERIFY_HEAP
73
75template <ExternalStringTableCleaningMode mode>
77 public:
79
80 void VisitRootPointers(Root root, const char* description,
82
83 private:
85};
86
88 protected:
90
91 // Dispose external resource, if it wasn't disposed already.
92 // We can have multiple entries of the same external resource in the string
93 // forwarding table (i.e. concurrent externalization of a string with the
94 // same resource), therefore we keep track of already disposed resources to
95 // not dispose a resource more than once.
97
100 std::unordered_set<Address> disposed_resources_;
101};
102
104 MarkingWorklists::Local* local_marking_worklists);
105
106#if DEBUG
107void VerifyRememberedSetsAfterEvacuation(Heap* heap,
108 GarbageCollector garbage_collector);
109#endif // DEBUG
110
115
116} // namespace internal
117} // namespace v8
118
119#endif // V8_HEAP_MARK_SWEEP_UTILITIES_H_
void VisitRootPointers(Root root, const char *description, FullObjectSlot start, FullObjectSlot end) final
void DisposeExternalResource(StringForwardingTable::Record *record)
int start
int end
DurationRecord record
bool IsCppHeapMarkingFinished(Heap *heap, MarkingWorklists::Local *local_marking_worklists)
Heap * heap_