| Index: src/heap/scavenger.h
|
| diff --git a/src/heap/scavenger.h b/src/heap/scavenger.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..44da98c86c73462e4dd579bd925eb4f984733698
|
| --- /dev/null
|
| +++ b/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_
|
|
|