Index: src/heap/heap.h |
diff --git a/src/heap/heap.h b/src/heap/heap.h |
index 32be7698867c17d81cb943578cc35693b943f356..933c4dc4dc4c9480297a1e4cb5c05a0e599b8ef1 100644 |
--- a/src/heap/heap.h |
+++ b/src/heap/heap.h |
@@ -424,6 +424,7 @@ class HeapObjectsFilter; |
class HeapStats; |
class Isolate; |
class MemoryReducer; |
+class ObjectStats; |
class WeakObjectRetainer; |
@@ -586,18 +587,6 @@ class Heap { |
enum HeapState { NOT_IN_GC, SCAVENGE, MARK_COMPACT }; |
- // ObjectStats are kept in two arrays, counts and sizes. Related stats are |
- // stored in a contiguous linear buffer. Stats groups are stored one after |
- // another. |
- enum { |
- FIRST_CODE_KIND_SUB_TYPE = LAST_TYPE + 1, |
- FIRST_FIXED_ARRAY_SUB_TYPE = |
- FIRST_CODE_KIND_SUB_TYPE + Code::NUMBER_OF_KINDS, |
- FIRST_CODE_AGE_SUB_TYPE = |
- FIRST_FIXED_ARRAY_SUB_TYPE + LAST_FIXED_ARRAY_SUB_TYPE + 1, |
- OBJECT_STATS_COUNT = FIRST_CODE_AGE_SUB_TYPE + Code::kCodeAgeCount + 1 |
- }; |
- |
// Taking this lock prevents the GC from entering a phase that relocates |
// object references. |
class RelocationLock { |
@@ -909,14 +898,6 @@ class Heap { |
// Print short heap statistics. |
void PrintShortHeapStatistics(); |
- size_t object_count_last_gc(size_t index) { |
- return index < OBJECT_STATS_COUNT ? object_counts_last_time_[index] : 0; |
- } |
- |
- size_t object_size_last_gc(size_t index) { |
- return index < OBJECT_STATS_COUNT ? object_sizes_last_time_[index] : 0; |
- } |
- |
inline HeapState gc_state() { return gc_state_; } |
inline bool IsInGCPostProcessing() { return gc_post_processing_depth_ > 0; } |
@@ -1009,38 +990,6 @@ class Heap { |
return new_space_.IsAtMaximumCapacity() && maximum_size_scavenges_ == 0; |
} |
- void RecordObjectStats(InstanceType type, size_t size) { |
- DCHECK(type <= LAST_TYPE); |
- object_counts_[type]++; |
- object_sizes_[type] += size; |
- } |
- |
- void RecordCodeSubTypeStats(int code_sub_type, int code_age, size_t size) { |
- int code_sub_type_index = FIRST_CODE_KIND_SUB_TYPE + code_sub_type; |
- int code_age_index = |
- FIRST_CODE_AGE_SUB_TYPE + code_age - Code::kFirstCodeAge; |
- DCHECK(code_sub_type_index >= FIRST_CODE_KIND_SUB_TYPE && |
- code_sub_type_index < FIRST_CODE_AGE_SUB_TYPE); |
- DCHECK(code_age_index >= FIRST_CODE_AGE_SUB_TYPE && |
- code_age_index < OBJECT_STATS_COUNT); |
- object_counts_[code_sub_type_index]++; |
- object_sizes_[code_sub_type_index] += size; |
- object_counts_[code_age_index]++; |
- object_sizes_[code_age_index] += size; |
- } |
- |
- void RecordFixedArraySubTypeStats(int array_sub_type, size_t size) { |
- DCHECK(array_sub_type <= LAST_FIXED_ARRAY_SUB_TYPE); |
- object_counts_[FIRST_FIXED_ARRAY_SUB_TYPE + array_sub_type]++; |
- object_sizes_[FIRST_FIXED_ARRAY_SUB_TYPE + array_sub_type] += size; |
- } |
- |
- void TraceObjectStats(); |
- void TraceObjectStat(const char* name, int count, int size, double time); |
- void CheckpointObjectStats(); |
- bool GetObjectTypeName(size_t index, const char** object_type, |
- const char** object_sub_type); |
- |
void AddWeakObjectToCodeDependency(Handle<HeapObject> obj, |
Handle<DependentCode> dep); |
@@ -1384,6 +1333,25 @@ class Heap { |
bool InSpace(HeapObject* value, AllocationSpace space); |
// =========================================================================== |
+ // Object statistics tracking. =============================================== |
+ // =========================================================================== |
+ |
+ // Returns the number of buckets used by object statistics tracking during a |
+ // major GC. Note that the following methods fail gracefully when the bounds |
+ // are exceeded though. |
+ size_t NumberOfTrackedHeapObjectTypes(); |
+ |
+ // Returns object statistics about count and size at the last major GC. |
+ // Objects are being grouped into buckets that roughly resemble existing |
+ // instance types. |
+ size_t ObjectCountAtLastGC(size_t index); |
+ size_t ObjectSizeAtLastGC(size_t index); |
+ |
+ // Retrieves names of buckets used by object statistics tracking. |
+ bool GetObjectTypeName(size_t index, const char** object_type, |
+ const char** object_sub_type); |
+ |
+ // =========================================================================== |
// GC statistics. ============================================================ |
// =========================================================================== |
@@ -1840,8 +1808,6 @@ class Heap { |
void CheckAndNotifyBackgroundIdleNotification(double idle_time_in_ms, |
double now_ms); |
- void ClearObjectStats(bool clear_last_time_stats = false); |
- |
inline void UpdateAllocationsHash(HeapObject* object); |
inline void UpdateAllocationsHash(uint32_t value); |
void PrintAlloctionsHash(); |
@@ -2274,12 +2240,6 @@ class Heap { |
// of the allocation site. |
unsigned int maximum_size_scavenges_; |
- // Object counts and used memory by InstanceType |
- size_t object_counts_[OBJECT_STATS_COUNT]; |
- size_t object_counts_last_time_[OBJECT_STATS_COUNT]; |
- size_t object_sizes_[OBJECT_STATS_COUNT]; |
- size_t object_sizes_last_time_[OBJECT_STATS_COUNT]; |
- |
// Maximum GC pause. |
double max_gc_pause_; |
@@ -2314,6 +2274,8 @@ class Heap { |
MemoryReducer* memory_reducer_; |
+ ObjectStats* object_stats_; |
+ |
// These two counters are monotomically increasing and never reset. |
size_t full_codegen_bytes_generated_; |
size_t crankshaft_codegen_bytes_generated_; |