diff options
Diffstat (limited to 'deps/v8/src/heap/scavenger.h')
-rw-r--r-- | deps/v8/src/heap/scavenger.h | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/deps/v8/src/heap/scavenger.h b/deps/v8/src/heap/scavenger.h new file mode 100644 index 0000000000..44da98c86c --- /dev/null +++ b/deps/v8/src/heap/scavenger.h @@ -0,0 +1,72 @@ +// Copyright 2015 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_SCAVENGER_H_ +#define V8_HEAP_SCAVENGER_H_ + +#include "src/heap/objects-visiting.h" + +namespace v8 { +namespace internal { + +typedef void (*ScavengingCallback)(Map* map, HeapObject** slot, + HeapObject* object); + +class Scavenger { + public: + explicit Scavenger(Heap* heap) : heap_(heap) {} + + // Initializes static visitor dispatch tables. + static void Initialize(); + + // Callback function passed to Heap::Iterate etc. Copies an object if + // necessary, the object might be promoted to an old space. The caller must + // ensure the precondition that the object is (a) a heap object and (b) in + // the heap's from space. + static inline void ScavengeObject(HeapObject** p, HeapObject* object); + + // Slow part of {ScavengeObject} above. + static void ScavengeObjectSlow(HeapObject** p, HeapObject* object); + + // Chooses an appropriate static visitor table depending on the current state + // of the heap (i.e. incremental marking, logging and profiling). + void SelectScavengingVisitorsTable(); + + Isolate* isolate(); + Heap* heap() { return heap_; } + + private: + Heap* heap_; + VisitorDispatchTable<ScavengingCallback> scavenging_visitors_table_; +}; + + +// Helper class for turning the scavenger into an object visitor that is also +// filtering out non-HeapObjects and objects which do not reside in new space. +class ScavengeVisitor : public ObjectVisitor { + public: + explicit ScavengeVisitor(Heap* heap) : heap_(heap) {} + + void VisitPointer(Object** p); + void VisitPointers(Object** start, Object** end); + + private: + inline void ScavengePointer(Object** p); + + Heap* heap_; +}; + + +// Helper class for turning the scavenger into an object visitor that is also +// filtering out non-HeapObjects and objects which do not reside in new space. +class StaticScavengeVisitor + : public StaticNewSpaceVisitor<StaticScavengeVisitor> { + public: + static inline void VisitPointer(Heap* heap, Object** p); +}; + +} // namespace internal +} // namespace v8 + +#endif // V8_HEAP_SCAVENGER_H_ |