28 #ifndef V8_INCREMENTAL_MARKING_H_
29 #define V8_INCREMENTAL_MARKING_H_
122 if (FLAG_trace_incremental_marking) {
123 PrintF(
"[IncrementalMarking] Restarting (new grey objects)\n");
171 return longest_step_;
175 return steps_count_since_last_gc_;
179 return steps_took_since_last_gc_;
200 PrintPID(
"Increasing marking speed to %d "
201 "due to high promotion rate\n",
210 no_marking_scope_depth_++;
214 no_marking_scope_depth_--;
220 unscanned_bytes_of_large_object_ = unscanned_bytes;
224 int64_t SpaceLeftInOldSpace();
226 void ResetStepCounters();
230 void ActivateIncrementalWriteBarrier(
PagedSpace* space);
231 static void ActivateIncrementalWriteBarrier(
NewSpace* space);
232 void ActivateIncrementalWriteBarrier();
234 static void DeactivateIncrementalWriteBarrierForSpace(
PagedSpace* space);
235 static void DeactivateIncrementalWriteBarrierForSpace(
NewSpace* space);
236 void DeactivateIncrementalWriteBarrier();
244 void EnsureMarkingDequeIsCommitted();
246 INLINE(
void ProcessMarkingDeque());
248 INLINE(
void ProcessMarkingDeque(intptr_t bytes_to_process));
258 bool marking_deque_memory_committed_;
263 double longest_step_;
264 int64_t old_generation_space_available_at_start_of_incremental_;
265 int64_t old_generation_space_used_at_start_of_incremental_;
266 int steps_count_since_last_gc_;
267 double steps_took_since_last_gc_;
268 int64_t bytes_rescanned_;
271 intptr_t bytes_scanned_;
273 intptr_t write_barriers_invoked_since_last_step_;
275 int no_marking_scope_depth_;
277 int unscanned_bytes_of_large_object_;
284 #endif // V8_INCREMENTAL_MARKING_H_
void PrintF(const char *format,...)
enable upcoming ES6 features enable harmony block scoping enable harmony enable harmony proxies enable harmony generators enable harmony numeric enable harmony string enable harmony math functions harmony_scoping harmony_symbols harmony_collections harmony_iteration harmony_strings harmony_scoping harmony_maths tracks arrays with only smi values Optimize object Array DOM strings and string pretenure call new trace pretenuring decisions of HAllocate instructions track fields with only smi values track fields with heap values track_fields track_fields Enables optimizations which favor memory size over execution speed use string slices optimization filter maximum number of GVN fix point iterations use function inlining use allocation folding eliminate write barriers targeting allocations in optimized code maximum source size in bytes considered for a single inlining maximum cumulative number of AST nodes considered for inlining crankshaft harvests type feedback from stub cache trace check elimination phase hydrogen tracing filter trace hydrogen to given file name trace inlining decisions trace store elimination trace all use positions trace global value numbering trace hydrogen escape analysis trace the tracking of allocation sites trace map generalization environment for every instruction deoptimize every n garbage collections put a break point before deoptimizing deoptimize uncommon cases use on stack replacement trace array bounds check elimination perform array index dehoisting use load elimination use store elimination use constant folding eliminate unreachable code number of stress runs when picking a function to watch for shared function not JSFunction itself flushes the cache of optimized code for closures on every GC functions with arguments object maximum number of escape analysis fix point iterations allow uint32 values on optimize frames if they are used only in safe operations track concurrent recompilation artificial compilation delay in ms concurrent on stack replacement do not emit check maps for constant values that have a leaf map
bool IsMarkingIncomplete()
static const intptr_t kWriteBarriersInvokedThreshold
void LeaveNoMarkingScope()
void SetNewSpacePageFlags(NewSpacePage *chunk)
#define ASSERT(condition)
static const intptr_t kMarkingSpeedAccelleration
void RecordWriteIntoCodeSlow(HeapObject *obj, RelocInfo *rinfo, Object *value)
void Step(intptr_t allocated, CompletionAction action)
void RecordCodeTargetPatch(Code *host, Address pc, HeapObject *value)
void ActivateGeneratedStub(Code *stub)
static const intptr_t kMarkingSpeedAccellerationInterval
static const intptr_t kMaxMarkingSpeed
kInstanceClassNameOffset flag
enable upcoming ES6 features enable harmony block scoping enable harmony enable harmony proxies enable harmony generators enable harmony numeric enable harmony string enable harmony math functions harmony_scoping harmony_symbols harmony_collections harmony_iteration harmony_strings harmony_scoping harmony_maths tracks arrays with only smi values Optimize object size
void MarkingComplete(CompletionAction action)
void Start(CompactionFlag flag=ALLOW_COMPACTION)
IncrementalMarking(Heap *heap)
void RecordWriteOfCodeEntrySlow(JSFunction *host, Object **slot, Code *value)
void UncommitMarkingDeque()
void RecordWrites(HeapObject *obj)
void UpdateMarkingDequeAfterScavenge()
void SetOldSpacePageFlags(MemoryChunk *chunk)
void WhiteToGreyAndPush(HeapObject *obj, MarkBit mark_bit)
int steps_count_since_last_gc()
void set_should_hurry(bool val)
void NotifyOfHighPromotionRate()
void PrintPID(const char *format,...)
static void RecordWriteFromCode(HeapObject *obj, Object **slot, Isolate *isolate)
void RecordWriteSlow(HeapObject *obj, Object **slot, Object *value)
double steps_took_since_last_gc()
MarkingDeque * marking_deque()
static const intptr_t kFastMarking
void RestartIfNotMarking()
static const intptr_t kAllocatedThreshold
void OldSpaceStep(intptr_t allocated)
void NotifyIncompleteScanOfObject(int unscanned_bytes)
static const intptr_t kInitialMarkingSpeed
void PrepareForScavenge()
void BlackToGreyAndUnshift(HeapObject *obj, MarkBit mark_bit)
void EnterNoMarkingScope()