| Index: src/mark-compact.h
|
| ===================================================================
|
| --- src/mark-compact.h (revision 3427)
|
| +++ src/mark-compact.h (working copy)
|
| @@ -43,8 +43,83 @@
|
| // Forward declarations.
|
| class RootMarkingVisitor;
|
| class MarkingVisitor;
|
| +class MarkCompactCollectorPrivateData;
|
|
|
| +class MarkCompactCollectorData {
|
| + public:
|
| + MarkCompactCollectorPrivateData& private_data_;
|
| + private:
|
| + #ifdef DEBUG
|
| + enum CollectorState {
|
| + IDLE,
|
| + PREPARE_GC,
|
| + MARK_LIVE_OBJECTS,
|
| + SWEEP_SPACES,
|
| + ENCODE_FORWARDING_ADDRESSES,
|
| + UPDATE_POINTERS,
|
| + RELOCATE_OBJECTS,
|
| + REBUILD_RSETS
|
| + };
|
|
|
| + // The current stage of the collector.
|
| + CollectorState state_;
|
| +
|
| + // -----------------------------------------------------------------------
|
| + // Counters used for debugging the marking phase of mark-compact or
|
| + // mark-sweep collection.
|
| +
|
| + // Number of live objects in Heap::to_space_.
|
| + int live_young_objects_;
|
| +
|
| + // Number of live objects in Heap::old_pointer_space_.
|
| + int live_old_pointer_objects_;
|
| +
|
| + // Number of live objects in Heap::old_data_space_.
|
| + int live_old_data_objects_;
|
| +
|
| + // Number of live objects in Heap::code_space_.
|
| + int live_code_objects_;
|
| +
|
| + // Number of live objects in Heap::map_space_.
|
| + int live_map_objects_;
|
| +
|
| + // Number of live objects in Heap::cell_space_.
|
| + int live_cell_objects_;
|
| +
|
| + // Number of live objects in Heap::lo_space_.
|
| + int live_lo_objects_;
|
| +
|
| + // Number of live bytes in this collection.
|
| + int live_bytes_;
|
| +
|
| +#endif
|
| +
|
| + // Global flag that forces a compaction.
|
| + bool force_compaction_;
|
| +
|
| + // Global flag indicating whether spaces were compacted on the last GC.
|
| + bool compacting_collection_;
|
| +
|
| + // Global flag indicating whether spaces will be compacted on the next GC.
|
| + bool compact_on_next_gc_;
|
| +
|
| + // The number of objects left marked at the end of the last completed full
|
| + // GC (expected to be zero).
|
| + int previous_marked_count_;
|
| +
|
| + // A pointer to the current stack-allocated GC tracer object during a full
|
| + // collection (NULL before and after).
|
| + GCTracer* tracer_;
|
| +
|
| + friend class MarkCompactCollector;
|
| + friend class V8Context;
|
| +
|
| + MarkCompactCollectorData();
|
| + ~MarkCompactCollectorData();
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(MarkCompactCollectorData);
|
| +};
|
| +
|
| // -------------------------------------------------------------------------
|
| // Mark-Compact collector
|
| //
|
| @@ -78,7 +153,7 @@
|
| // Set the global force_compaction flag, it must be called before Prepare
|
| // to take effect.
|
| static void SetForceCompaction(bool value) {
|
| - force_compaction_ = value;
|
| + v8_context()->mark_compact_collector_data_.force_compaction_ = value;
|
| }
|
|
|
| // Prepares for GC by resetting relocation info in old and map spaces and
|
| @@ -89,58 +164,37 @@
|
| static void CollectGarbage();
|
|
|
| // True if the last full GC performed heap compaction.
|
| - static bool HasCompacted() { return compacting_collection_; }
|
| + static bool HasCompacted() {
|
| + return v8_context()->mark_compact_collector_data_.compacting_collection_;
|
| + }
|
|
|
| // True after the Prepare phase if the compaction is taking place.
|
| - static bool IsCompacting() { return compacting_collection_; }
|
| + static bool IsCompacting() {
|
| + return v8_context()->mark_compact_collector_data_.compacting_collection_;
|
| + }
|
|
|
| // The count of the number of objects left marked at the end of the last
|
| // completed full GC (expected to be zero).
|
| - static int previous_marked_count() { return previous_marked_count_; }
|
| + static int previous_marked_count() {
|
| + return v8_context()->mark_compact_collector_data_.previous_marked_count_;
|
| + }
|
|
|
| // During a full GC, there is a stack-allocated GCTracer that is used for
|
| // bookkeeping information. Return a pointer to that tracer.
|
| - static GCTracer* tracer() { return tracer_; }
|
| + static GCTracer* tracer() {
|
| + return v8_context()->mark_compact_collector_data_.tracer_;
|
| + }
|
|
|
| #ifdef DEBUG
|
| // Checks whether performing mark-compact collection.
|
| - static bool in_use() { return state_ > PREPARE_GC; }
|
| + static bool in_use() {
|
| + return v8_context()->mark_compact_collector_data_.state_ >
|
| + MarkCompactCollectorData::PREPARE_GC;
|
| + }
|
| #endif
|
|
|
| private:
|
| -#ifdef DEBUG
|
| - enum CollectorState {
|
| - IDLE,
|
| - PREPARE_GC,
|
| - MARK_LIVE_OBJECTS,
|
| - SWEEP_SPACES,
|
| - ENCODE_FORWARDING_ADDRESSES,
|
| - UPDATE_POINTERS,
|
| - RELOCATE_OBJECTS,
|
| - REBUILD_RSETS
|
| - };
|
|
|
| - // The current stage of the collector.
|
| - static CollectorState state_;
|
| -#endif
|
| -
|
| - // Global flag that forces a compaction.
|
| - static bool force_compaction_;
|
| -
|
| - // Global flag indicating whether spaces were compacted on the last GC.
|
| - static bool compacting_collection_;
|
| -
|
| - // Global flag indicating whether spaces will be compacted on the next GC.
|
| - static bool compact_on_next_gc_;
|
| -
|
| - // The number of objects left marked at the end of the last completed full
|
| - // GC (expected to be zero).
|
| - static int previous_marked_count_;
|
| -
|
| - // A pointer to the current stack-allocated GC tracer object during a full
|
| - // collection (NULL before and after).
|
| - static GCTracer* tracer_;
|
| -
|
| // Finishes GC, performs heap verification if enabled.
|
| static void Finish();
|
|
|
| @@ -167,7 +221,8 @@
|
| }
|
|
|
| static inline void SetMark(HeapObject* obj) {
|
| - tracer_->increment_marked_count();
|
| + v8_context()->mark_compact_collector_data_.
|
| + tracer_->increment_marked_count();
|
| #ifdef DEBUG
|
| UpdateLiveObjectCount(obj);
|
| #endif
|
| @@ -392,34 +447,7 @@
|
|
|
| #ifdef DEBUG
|
| // -----------------------------------------------------------------------
|
| - // Debugging variables, functions and classes
|
| - // Counters used for debugging the marking phase of mark-compact or
|
| - // mark-sweep collection.
|
| -
|
| - // Number of live objects in Heap::to_space_.
|
| - static int live_young_objects_;
|
| -
|
| - // Number of live objects in Heap::old_pointer_space_.
|
| - static int live_old_pointer_objects_;
|
| -
|
| - // Number of live objects in Heap::old_data_space_.
|
| - static int live_old_data_objects_;
|
| -
|
| - // Number of live objects in Heap::code_space_.
|
| - static int live_code_objects_;
|
| -
|
| - // Number of live objects in Heap::map_space_.
|
| - static int live_map_objects_;
|
| -
|
| - // Number of live objects in Heap::cell_space_.
|
| - static int live_cell_objects_;
|
| -
|
| - // Number of live objects in Heap::lo_space_.
|
| - static int live_lo_objects_;
|
| -
|
| - // Number of live bytes in this collection.
|
| - static int live_bytes_;
|
| -
|
| + // Debugging functions and classes
|
| friend class MarkObjectVisitor;
|
| static void VisitObject(HeapObject* obj);
|
|
|
|
|