| Index: src/heap.cc
|
| diff --git a/src/heap.cc b/src/heap.cc
|
| index a448292789ad72511cb6c6922dc903bc1f14eb8a..edcd4df3f345e97aca0edc7fe24f60b0e7728d00 100644
|
| --- a/src/heap.cc
|
| +++ b/src/heap.cc
|
| @@ -179,6 +179,8 @@ Heap::Heap()
|
| // Put a dummy entry in the remembered pages so we can find the list the
|
| // minidump even if there are no real unmapped pages.
|
| RememberUnmappedPage(NULL, false);
|
| +
|
| + ClearObjectStats(true);
|
| }
|
|
|
|
|
| @@ -7225,4 +7227,35 @@ void Heap::RememberUnmappedPage(Address page, bool compacted) {
|
| remembered_unmapped_pages_index_ %= kRememberedUnmappedPages;
|
| }
|
|
|
| +
|
| +void Heap::ClearObjectStats(bool clear_last_time_stats) {
|
| + memset(object_counts_, 0, sizeof(object_counts_));
|
| + memset(object_sizes_, 0, sizeof(object_sizes_));
|
| + if (clear_last_time_stats) {
|
| + memset(object_counts_last_time_, 0, sizeof(object_counts_last_time_));
|
| + memset(object_sizes_last_time_, 0, sizeof(object_sizes_last_time_));
|
| + }
|
| +}
|
| +
|
| +
|
| +static LazyMutex checkpoint_object_stats_mutex = LAZY_MUTEX_INITIALIZER;
|
| +
|
| +
|
| +void Heap::CheckpointObjectStats() {
|
| + ScopedLock lock(checkpoint_object_stats_mutex.Pointer());
|
| + Counters* counters = isolate()->counters();
|
| +#define ADJUST_LAST_TIME_OBJECT_COUNT(name) \
|
| + counters->count_of_##name()->Increment(object_counts_[name]); \
|
| + counters->count_of_##name()->Decrement(object_counts_last_time_[name]); \
|
| + counters->size_of_##name()->Increment(object_sizes_[name]); \
|
| + counters->size_of_##name()->Decrement(object_sizes_last_time_[name]);
|
| + INSTANCE_TYPE_LIST(ADJUST_LAST_TIME_OBJECT_COUNT)
|
| +#undef ADJUST_LAST_TIME_OBJECT_COUNT
|
| + memcpy(object_counts_last_time_, object_counts_,
|
| + sizeof(object_counts_));
|
| + memcpy(object_sizes_last_time_, object_sizes_,
|
| + sizeof(object_sizes_));
|
| + ClearObjectStats();
|
| +}
|
| +
|
| } } // namespace v8::internal
|
|
|