| OLD | NEW |
| 1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 107 kConsString = v8::HeapGraphNode::kConsString, | 107 kConsString = v8::HeapGraphNode::kConsString, |
| 108 kSlicedString = v8::HeapGraphNode::kSlicedString | 108 kSlicedString = v8::HeapGraphNode::kSlicedString |
| 109 }; | 109 }; |
| 110 static const int kNoEntry; | 110 static const int kNoEntry; |
| 111 | 111 |
| 112 HeapEntry() { } | 112 HeapEntry() { } |
| 113 HeapEntry(HeapSnapshot* snapshot, | 113 HeapEntry(HeapSnapshot* snapshot, |
| 114 Type type, | 114 Type type, |
| 115 const char* name, | 115 const char* name, |
| 116 SnapshotObjectId id, | 116 SnapshotObjectId id, |
| 117 size_t self_size); | 117 size_t self_size, |
| 118 unsigned trace_node_id); |
| 118 | 119 |
| 119 HeapSnapshot* snapshot() { return snapshot_; } | 120 HeapSnapshot* snapshot() { return snapshot_; } |
| 120 Type type() { return static_cast<Type>(type_); } | 121 Type type() { return static_cast<Type>(type_); } |
| 121 const char* name() { return name_; } | 122 const char* name() { return name_; } |
| 122 void set_name(const char* name) { name_ = name; } | 123 void set_name(const char* name) { name_ = name; } |
| 123 inline SnapshotObjectId id() { return id_; } | 124 inline SnapshotObjectId id() { return id_; } |
| 124 size_t self_size() { return self_size_; } | 125 size_t self_size() { return self_size_; } |
| 126 unsigned trace_node_id() const { return trace_node_id_; } |
| 125 INLINE(int index() const); | 127 INLINE(int index() const); |
| 126 int children_count() const { return children_count_; } | 128 int children_count() const { return children_count_; } |
| 127 INLINE(int set_children_index(int index)); | 129 INLINE(int set_children_index(int index)); |
| 128 void add_child(HeapGraphEdge* edge) { | 130 void add_child(HeapGraphEdge* edge) { |
| 129 children_arr()[children_count_++] = edge; | 131 children_arr()[children_count_++] = edge; |
| 130 } | 132 } |
| 131 Vector<HeapGraphEdge*> children() { | 133 Vector<HeapGraphEdge*> children() { |
| 132 return Vector<HeapGraphEdge*>(children_arr(), children_count_); } | 134 return Vector<HeapGraphEdge*>(children_arr(), children_count_); } |
| 133 | 135 |
| 134 void SetIndexedReference( | 136 void SetIndexedReference( |
| 135 HeapGraphEdge::Type type, int index, HeapEntry* entry); | 137 HeapGraphEdge::Type type, int index, HeapEntry* entry); |
| 136 void SetNamedReference( | 138 void SetNamedReference( |
| 137 HeapGraphEdge::Type type, const char* name, HeapEntry* entry); | 139 HeapGraphEdge::Type type, const char* name, HeapEntry* entry); |
| 138 | 140 |
| 139 void Print( | 141 void Print( |
| 140 const char* prefix, const char* edge_name, int max_depth, int indent); | 142 const char* prefix, const char* edge_name, int max_depth, int indent); |
| 141 | 143 |
| 142 private: | 144 private: |
| 143 INLINE(HeapGraphEdge** children_arr()); | 145 INLINE(HeapGraphEdge** children_arr()); |
| 144 const char* TypeAsString(); | 146 const char* TypeAsString(); |
| 145 | 147 |
| 146 unsigned type_: 4; | 148 unsigned type_: 4; |
| 147 int children_count_: 28; | 149 int children_count_: 28; |
| 148 int children_index_; | 150 int children_index_; |
| 149 size_t self_size_; | 151 size_t self_size_; |
| 150 SnapshotObjectId id_; | |
| 151 HeapSnapshot* snapshot_; | 152 HeapSnapshot* snapshot_; |
| 152 const char* name_; | 153 const char* name_; |
| 154 SnapshotObjectId id_; |
| 155 // id of allocation stack trace top node |
| 156 unsigned trace_node_id_; |
| 153 }; | 157 }; |
| 154 | 158 |
| 155 | 159 |
| 156 // HeapSnapshot represents a single heap snapshot. It is stored in | 160 // HeapSnapshot represents a single heap snapshot. It is stored in |
| 157 // HeapProfiler, which is also a factory for | 161 // HeapProfiler, which is also a factory for |
| 158 // HeapSnapshots. All HeapSnapshots share strings copied from JS heap | 162 // HeapSnapshots. All HeapSnapshots share strings copied from JS heap |
| 159 // to be able to return them even if they were collected. | 163 // to be able to return them even if they were collected. |
| 160 // HeapSnapshotGenerator fills in a HeapSnapshot. | 164 // HeapSnapshotGenerator fills in a HeapSnapshot. |
| 161 class HeapSnapshot { | 165 class HeapSnapshot { |
| 162 public: | 166 public: |
| (...skipping 16 matching lines...) Expand all Loading... |
| 179 List<HeapGraphEdge>& edges() { return edges_; } | 183 List<HeapGraphEdge>& edges() { return edges_; } |
| 180 List<HeapGraphEdge*>& children() { return children_; } | 184 List<HeapGraphEdge*>& children() { return children_; } |
| 181 void RememberLastJSObjectId(); | 185 void RememberLastJSObjectId(); |
| 182 SnapshotObjectId max_snapshot_js_object_id() const { | 186 SnapshotObjectId max_snapshot_js_object_id() const { |
| 183 return max_snapshot_js_object_id_; | 187 return max_snapshot_js_object_id_; |
| 184 } | 188 } |
| 185 | 189 |
| 186 HeapEntry* AddEntry(HeapEntry::Type type, | 190 HeapEntry* AddEntry(HeapEntry::Type type, |
| 187 const char* name, | 191 const char* name, |
| 188 SnapshotObjectId id, | 192 SnapshotObjectId id, |
| 189 size_t size); | 193 size_t size, |
| 194 unsigned trace_node_id); |
| 190 HeapEntry* AddRootEntry(); | 195 HeapEntry* AddRootEntry(); |
| 191 HeapEntry* AddGcRootsEntry(); | 196 HeapEntry* AddGcRootsEntry(); |
| 192 HeapEntry* AddGcSubrootEntry(int tag); | 197 HeapEntry* AddGcSubrootEntry(int tag); |
| 193 HeapEntry* AddNativesRootEntry(); | 198 HeapEntry* AddNativesRootEntry(); |
| 194 HeapEntry* GetEntryById(SnapshotObjectId id); | 199 HeapEntry* GetEntryById(SnapshotObjectId id); |
| 195 List<HeapEntry*>* GetSortedEntriesList(); | 200 List<HeapEntry*>* GetSortedEntriesList(); |
| 196 void FillChildren(); | 201 void FillChildren(); |
| 197 | 202 |
| 198 void Print(int max_depth); | 203 void Print(int max_depth); |
| 199 void PrintEntriesSize(); | 204 void PrintEntriesSize(); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 221 class HeapObjectsMap { | 226 class HeapObjectsMap { |
| 222 public: | 227 public: |
| 223 explicit HeapObjectsMap(Heap* heap); | 228 explicit HeapObjectsMap(Heap* heap); |
| 224 | 229 |
| 225 Heap* heap() const { return heap_; } | 230 Heap* heap() const { return heap_; } |
| 226 | 231 |
| 227 SnapshotObjectId FindEntry(Address addr); | 232 SnapshotObjectId FindEntry(Address addr); |
| 228 SnapshotObjectId FindOrAddEntry(Address addr, | 233 SnapshotObjectId FindOrAddEntry(Address addr, |
| 229 unsigned int size, | 234 unsigned int size, |
| 230 bool accessed = true); | 235 bool accessed = true); |
| 231 void MoveObject(Address from, Address to, int size); | 236 bool MoveObject(Address from, Address to, int size); |
| 232 void UpdateObjectSize(Address addr, int size); | 237 void UpdateObjectSize(Address addr, int size); |
| 233 SnapshotObjectId last_assigned_id() const { | 238 SnapshotObjectId last_assigned_id() const { |
| 234 return next_id_ - kObjectIdStep; | 239 return next_id_ - kObjectIdStep; |
| 235 } | 240 } |
| 236 | 241 |
| 237 void StopHeapObjectsTracking(); | 242 void StopHeapObjectsTracking(); |
| 238 SnapshotObjectId PushHeapObjectsStats(OutputStream* stream); | 243 SnapshotObjectId PushHeapObjectsStats(OutputStream* stream); |
| 239 size_t GetUsedMemorySize() const; | 244 size_t GetUsedMemorySize() const; |
| 240 | 245 |
| 241 SnapshotObjectId GenerateId(v8::RetainedObjectInfo* info); | 246 SnapshotObjectId GenerateId(v8::RetainedObjectInfo* info); |
| (...skipping 400 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 642 friend class HeapSnapshotJSONSerializerEnumerator; | 647 friend class HeapSnapshotJSONSerializerEnumerator; |
| 643 friend class HeapSnapshotJSONSerializerIterator; | 648 friend class HeapSnapshotJSONSerializerIterator; |
| 644 | 649 |
| 645 DISALLOW_COPY_AND_ASSIGN(HeapSnapshotJSONSerializer); | 650 DISALLOW_COPY_AND_ASSIGN(HeapSnapshotJSONSerializer); |
| 646 }; | 651 }; |
| 647 | 652 |
| 648 | 653 |
| 649 } } // namespace v8::internal | 654 } } // namespace v8::internal |
| 650 | 655 |
| 651 #endif // V8_HEAP_SNAPSHOT_GENERATOR_H_ | 656 #endif // V8_HEAP_SNAPSHOT_GENERATOR_H_ |
| OLD | NEW |