Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
marker.h
Go to the documentation of this file.
1// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
2// for details. All rights reserved. Use of this source code is governed by a
3// BSD-style license that can be found in the LICENSE file.
4
5#ifndef RUNTIME_VM_HEAP_MARKER_H_
6#define RUNTIME_VM_HEAP_MARKER_H_
7
8#include "vm/allocation.h"
9#include "vm/heap/gc_shared.h"
11#include "vm/os_thread.h" // Mutex.
12
13namespace dart {
14
15// Forward declarations.
16class HandleVisitor;
17class Heap;
18class IsolateGroup;
19class ObjectPointerVisitor;
20class PageSpace;
21template <bool sync>
22class MarkingVisitorBase;
23class Page;
24class Thread;
25
26// The class GCMarker is used to mark reachable old generation objects as part
27// of the mark-sweep collection. The marking bit used is defined in
28// UntaggedObject. Instances have a lifetime that spans from the beginning of
29// concurrent marking (or stop-the-world marking) until marking is complete. In
30// particular, an instance may be created and destroyed on different threads if
31// the isolate is exited during concurrent marking.
32class GCMarker {
33 public:
34 GCMarker(IsolateGroup* isolate_group, Heap* heap);
35 ~GCMarker();
36
37 // Mark roots synchronously, then spawn tasks to concurrently drain the
38 // marking queue. Only called when no marking or sweeping is in progress.
39 // Marking must later be finalized by calling MarkObjects.
40 void StartConcurrentMark(PageSpace* page_space);
41
42 // Contribute to marking.
44 void IncrementalMarkWithSizeBudget(PageSpace* page_space, intptr_t size);
45 void IncrementalMarkWithTimeBudget(PageSpace* page_space, int64_t deadline);
46
47 // (Re)mark roots, drain the marking queue and finalize weak references.
48 // Does not required StartConcurrentMark to have been previously called.
49 void MarkObjects(PageSpace* page_space);
50
51 intptr_t marked_words() const { return marked_bytes_ >> kWordSizeLog2; }
52 intptr_t MarkedWordsPerMicro() const;
53
54 void PruneWeak(Scavenger* scavenger);
55
56 private:
57 void Prologue();
58 void Epilogue();
59 void ResetSlices();
60 void IterateRoots(ObjectPointerVisitor* visitor);
61 void IterateWeakRoots(Thread* thread);
62 void ProcessWeakHandles(Thread* thread);
63 void ProcessWeakTables(Thread* thread);
64 void ProcessRememberedSet(Thread* thread);
65 void ProcessObjectIdTable(Thread* thread);
66
67 // Called by anyone: finalize and accumulate stats from 'visitor'.
68 template <class MarkingVisitorType>
69 void FinalizeResultsFrom(MarkingVisitorType* visitor);
70
71 IsolateGroup* const isolate_group_;
72 Heap* const heap_;
73 MarkingStack marking_stack_;
74 MarkingStack new_marking_stack_;
75 MarkingStack deferred_marking_stack_;
76 GCLinkedLists global_list_;
77 MarkingVisitorBase<true>** visitors_;
78
79 Monitor root_slices_monitor_;
80 RelaxedAtomic<intptr_t> root_slices_started_;
81 intptr_t root_slices_finished_;
82 intptr_t root_slices_count_;
83 RelaxedAtomic<intptr_t> weak_slices_started_;
84
85 uintptr_t marked_bytes_;
86 int64_t marked_micros_;
87
88 friend class ConcurrentMarkTask;
89 friend class ParallelMarkTask;
90 friend class Scavenger;
91 template <bool sync>
92 friend class MarkingVisitorBase;
94};
95
96} // namespace dart
97
98#endif // RUNTIME_VM_HEAP_MARKER_H_
void IncrementalMarkWithSizeBudget(PageSpace *page_space, intptr_t size)
Definition marker.cc:1066
intptr_t MarkedWordsPerMicro() const
Definition marker.cc:942
void IncrementalMarkWithTimeBudget(PageSpace *page_space, int64_t deadline)
Definition marker.cc:1090
void PruneWeak(Scavenger *scavenger)
Definition marker.cc:1259
void StartConcurrentMark(PageSpace *page_space)
Definition marker.cc:988
intptr_t marked_words() const
Definition marker.h:51
void MarkObjects(PageSpace *page_space)
Definition marker.cc:1157
void IncrementalMarkWithUnlimitedBudget(PageSpace *page_space)
Definition marker.cc:1048
constexpr intptr_t kWordSizeLog2
Definition globals.h:507
#define DISALLOW_IMPLICIT_CONSTRUCTORS(TypeName)
Definition globals.h:593