Commit da12c7c7 authored by ulan's avatar ulan Committed by Commit bot

Add a flag to trace heap object stats on GC.

BUG=

Review URL: https://codereview.chromium.org/1094613002

Cr-Commit-Position: refs/heads/master@{#27886}
parent d8bccfe9
......@@ -626,6 +626,9 @@ DEFINE_BOOL(trace_incremental_marking, false,
"trace progress of the incremental marking")
DEFINE_BOOL(track_gc_object_stats, false,
"track object counts and memory usage")
DEFINE_BOOL(trace_gc_object_stats, false,
"trace object counts and memory usage")
DEFINE_IMPLICATION(trace_gc_object_stats, track_gc_object_stats)
DEFINE_BOOL(track_detached_contexts, true,
"track native contexts that are expected to be garbage collected")
DEFINE_BOOL(trace_detached_contexts, false,
......
......@@ -6253,12 +6253,57 @@ void Heap::ClearObjectStats(bool clear_last_time_stats) {
}
static base::LazyMutex checkpoint_object_stats_mutex = LAZY_MUTEX_INITIALIZER;
static base::LazyMutex object_stats_mutex = LAZY_MUTEX_INITIALIZER;
static void TraceObjectStat(const char* name, int count, int size) {
if (size > 0) {
PrintF("%40s\tcount= %6d\t size= %6d kb\n", name, count, size);
}
}
void Heap::TraceObjectStats() {
base::LockGuard<base::Mutex> lock_guard(object_stats_mutex.Pointer());
int index;
int count;
int size;
int total_size = 0;
#define TRACE_OBJECT_COUNT(name) \
count = static_cast<int>(object_counts_[name]); \
size = static_cast<int>(object_sizes_[name]) / KB; \
total_size += size; \
TraceObjectStat(#name, count, size);
INSTANCE_TYPE_LIST(TRACE_OBJECT_COUNT)
#undef TRACE_OBJECT_COUNT
#define TRACE_OBJECT_COUNT(name) \
index = FIRST_CODE_KIND_SUB_TYPE + Code::name; \
count = static_cast<int>(object_counts_[index]); \
size = static_cast<int>(object_sizes_[index]) / KB; \
TraceObjectStat("CODE_" #name, count, size);
CODE_KIND_LIST(TRACE_OBJECT_COUNT)
#undef TRACE_OBJECT_COUNT
#define TRACE_OBJECT_COUNT(name) \
index = FIRST_FIXED_ARRAY_SUB_TYPE + name; \
count = static_cast<int>(object_counts_[index]); \
size = static_cast<int>(object_sizes_[index]) / KB; \
TraceObjectStat("FIXED_ARRAY_" #name, count, size);
FIXED_ARRAY_SUB_INSTANCE_TYPE_LIST(TRACE_OBJECT_COUNT)
#undef TRACE_OBJECT_COUNT
#define TRACE_OBJECT_COUNT(name) \
index = \
FIRST_CODE_AGE_SUB_TYPE + Code::k##name##CodeAge - Code::kFirstCodeAge; \
count = static_cast<int>(object_counts_[index]); \
size = static_cast<int>(object_sizes_[index]) / KB; \
TraceObjectStat("CODE_AGE_" #name, count, size);
CODE_AGE_LIST_COMPLETE(TRACE_OBJECT_COUNT)
#undef TRACE_OBJECT_COUNT
PrintF("Total size= %d kb\n", total_size);
}
void Heap::CheckpointObjectStats() {
base::LockGuard<base::Mutex> lock_guard(
checkpoint_object_stats_mutex.Pointer());
base::LockGuard<base::Mutex> lock_guard(object_stats_mutex.Pointer());
Counters* counters = isolate()->counters();
#define ADJUST_LAST_TIME_OBJECT_COUNT(name) \
counters->count_of_##name()->Increment( \
......
......@@ -1429,6 +1429,7 @@ class Heap {
object_sizes_[FIRST_FIXED_ARRAY_SUB_TYPE + array_sub_type] += size;
}
void TraceObjectStats();
void CheckpointObjectStats();
// We don't use a LockGuard here since we want to lock the heap
......
......@@ -2385,6 +2385,9 @@ void MarkCompactCollector::AfterMarking() {
}
if (FLAG_track_gc_object_stats) {
if (FLAG_trace_gc_object_stats) {
heap()->TraceObjectStats();
}
heap()->CheckpointObjectStats();
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment