Index: src/incremental-marking.h |
diff --git a/src/incremental-marking.h b/src/incremental-marking.h |
deleted file mode 100644 |
index e5d0f5b6e88be384fde92563ecc9641f2c0ed47e..0000000000000000000000000000000000000000 |
--- a/src/incremental-marking.h |
+++ /dev/null |
@@ -1,237 +0,0 @@ |
-// Copyright 2012 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_INCREMENTAL_MARKING_H_ |
-#define V8_INCREMENTAL_MARKING_H_ |
- |
- |
-#include "src/execution.h" |
-#include "src/mark-compact.h" |
-#include "src/objects.h" |
- |
-namespace v8 { |
-namespace internal { |
- |
- |
-class IncrementalMarking { |
- public: |
- enum State { |
- STOPPED, |
- SWEEPING, |
- MARKING, |
- COMPLETE |
- }; |
- |
- enum CompletionAction { |
- GC_VIA_STACK_GUARD, |
- NO_GC_VIA_STACK_GUARD |
- }; |
- |
- explicit IncrementalMarking(Heap* heap); |
- |
- static void Initialize(); |
- |
- void TearDown(); |
- |
- State state() { |
- DCHECK(state_ == STOPPED || FLAG_incremental_marking); |
- return state_; |
- } |
- |
- bool should_hurry() { return should_hurry_; } |
- void set_should_hurry(bool val) { should_hurry_ = val; } |
- |
- inline bool IsStopped() { return state() == STOPPED; } |
- |
- INLINE(bool IsMarking()) { return state() >= MARKING; } |
- |
- inline bool IsMarkingIncomplete() { return state() == MARKING; } |
- |
- inline bool IsComplete() { return state() == COMPLETE; } |
- |
- bool WorthActivating(); |
- |
- enum CompactionFlag { ALLOW_COMPACTION, PREVENT_COMPACTION }; |
- |
- void Start(CompactionFlag flag = ALLOW_COMPACTION); |
- |
- void Stop(); |
- |
- void PrepareForScavenge(); |
- |
- void UpdateMarkingDequeAfterScavenge(); |
- |
- void Hurry(); |
- |
- void Finalize(); |
- |
- void Abort(); |
- |
- void MarkingComplete(CompletionAction action); |
- |
- // It's hard to know how much work the incremental marker should do to make |
- // progress in the face of the mutator creating new work for it. We start |
- // of at a moderate rate of work and gradually increase the speed of the |
- // incremental marker until it completes. |
- // Do some marking every time this much memory has been allocated or that many |
- // heavy (color-checking) write barriers have been invoked. |
- static const intptr_t kAllocatedThreshold = 65536; |
- static const intptr_t kWriteBarriersInvokedThreshold = 32768; |
- // Start off by marking this many times more memory than has been allocated. |
- static const intptr_t kInitialMarkingSpeed = 1; |
- // But if we are promoting a lot of data we need to mark faster to keep up |
- // with the data that is entering the old space through promotion. |
- static const intptr_t kFastMarking = 3; |
- // After this many steps we increase the marking/allocating factor. |
- static const intptr_t kMarkingSpeedAccellerationInterval = 1024; |
- // This is how much we increase the marking/allocating factor by. |
- static const intptr_t kMarkingSpeedAccelleration = 2; |
- static const intptr_t kMaxMarkingSpeed = 1000; |
- |
- void OldSpaceStep(intptr_t allocated); |
- |
- void Step(intptr_t allocated, CompletionAction action); |
- |
- inline void RestartIfNotMarking() { |
- if (state_ == COMPLETE) { |
- state_ = MARKING; |
- if (FLAG_trace_incremental_marking) { |
- PrintF("[IncrementalMarking] Restarting (new grey objects)\n"); |
- } |
- } |
- } |
- |
- static void RecordWriteFromCode(HeapObject* obj, |
- Object** slot, |
- Isolate* isolate); |
- |
- // Record a slot for compaction. Returns false for objects that are |
- // guaranteed to be rescanned or not guaranteed to survive. |
- // |
- // No slots in white objects should be recorded, as some slots are typed and |
- // cannot be interpreted correctly if the underlying object does not survive |
- // the incremental cycle (stays white). |
- INLINE(bool BaseRecordWrite(HeapObject* obj, Object** slot, Object* value)); |
- INLINE(void RecordWrite(HeapObject* obj, Object** slot, Object* value)); |
- INLINE(void RecordWriteIntoCode(HeapObject* obj, |
- RelocInfo* rinfo, |
- Object* value)); |
- INLINE(void RecordWriteOfCodeEntry(JSFunction* host, |
- Object** slot, |
- Code* value)); |
- |
- |
- void RecordWriteSlow(HeapObject* obj, Object** slot, Object* value); |
- void RecordWriteIntoCodeSlow(HeapObject* obj, |
- RelocInfo* rinfo, |
- Object* value); |
- void RecordWriteOfCodeEntrySlow(JSFunction* host, Object** slot, Code* value); |
- void RecordCodeTargetPatch(Code* host, Address pc, HeapObject* value); |
- void RecordCodeTargetPatch(Address pc, HeapObject* value); |
- |
- inline void RecordWrites(HeapObject* obj); |
- |
- inline void BlackToGreyAndUnshift(HeapObject* obj, MarkBit mark_bit); |
- |
- inline void WhiteToGreyAndPush(HeapObject* obj, MarkBit mark_bit); |
- |
- inline void SetOldSpacePageFlags(MemoryChunk* chunk) { |
- SetOldSpacePageFlags(chunk, IsMarking(), IsCompacting()); |
- } |
- |
- inline void SetNewSpacePageFlags(NewSpacePage* chunk) { |
- SetNewSpacePageFlags(chunk, IsMarking()); |
- } |
- |
- MarkingDeque* marking_deque() { return &marking_deque_; } |
- |
- bool IsCompacting() { return IsMarking() && is_compacting_; } |
- |
- void ActivateGeneratedStub(Code* stub); |
- |
- void NotifyOfHighPromotionRate() { |
- if (IsMarking()) { |
- if (marking_speed_ < kFastMarking) { |
- if (FLAG_trace_gc) { |
- PrintPID("Increasing marking speed to %d " |
- "due to high promotion rate\n", |
- static_cast<int>(kFastMarking)); |
- } |
- marking_speed_ = kFastMarking; |
- } |
- } |
- } |
- |
- void EnterNoMarkingScope() { |
- no_marking_scope_depth_++; |
- } |
- |
- void LeaveNoMarkingScope() { |
- no_marking_scope_depth_--; |
- } |
- |
- void UncommitMarkingDeque(); |
- |
- void NotifyIncompleteScanOfObject(int unscanned_bytes) { |
- unscanned_bytes_of_large_object_ = unscanned_bytes; |
- } |
- |
- private: |
- int64_t SpaceLeftInOldSpace(); |
- |
- void ResetStepCounters(); |
- |
- void StartMarking(CompactionFlag flag); |
- |
- void ActivateIncrementalWriteBarrier(PagedSpace* space); |
- static void ActivateIncrementalWriteBarrier(NewSpace* space); |
- void ActivateIncrementalWriteBarrier(); |
- |
- static void DeactivateIncrementalWriteBarrierForSpace(PagedSpace* space); |
- static void DeactivateIncrementalWriteBarrierForSpace(NewSpace* space); |
- void DeactivateIncrementalWriteBarrier(); |
- |
- static void SetOldSpacePageFlags(MemoryChunk* chunk, |
- bool is_marking, |
- bool is_compacting); |
- |
- static void SetNewSpacePageFlags(NewSpacePage* chunk, bool is_marking); |
- |
- void EnsureMarkingDequeIsCommitted(); |
- |
- INLINE(void ProcessMarkingDeque()); |
- |
- INLINE(intptr_t ProcessMarkingDeque(intptr_t bytes_to_process)); |
- |
- INLINE(void VisitObject(Map* map, HeapObject* obj, int size)); |
- |
- Heap* heap_; |
- |
- State state_; |
- bool is_compacting_; |
- |
- base::VirtualMemory* marking_deque_memory_; |
- bool marking_deque_memory_committed_; |
- MarkingDeque marking_deque_; |
- |
- int steps_count_; |
- int64_t old_generation_space_available_at_start_of_incremental_; |
- int64_t old_generation_space_used_at_start_of_incremental_; |
- int64_t bytes_rescanned_; |
- bool should_hurry_; |
- int marking_speed_; |
- intptr_t bytes_scanned_; |
- intptr_t allocated_; |
- intptr_t write_barriers_invoked_since_last_step_; |
- |
- int no_marking_scope_depth_; |
- |
- int unscanned_bytes_of_large_object_; |
- |
- DISALLOW_IMPLICIT_CONSTRUCTORS(IncrementalMarking); |
-}; |
- |
-} } // namespace v8::internal |
- |
-#endif // V8_INCREMENTAL_MARKING_H_ |