summaryrefslogtreecommitdiff
path: root/deps/v8/src/heap/object-stats.h
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/heap/object-stats.h')
-rw-r--r--deps/v8/src/heap/object-stats.h88
1 files changed, 64 insertions, 24 deletions
diff --git a/deps/v8/src/heap/object-stats.h b/deps/v8/src/heap/object-stats.h
index 500ce36bd9..723ae53fd5 100644
--- a/deps/v8/src/heap/object-stats.h
+++ b/deps/v8/src/heap/object-stats.h
@@ -5,13 +5,8 @@
#ifndef V8_HEAP_OBJECT_STATS_H_
#define V8_HEAP_OBJECT_STATS_H_
-#include <set>
-
-#include "src/base/ieee754.h"
-#include "src/heap/heap.h"
-#include "src/heap/mark-compact.h"
-#include "src/heap/objects-visiting.h"
#include "src/objects.h"
+#include "src/objects/code.h"
// These instance types do not exist for actual use but are merely introduced
// for object stats tracing. In contrast to Code and FixedArray sub types
@@ -19,18 +14,71 @@
// tracing.
//
// Update LAST_VIRTUAL_TYPE below when changing this macro.
-#define VIRTUAL_INSTANCE_TYPE_LIST(V) \
- V(BOILERPLATE_ELEMENTS_TYPE) \
- V(BOILERPLATE_NAME_DICTIONARY_TYPE) \
- V(BOILERPLATE_PROPERTY_ARRAY_TYPE) \
- V(JS_ARRAY_BOILERPLATE_TYPE) \
- V(JS_OBJECT_BOILERPLATE_TYPE)
+#define VIRTUAL_INSTANCE_TYPE_LIST(V) \
+ CODE_KIND_LIST(V) \
+ V(BOILERPLATE_ELEMENTS_TYPE) \
+ V(BOILERPLATE_PROPERTY_ARRAY_TYPE) \
+ V(BOILERPLATE_PROPERTY_DICTIONARY_TYPE) \
+ V(BYTECODE_ARRAY_CONSTANT_POOL_TYPE) \
+ V(BYTECODE_ARRAY_HANDLER_TABLE_TYPE) \
+ V(CODE_STUBS_TABLE_TYPE) \
+ V(COW_ARRAY_TYPE) \
+ V(DEOPTIMIZATION_DATA_TYPE) \
+ V(DEPENDENT_CODE_TYPE) \
+ V(ELEMENTS_TYPE) \
+ V(EMBEDDED_OBJECT_TYPE) \
+ V(ENUM_CACHE_TYPE) \
+ V(ENUM_INDICES_CACHE_TYPE) \
+ V(FEEDBACK_METADATA_TYPE) \
+ V(FEEDBACK_VECTOR_ENTRY_TYPE) \
+ V(FEEDBACK_VECTOR_HEADER_TYPE) \
+ V(FEEDBACK_VECTOR_SLOT_CALL_TYPE) \
+ V(FEEDBACK_VECTOR_SLOT_CALL_UNUSED_TYPE) \
+ V(FEEDBACK_VECTOR_SLOT_ENUM_TYPE) \
+ V(FEEDBACK_VECTOR_SLOT_LOAD_TYPE) \
+ V(FEEDBACK_VECTOR_SLOT_LOAD_UNUSED_TYPE) \
+ V(FEEDBACK_VECTOR_SLOT_OTHER_TYPE) \
+ V(FEEDBACK_VECTOR_SLOT_STORE_TYPE) \
+ V(FEEDBACK_VECTOR_SLOT_STORE_UNUSED_TYPE) \
+ V(FUNCTION_CONTEXT_TYPE) \
+ V(FUNCTION_TEMPLATE_INFO_ENTRIES_TYPE) \
+ V(GLOBAL_ELEMENTS_TYPE) \
+ V(GLOBAL_PROPERTIES_TYPE) \
+ V(JS_ARRAY_BOILERPLATE_TYPE) \
+ V(JS_COLLETION_TABLE_TYPE) \
+ V(JS_OBJECT_BOILERPLATE_TYPE) \
+ V(NATIVE_CONTEXT_TYPE) \
+ V(NOSCRIPT_SHARED_FUNCTION_INFOS_TYPE) \
+ V(NUMBER_STRING_CACHE_TYPE) \
+ V(OBJECT_PROPERTY_DICTIONARY_TYPE) \
+ V(OBJECT_TO_CODE_TYPE) \
+ V(OPTIMIZED_CODE_LITERALS_TYPE) \
+ V(OTHER_CONTEXT_TYPE) \
+ V(PROTOTYPE_USERS_TYPE) \
+ V(REGEXP_MULTIPLE_CACHE_TYPE) \
+ V(RETAINED_MAPS_TYPE) \
+ V(SCRIPT_LIST_TYPE) \
+ V(SCRIPT_SHARED_FUNCTION_INFOS_TYPE) \
+ V(SCRIPT_SOURCE_EXTERNAL_TYPE) \
+ V(SCRIPT_SOURCE_NON_EXTERNAL_TYPE) \
+ V(SERIALIZED_OBJECTS_TYPE) \
+ V(SINGLE_CHARACTER_STRING_CACHE_TYPE) \
+ V(STRING_SPLIT_CACHE_TYPE) \
+ V(STRING_TABLE_TYPE) \
+ V(UNCOMPILED_JS_FUNCTION_TYPE) \
+ V(UNCOMPILED_SHARED_FUNCTION_INFO_TYPE) \
+ V(WEAK_NEW_SPACE_OBJECT_TO_CODE_TYPE)
namespace v8 {
namespace internal {
+class Heap;
+class Isolate;
+
class ObjectStats {
public:
+ static const size_t kNoOverAllocation = 0;
+
explicit ObjectStats(Heap* heap) : heap_(heap) { ClearObjectStats(); }
// See description on VIRTUAL_INSTANCE_TYPE_LIST.
@@ -38,18 +86,14 @@ class ObjectStats {
#define DEFINE_VIRTUAL_INSTANCE_TYPE(type) type,
VIRTUAL_INSTANCE_TYPE_LIST(DEFINE_VIRTUAL_INSTANCE_TYPE)
#undef DEFINE_FIXED_ARRAY_SUB_INSTANCE_TYPE
- LAST_VIRTUAL_TYPE = JS_OBJECT_BOILERPLATE_TYPE,
+ LAST_VIRTUAL_TYPE = WEAK_NEW_SPACE_OBJECT_TO_CODE_TYPE,
};
// 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_VIRTUAL_TYPE =
- FIRST_FIXED_ARRAY_SUB_TYPE + LAST_FIXED_ARRAY_SUB_TYPE + 1,
+ FIRST_VIRTUAL_TYPE = LAST_TYPE + 1,
OBJECT_STATS_COUNT = FIRST_VIRTUAL_TYPE + LAST_VIRTUAL_TYPE + 1,
};
@@ -60,10 +104,8 @@ class ObjectStats {
void CheckpointObjectStats();
void RecordObjectStats(InstanceType type, size_t size);
- void RecordVirtualObjectStats(VirtualInstanceType type, size_t size);
- void RecordCodeSubTypeStats(int code_sub_type, size_t size);
- bool RecordFixedArraySubTypeStats(FixedArrayBase* array, int array_sub_type,
- size_t size, size_t over_allocated);
+ void RecordVirtualObjectStats(VirtualInstanceType type, size_t size,
+ size_t over_allocated);
size_t object_count_last_gc(size_t index) {
return object_counts_last_time_[index];
@@ -105,8 +147,6 @@ class ObjectStats {
// Detailed histograms by InstanceType.
size_t size_histogram_[OBJECT_STATS_COUNT][kNumberOfBuckets];
size_t over_allocated_histogram_[OBJECT_STATS_COUNT][kNumberOfBuckets];
-
- std::set<FixedArrayBase*> visited_fixed_array_sub_types_;
};
class ObjectStatsCollector {