5#ifndef V8_HEAP_OBJECT_STATS_H_
6#define V8_HEAP_OBJECT_STATS_H_
17#define VIRTUAL_INSTANCE_TYPE_LIST(V) \
19 V(ARRAY_BOILERPLATE_DESCRIPTION_ELEMENTS_TYPE) \
20 V(ARRAY_DICTIONARY_ELEMENTS_TYPE) \
21 V(ARRAY_ELEMENTS_TYPE) \
22 V(BOILERPLATE_ELEMENTS_TYPE) \
23 V(BOILERPLATE_PROPERTY_ARRAY_TYPE) \
24 V(BOILERPLATE_PROPERTY_DICTIONARY_TYPE) \
25 V(BYTECODE_ARRAY_CONSTANT_POOL_TYPE) \
26 V(BYTECODE_ARRAY_HANDLER_TABLE_TYPE) \
28 V(DEOPTIMIZATION_DATA_TYPE) \
29 V(DEPENDENT_CODE_TYPE) \
30 V(DEPRECATED_DESCRIPTOR_ARRAY_TYPE) \
31 V(EMBEDDED_OBJECT_TYPE) \
32 V(ENUM_KEYS_CACHE_TYPE) \
33 V(ENUM_INDICES_CACHE_TYPE) \
34 V(FEEDBACK_VECTOR_ENTRY_TYPE) \
35 V(FEEDBACK_VECTOR_HEADER_TYPE) \
36 V(FEEDBACK_VECTOR_SLOT_CALL_TYPE) \
37 V(FEEDBACK_VECTOR_SLOT_CALL_UNUSED_TYPE) \
38 V(FEEDBACK_VECTOR_SLOT_ENUM_TYPE) \
39 V(FEEDBACK_VECTOR_SLOT_LOAD_TYPE) \
40 V(FEEDBACK_VECTOR_SLOT_LOAD_UNUSED_TYPE) \
41 V(FEEDBACK_VECTOR_SLOT_OTHER_TYPE) \
42 V(FEEDBACK_VECTOR_SLOT_STORE_TYPE) \
43 V(FEEDBACK_VECTOR_SLOT_STORE_UNUSED_TYPE) \
44 V(FUNCTION_TEMPLATE_INFO_ENTRIES_TYPE) \
45 V(GLOBAL_ELEMENTS_TYPE) \
46 V(GLOBAL_PROPERTIES_TYPE) \
47 V(JS_ARRAY_BOILERPLATE_TYPE) \
48 V(JS_COLLECTION_TABLE_TYPE) \
49 V(JS_OBJECT_BOILERPLATE_TYPE) \
50 V(JS_UNCOMPILED_FUNCTION_TYPE) \
51 V(MAP_ABANDONED_PROTOTYPE_TYPE) \
52 V(MAP_DEPRECATED_TYPE) \
53 V(MAP_DICTIONARY_TYPE) \
54 V(MAP_PROTOTYPE_DICTIONARY_TYPE) \
55 V(MAP_PROTOTYPE_TYPE) \
57 V(NUMBER_STRING_CACHE_TYPE) \
58 V(OBJECT_DICTIONARY_ELEMENTS_TYPE) \
59 V(OBJECT_ELEMENTS_TYPE) \
60 V(OBJECT_PROPERTY_ARRAY_TYPE) \
61 V(OBJECT_PROPERTY_DICTIONARY_TYPE) \
62 V(OBJECT_TO_CODE_TYPE) \
63 V(OPTIMIZED_CODE_LITERALS_TYPE) \
64 V(OTHER_CONTEXT_TYPE) \
65 V(PROTOTYPE_DESCRIPTOR_ARRAY_TYPE) \
66 V(PROTOTYPE_PROPERTY_ARRAY_TYPE) \
67 V(PROTOTYPE_PROPERTY_DICTIONARY_TYPE) \
68 V(PROTOTYPE_USERS_TYPE) \
69 V(REGEXP_MULTIPLE_CACHE_TYPE) \
71 V(RETAINED_MAPS_TYPE) \
73 V(SCRIPT_INFOS_TYPE) \
74 V(SCRIPT_SOURCE_EXTERNAL_ONE_BYTE_TYPE) \
75 V(SCRIPT_SOURCE_EXTERNAL_TWO_BYTE_TYPE) \
76 V(SCRIPT_SOURCE_NON_EXTERNAL_ONE_BYTE_TYPE) \
77 V(SCRIPT_SOURCE_NON_EXTERNAL_TWO_BYTE_TYPE) \
78 V(SERIALIZED_OBJECTS_TYPE) \
79 V(SINGLE_CHARACTER_STRING_TABLE_TYPE) \
80 V(STRING_SPLIT_CACHE_TYPE) \
81 V(STRING_EXTERNAL_RESOURCE_ONE_BYTE_TYPE) \
82 V(STRING_EXTERNAL_RESOURCE_TWO_BYTE_TYPE) \
83 V(SOURCE_POSITION_TABLE_TYPE) \
84 V(UNCOMPILED_SHARED_FUNCTION_INFO_TYPE) \
85 V(WASTED_DESCRIPTOR_ARRAY_DETAILS_TYPE) \
86 V(WASTED_DESCRIPTOR_ARRAY_VALUES_TYPE) \
87 V(WEAK_NEW_SPACE_OBJECT_TO_CODE_TYPE)
103#define DEFINE_VIRTUAL_INSTANCE_TYPE(type) type,
105#undef DEFINE_FIXED_ARRAY_SUB_INSTANCE_TYPE
120 void Dump(std::stringstream& stream);
126 size_t over_allocated);
151 const char* name,
int index);
153 const char* name,
int index);
ObjectStatsCollector(Heap *heap, ObjectStats *live, ObjectStats *dead)
static constexpr int OBJECT_STATS_COUNT
static const int kNumberOfBuckets
void CheckpointObjectStats()
size_t object_sizes_last_time_[OBJECT_STATS_COUNT]
size_t over_allocated_histogram_[OBJECT_STATS_COUNT][kNumberOfBuckets]
size_t object_counts_last_time_[OBJECT_STATS_COUNT]
V8_NOINLINE void DumpInstanceTypeData(std::stringstream &stream, const char *name, int index)
void RecordVirtualObjectStats(VirtualInstanceType type, size_t size, size_t over_allocated)
size_t over_allocated_[OBJECT_STATS_COUNT]
int HistogramIndexFromSize(size_t size)
void PrintKeyAndId(const char *key, int gc_count)
void PrintJSON(const char *key)
void Dump(std::stringstream &stream)
static const int kLastBucket
size_t object_count_last_gc(size_t index)
void RecordObjectStats(InstanceType type, size_t size, size_t over_allocated=kNoOverAllocation)
size_t object_size_last_gc(size_t index)
static const int kFirstBucketShift
size_t inobject_smi_fields_count_
size_t size_histogram_[OBJECT_STATS_COUNT][kNumberOfBuckets]
static const int kLastBucketShift
V8_NOINLINE void PrintInstanceTypeJSON(const char *key, int gc_count, const char *name, int index)
size_t embedder_fields_count_
size_t object_sizes_[OBJECT_STATS_COUNT]
static const int kLastValueBucketIndex
size_t object_counts_[OBJECT_STATS_COUNT]
void ClearObjectStats(bool clear_last_time_stats=false)
static const size_t kNoOverAllocation
static const int kFirstBucket
size_t string_data_count_
size_t tagged_fields_count_
DEFINE_VIRTUAL_INSTANCE_TYPE(type)
size_t boxed_double_fields_count_
static constexpr int FIRST_VIRTUAL_TYPE
#define VIRTUAL_INSTANCE_TYPE_LIST(V)
#define DCHECK_NOT_NULL(val)