| Index: src/heap/heap.h
|
| diff --git a/src/heap/heap.h b/src/heap/heap.h
|
| index ef341ae961f76d1dbaba147cc84a92207edd6804..9279307ffe4692208c77d45d3997250198bf91a2 100644
|
| --- a/src/heap/heap.h
|
| +++ b/src/heap/heap.h
|
| @@ -348,6 +348,31 @@ enum class ClearRecordedSlots { kYes, kNo };
|
|
|
| enum class ClearBlackArea { kYes, kNo };
|
|
|
| +enum class GarbageCollectionReason {
|
| + kUnknown,
|
| + kAllocationFailure,
|
| + kAllocationLimit,
|
| + kContextDisposal,
|
| + kCountersExtension,
|
| + kDebugger,
|
| + kDeserializer,
|
| + kExternalMemoryPressure,
|
| + kFinalizeMarkingViaStackGuard,
|
| + kFinalizeMarkingViaTask,
|
| + kFullHashtable,
|
| + kHeapProfiler,
|
| + kIdleTask,
|
| + kLastResort,
|
| + kLowMemoryNotification,
|
| + kMakeHeapIterable,
|
| + kMemoryPressure,
|
| + kMemoryReducer,
|
| + kRuntime,
|
| + kSamplingProfiler,
|
| + kSnapshotCreator,
|
| + kTesting
|
| +};
|
| +
|
| // A queue of objects promoted during scavenge. Each object is accompanied by
|
| // its size to avoid dereferencing a map pointer for scanning. The last page in
|
| // to-space is used for the promotion queue. On conflict during scavenge, the
|
| @@ -1079,22 +1104,22 @@ class Heap {
|
| // Returns whether there is a chance that another major GC could
|
| // collect more garbage.
|
| inline bool CollectGarbage(
|
| - AllocationSpace space, const char* gc_reason = NULL,
|
| + AllocationSpace space, GarbageCollectionReason gc_reason,
|
| const GCCallbackFlags gc_callback_flags = kNoGCCallbackFlags);
|
|
|
| // Performs a full garbage collection. If (flags & kMakeHeapIterableMask) is
|
| // non-zero, then the slower precise sweeper is used, which leaves the heap
|
| // in a state where we can iterate over the heap visiting all objects.
|
| void CollectAllGarbage(
|
| - int flags = kFinalizeIncrementalMarkingMask, const char* gc_reason = NULL,
|
| + int flags, GarbageCollectionReason gc_reason,
|
| const GCCallbackFlags gc_callback_flags = kNoGCCallbackFlags);
|
|
|
| // Last hope GC, should try to squeeze as much as possible.
|
| - void CollectAllAvailableGarbage(const char* gc_reason = NULL);
|
| + void CollectAllAvailableGarbage(GarbageCollectionReason gc_reason);
|
|
|
| // Reports and external memory pressure event, either performs a major GC or
|
| // completes incremental marking in order to free external resources.
|
| - void ReportExternalMemoryPressure(const char* gc_reason = NULL);
|
| + void ReportExternalMemoryPressure();
|
|
|
| // Invoked when GC was requested via the stack guard.
|
| void HandleGCRequest();
|
| @@ -1145,23 +1170,22 @@ class Heap {
|
|
|
| // Start incremental marking and ensure that idle time handler can perform
|
| // incremental steps.
|
| - void StartIdleIncrementalMarking();
|
| + void StartIdleIncrementalMarking(GarbageCollectionReason gc_reason);
|
|
|
| // Starts incremental marking assuming incremental marking is currently
|
| // stopped.
|
| - void StartIncrementalMarking(int gc_flags = kNoGCFlags,
|
| - const GCCallbackFlags gc_callback_flags =
|
| - GCCallbackFlags::kNoGCCallbackFlags,
|
| - const char* reason = nullptr);
|
| + void StartIncrementalMarking(
|
| + int gc_flags, GarbageCollectionReason gc_reason,
|
| + GCCallbackFlags gc_callback_flags = GCCallbackFlags::kNoGCCallbackFlags);
|
|
|
| - void StartIncrementalMarkingIfNeeded(int gc_flags = kNoGCFlags,
|
| - const GCCallbackFlags gc_callback_flags =
|
| - GCCallbackFlags::kNoGCCallbackFlags,
|
| - const char* reason = nullptr);
|
| + void StartIncrementalMarkingIfAllocationLimitIsReached(
|
| + int gc_flags,
|
| + GCCallbackFlags gc_callback_flags = GCCallbackFlags::kNoGCCallbackFlags);
|
|
|
| - void FinalizeIncrementalMarkingIfComplete(const char* comment);
|
| + void FinalizeIncrementalMarkingIfComplete(GarbageCollectionReason gc_reason);
|
|
|
| - bool TryFinalizeIdleIncrementalMarking(double idle_time_in_ms);
|
| + bool TryFinalizeIdleIncrementalMarking(double idle_time_in_ms,
|
| + GarbageCollectionReason gc_reason);
|
|
|
| void RegisterReservationsForBlackAllocation(Reservation* reservations);
|
|
|
| @@ -1458,6 +1482,9 @@ class Heap {
|
| void ReportCodeStatistics(const char* title);
|
| #endif
|
|
|
| + static const char* GarbageCollectionReasonToString(
|
| + GarbageCollectionReason gc_reason);
|
| +
|
| private:
|
| class PretenuringScope;
|
|
|
| @@ -1613,7 +1640,7 @@ class Heap {
|
| // Returns whether there is a chance that another major GC could
|
| // collect more garbage.
|
| bool CollectGarbage(
|
| - GarbageCollector collector, const char* gc_reason,
|
| + GarbageCollector collector, GarbageCollectionReason gc_reason,
|
| const char* collector_reason,
|
| const GCCallbackFlags gc_callback_flags = kNoGCCallbackFlags);
|
|
|
| @@ -1688,10 +1715,6 @@ class Heap {
|
|
|
| void ReduceNewSpaceSize();
|
|
|
| - bool TryFinalizeIdleIncrementalMarking(
|
| - double idle_time_in_ms, size_t size_of_objects,
|
| - size_t mark_compact_speed_in_bytes_per_ms);
|
| -
|
| GCIdleTimeHeapState ComputeHeapState();
|
|
|
| bool PerformIdleTimeAction(GCIdleTimeAction action,
|
| @@ -1711,13 +1734,13 @@ class Heap {
|
|
|
| void CompactRetainedMaps(ArrayList* retained_maps);
|
|
|
| - void CollectGarbageOnMemoryPressure(const char* source);
|
| + void CollectGarbageOnMemoryPressure();
|
|
|
| // Attempt to over-approximate the weak closure by marking object groups and
|
| // implicit references from global handles, but don't atomically complete
|
| // marking. If we continue to mark incrementally, we might have marked
|
| // objects that die later.
|
| - void FinalizeIncrementalMarking(const char* gc_reason);
|
| + void FinalizeIncrementalMarking(GarbageCollectionReason gc_reason);
|
|
|
| // Returns the timer used for a given GC type.
|
| // - GCScavenger: young generation GC
|
|
|