| Index: src/heap/gc-tracer.cc
|
| diff --git a/src/heap/gc-tracer.cc b/src/heap/gc-tracer.cc
|
| index 98be41d3693be9e79c2faf20e077f7d13093668f..5ac5fe1c6c6c3760dbda85b0ca7b73eb943741fc 100644
|
| --- a/src/heap/gc-tracer.cc
|
| +++ b/src/heap/gc-tracer.cc
|
| @@ -57,7 +57,7 @@ const char* GCTracer::Scope::Name(ScopeId id) {
|
| return "(unknown)";
|
| }
|
|
|
| -GCTracer::Event::Event(Type type, const char* gc_reason,
|
| +GCTracer::Event::Event(Type type, GarbageCollectionReason gc_reason,
|
| const char* collector_reason)
|
| : type(type),
|
| gc_reason(gc_reason),
|
| @@ -110,7 +110,7 @@ const char* GCTracer::Event::TypeName(bool short_name) const {
|
|
|
| GCTracer::GCTracer(Heap* heap)
|
| : heap_(heap),
|
| - current_(Event::START, nullptr, nullptr),
|
| + current_(Event::START, GarbageCollectionReason::kUnknown, nullptr),
|
| previous_(current_),
|
| previous_incremental_mark_compactor_event_(current_),
|
| cumulative_incremental_marking_bytes_(0),
|
| @@ -130,7 +130,7 @@ GCTracer::GCTracer(Heap* heap)
|
| }
|
|
|
| void GCTracer::ResetForTesting() {
|
| - current_ = Event(Event::START, NULL, NULL);
|
| + current_ = Event(Event::START, GarbageCollectionReason::kTesting, nullptr);
|
| current_.end_time = heap_->MonotonicallyIncreasingTimeInMs();
|
| previous_ = previous_incremental_mark_compactor_event_ = current_;
|
| cumulative_incremental_marking_bytes_ = 0.0;
|
| @@ -162,7 +162,8 @@ void GCTracer::ResetForTesting() {
|
| start_counter_ = 0;
|
| }
|
|
|
| -void GCTracer::Start(GarbageCollector collector, const char* gc_reason,
|
| +void GCTracer::Start(GarbageCollector collector,
|
| + GarbageCollectionReason gc_reason,
|
| const char* collector_reason) {
|
| start_counter_++;
|
| if (start_counter_ != 1) return;
|
| @@ -411,6 +412,57 @@ void GCTracer::Output(const char* format, ...) const {
|
| heap_->AddToRingBuffer(buffer.start());
|
| }
|
|
|
| +const char* GCTracer::GarbageCollectionReasonToString(
|
| + GarbageCollectionReason gc_reason) {
|
| + switch (gc_reason) {
|
| + case GarbageCollectionReason::kAllocationFailure:
|
| + return "allocation failure";
|
| + case GarbageCollectionReason::kAllocationLimit:
|
| + return "allocation limit";
|
| + case GarbageCollectionReason::kContextDisposal:
|
| + return "context disposal";
|
| + case GarbageCollectionReason::kCountersExtension:
|
| + return "counters extension";
|
| + case GarbageCollectionReason::kDebugger:
|
| + return "debugger";
|
| + case GarbageCollectionReason::kDeserializer:
|
| + return "deserialize";
|
| + case GarbageCollectionReason::kExternalMemoryPressure:
|
| + return "external memory pressure";
|
| + case GarbageCollectionReason::kFinalizeMarkingViaStackGuard:
|
| + return "finalize incremental marking via stack guard";
|
| + case GarbageCollectionReason::kFinalizeMarkingViaTask:
|
| + return "finalize incremental marking via task";
|
| + case GarbageCollectionReason::kFullHashtable:
|
| + return "full hash-table";
|
| + case GarbageCollectionReason::kHeapProfiler:
|
| + return "heap profiler";
|
| + case GarbageCollectionReason::kIdleTask:
|
| + return "idle task";
|
| + case GarbageCollectionReason::kLastResort:
|
| + return "last resort";
|
| + case GarbageCollectionReason::kLowMemoryNotification:
|
| + return "low memory notification";
|
| + case GarbageCollectionReason::kMakeHeapIterable:
|
| + return "make heap iterable";
|
| + case GarbageCollectionReason::kMemoryPressure:
|
| + return "memory pressure";
|
| + case GarbageCollectionReason::kMemoryReducer:
|
| + return "memory reducer";
|
| + case GarbageCollectionReason::kRuntime:
|
| + return "runtime";
|
| + case GarbageCollectionReason::kSamplingProfiler:
|
| + return "sampling profiler";
|
| + case GarbageCollectionReason::kSnapshotCreator:
|
| + return "snapshot creator";
|
| + case GarbageCollectionReason::kTesting:
|
| + return "testing";
|
| + case GarbageCollectionReason::kUnknown:
|
| + return "unknown";
|
| + }
|
| + UNREACHABLE();
|
| + return "";
|
| +}
|
|
|
| void GCTracer::Print() const {
|
| double duration = current_.end_time - current_.start_time;
|
| @@ -443,7 +495,7 @@ void GCTracer::Print() const {
|
| static_cast<double>(current_.end_object_size) / MB,
|
| static_cast<double>(current_.end_memory_size) / MB, duration,
|
| TotalExternalTime(), incremental_buffer,
|
| - current_.gc_reason != nullptr ? current_.gc_reason : "",
|
| + GarbageCollectionReasonToString(current_.gc_reason),
|
| current_.collector_reason != nullptr ? current_.collector_reason : "");
|
| }
|
|
|
|
|