diff options
Diffstat (limited to 'chromium/v8/src/heap-snapshot-generator.h')
-rw-r--r-- | chromium/v8/src/heap-snapshot-generator.h | 55 |
1 files changed, 38 insertions, 17 deletions
diff --git a/chromium/v8/src/heap-snapshot-generator.h b/chromium/v8/src/heap-snapshot-generator.h index 7b0cf8f021e..e55513f890d 100644 --- a/chromium/v8/src/heap-snapshot-generator.h +++ b/chromium/v8/src/heap-snapshot-generator.h @@ -33,6 +33,8 @@ namespace v8 { namespace internal { +class AllocationTracker; +class AllocationTraceNode; class HeapEntry; class HeapSnapshot; @@ -227,8 +229,11 @@ class HeapObjectsMap { void SnapshotGenerationFinished(); SnapshotObjectId FindEntry(Address addr); - SnapshotObjectId FindOrAddEntry(Address addr, unsigned int size); - void MoveObject(Address from, Address to); + SnapshotObjectId FindOrAddEntry(Address addr, + unsigned int size, + bool accessed = true); + void MoveObject(Address from, Address to, int size); + void UpdateObjectSize(Address addr, int size); SnapshotObjectId last_assigned_id() const { return next_id_ - kObjectIdStep; } @@ -247,6 +252,10 @@ class HeapObjectsMap { static const SnapshotObjectId kGcRootsFirstSubrootId; static const SnapshotObjectId kFirstAvailableObjectId; + int FindUntrackedObjects(); + + void UpdateHeapObjectsMap(); + private: struct EntryInfo { EntryInfo(SnapshotObjectId id, Address addr, unsigned int size) @@ -265,7 +274,6 @@ class HeapObjectsMap { uint32_t count; }; - void UpdateHeapObjectsMap(); void RemoveDeadEntries(); SnapshotObjectId next_id_; @@ -285,12 +293,11 @@ class HeapSnapshotsCollection { Heap* heap() const { return ids_.heap(); } - bool is_tracking_objects() { return is_tracking_objects_; } SnapshotObjectId PushHeapObjectsStats(OutputStream* stream) { return ids_.PushHeapObjectsStats(stream); } - void StartHeapObjectsTracking() { is_tracking_objects_ = true; } - void StopHeapObjectsTracking() { ids_.StopHeapObjectsTracking(); } + void StartHeapObjectsTracking(bool track_allocations); + void StopHeapObjectsTracking(); HeapSnapshot* NewSnapshot(const char* name, unsigned uid); void SnapshotGenerationFinished(HeapSnapshot* snapshot); @@ -298,6 +305,7 @@ class HeapSnapshotsCollection { void RemoveSnapshot(HeapSnapshot* snapshot); StringsStorage* names() { return &names_; } + AllocationTracker* allocation_tracker() { return allocation_tracker_; } SnapshotObjectId FindObjectId(Address object_addr) { return ids_.FindEntry(object_addr); @@ -306,18 +314,26 @@ class HeapSnapshotsCollection { return ids_.FindOrAddEntry(object_addr, object_size); } Handle<HeapObject> FindHeapObjectById(SnapshotObjectId id); - void ObjectMoveEvent(Address from, Address to) { ids_.MoveObject(from, to); } + void ObjectMoveEvent(Address from, Address to, int size) { + ids_.MoveObject(from, to, size); + } + void AllocationEvent(Address addr, int size); + void UpdateObjectSizeEvent(Address addr, int size) { + ids_.UpdateObjectSize(addr, size); + } SnapshotObjectId last_assigned_id() const { return ids_.last_assigned_id(); } size_t GetUsedMemorySize() const; + int FindUntrackedObjects() { return ids_.FindUntrackedObjects(); } + private: - bool is_tracking_objects_; // Whether tracking object moves is needed. List<HeapSnapshot*> snapshots_; StringsStorage names_; // Mapping from HeapObject addresses to objects' uids. HeapObjectsMap ids_; + AllocationTracker* allocation_tracker_; DISALLOW_COPY_AND_ASSIGN(HeapSnapshotsCollection); }; @@ -426,6 +442,8 @@ class V8HeapExplorer : public HeapEntriesAllocator { int EstimateObjectsCount(HeapIterator* iterator); bool IterateAndExtractReferences(SnapshotFillerInterface* filler); void TagGlobalObjects(); + void TagCodeObject(Code* code); + void TagCodeObject(Code* code, const char* external_name); static String* GetConstructorName(JSObject* object); @@ -628,7 +646,7 @@ class HeapSnapshotJSONSerializer { public: explicit HeapSnapshotJSONSerializer(HeapSnapshot* snapshot) : snapshot_(snapshot), - strings_(ObjectsMatch), + strings_(StringsMatch), next_node_id_(1), next_string_id_(1), writer_(NULL) { @@ -636,14 +654,16 @@ class HeapSnapshotJSONSerializer { void Serialize(v8::OutputStream* stream); private: - INLINE(static bool ObjectsMatch(void* key1, void* key2)) { - return key1 == key2; + INLINE(static bool StringsMatch(void* key1, void* key2)) { + return strcmp(reinterpret_cast<char*>(key1), + reinterpret_cast<char*>(key2)) == 0; } - INLINE(static uint32_t ObjectHash(const void* key)) { - return ComputeIntegerHash( - static_cast<uint32_t>(reinterpret_cast<uintptr_t>(key)), - v8::internal::kZeroHashSeed); + INLINE(static uint32_t StringHash(const void* string)) { + const char* s = reinterpret_cast<const char*>(string); + int len = static_cast<int>(strlen(s)); + return StringHasher::HashSequentialString( + s, len, v8::internal::kZeroHashSeed); } int GetStringId(const char* s); @@ -654,9 +674,11 @@ class HeapSnapshotJSONSerializer { void SerializeNode(HeapEntry* entry); void SerializeNodes(); void SerializeSnapshot(); + void SerializeTraceTree(); + void SerializeTraceNode(AllocationTraceNode* node); + void SerializeTraceNodeInfos(); void SerializeString(const unsigned char* s); void SerializeStrings(); - void SortHashMap(HashMap* map, List<HashMap::Entry*>* sorted_entries); static const int kEdgeFieldsCount; static const int kNodeFieldsCount; @@ -677,4 +699,3 @@ class HeapSnapshotJSONSerializer { } } // namespace v8::internal #endif // V8_HEAP_SNAPSHOT_GENERATOR_H_ - |