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 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
150 | 150 |
151 class HeapSnapshotsCollection; | 151 class HeapSnapshotsCollection; |
152 | 152 |
153 // HeapSnapshot represents a single heap snapshot. It is stored in | 153 // HeapSnapshot represents a single heap snapshot. It is stored in |
154 // HeapSnapshotsCollection, which is also a factory for | 154 // HeapSnapshotsCollection, which is also a factory for |
155 // HeapSnapshots. All HeapSnapshots share strings copied from JS heap | 155 // HeapSnapshots. All HeapSnapshots share strings copied from JS heap |
156 // to be able to return them even if they were collected. | 156 // to be able to return them even if they were collected. |
157 // HeapSnapshotGenerator fills in a HeapSnapshot. | 157 // HeapSnapshotGenerator fills in a HeapSnapshot. |
158 class HeapSnapshot { | 158 class HeapSnapshot { |
159 public: | 159 public: |
| 160 enum Type { |
| 161 kFull = v8::HeapSnapshot::kFull |
| 162 }; |
| 163 |
160 HeapSnapshot(HeapSnapshotsCollection* collection, | 164 HeapSnapshot(HeapSnapshotsCollection* collection, |
| 165 Type type, |
161 const char* title, | 166 const char* title, |
162 unsigned uid); | 167 unsigned uid); |
163 void Delete(); | 168 void Delete(); |
164 | 169 |
165 HeapSnapshotsCollection* collection() { return collection_; } | 170 HeapSnapshotsCollection* collection() { return collection_; } |
| 171 Type type() { return type_; } |
166 const char* title() { return title_; } | 172 const char* title() { return title_; } |
167 unsigned uid() { return uid_; } | 173 unsigned uid() { return uid_; } |
168 size_t RawSnapshotSize() const; | 174 size_t RawSnapshotSize() const; |
169 HeapEntry* root() { return &entries_[root_index_]; } | 175 HeapEntry* root() { return &entries_[root_index_]; } |
170 HeapEntry* gc_roots() { return &entries_[gc_roots_index_]; } | 176 HeapEntry* gc_roots() { return &entries_[gc_roots_index_]; } |
171 HeapEntry* natives_root() { return &entries_[natives_root_index_]; } | 177 HeapEntry* natives_root() { return &entries_[natives_root_index_]; } |
172 HeapEntry* gc_subroot(int index) { | 178 HeapEntry* gc_subroot(int index) { |
173 return &entries_[gc_subroot_indexes_[index]]; | 179 return &entries_[gc_subroot_indexes_[index]]; |
174 } | 180 } |
175 List<HeapEntry>& entries() { return entries_; } | 181 List<HeapEntry>& entries() { return entries_; } |
(...skipping 14 matching lines...) Expand all Loading... |
190 HeapEntry* AddNativesRootEntry(); | 196 HeapEntry* AddNativesRootEntry(); |
191 HeapEntry* GetEntryById(SnapshotObjectId id); | 197 HeapEntry* GetEntryById(SnapshotObjectId id); |
192 List<HeapEntry*>* GetSortedEntriesList(); | 198 List<HeapEntry*>* GetSortedEntriesList(); |
193 void FillChildren(); | 199 void FillChildren(); |
194 | 200 |
195 void Print(int max_depth); | 201 void Print(int max_depth); |
196 void PrintEntriesSize(); | 202 void PrintEntriesSize(); |
197 | 203 |
198 private: | 204 private: |
199 HeapSnapshotsCollection* collection_; | 205 HeapSnapshotsCollection* collection_; |
| 206 Type type_; |
200 const char* title_; | 207 const char* title_; |
201 unsigned uid_; | 208 unsigned uid_; |
202 int root_index_; | 209 int root_index_; |
203 int gc_roots_index_; | 210 int gc_roots_index_; |
204 int natives_root_index_; | 211 int natives_root_index_; |
205 int gc_subroot_indexes_[VisitorSynchronization::kNumberOfSyncTags]; | 212 int gc_subroot_indexes_[VisitorSynchronization::kNumberOfSyncTags]; |
206 List<HeapEntry> entries_; | 213 List<HeapEntry> entries_; |
207 List<HeapGraphEdge> edges_; | 214 List<HeapGraphEdge> edges_; |
208 List<HeapGraphEdge*> children_; | 215 List<HeapGraphEdge*> children_; |
209 List<HeapEntry*> sorted_entries_; | 216 List<HeapEntry*> sorted_entries_; |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
291 | 298 |
292 Heap* heap() const { return ids_.heap(); } | 299 Heap* heap() const { return ids_.heap(); } |
293 | 300 |
294 bool is_tracking_objects() { return is_tracking_objects_; } | 301 bool is_tracking_objects() { return is_tracking_objects_; } |
295 SnapshotObjectId PushHeapObjectsStats(OutputStream* stream) { | 302 SnapshotObjectId PushHeapObjectsStats(OutputStream* stream) { |
296 return ids_.PushHeapObjectsStats(stream); | 303 return ids_.PushHeapObjectsStats(stream); |
297 } | 304 } |
298 void StartHeapObjectsTracking() { is_tracking_objects_ = true; } | 305 void StartHeapObjectsTracking() { is_tracking_objects_ = true; } |
299 void StopHeapObjectsTracking() { ids_.StopHeapObjectsTracking(); } | 306 void StopHeapObjectsTracking() { ids_.StopHeapObjectsTracking(); } |
300 | 307 |
301 HeapSnapshot* NewSnapshot(const char* name, unsigned uid); | 308 HeapSnapshot* NewSnapshot( |
| 309 HeapSnapshot::Type type, const char* name, unsigned uid); |
302 void SnapshotGenerationFinished(HeapSnapshot* snapshot); | 310 void SnapshotGenerationFinished(HeapSnapshot* snapshot); |
303 List<HeapSnapshot*>* snapshots() { return &snapshots_; } | 311 List<HeapSnapshot*>* snapshots() { return &snapshots_; } |
304 HeapSnapshot* GetSnapshot(unsigned uid); | 312 HeapSnapshot* GetSnapshot(unsigned uid); |
305 void RemoveSnapshot(HeapSnapshot* snapshot); | 313 void RemoveSnapshot(HeapSnapshot* snapshot); |
306 | 314 |
307 StringsStorage* names() { return &names_; } | 315 StringsStorage* names() { return &names_; } |
308 TokenEnumerator* token_enumerator() { return token_enumerator_; } | 316 TokenEnumerator* token_enumerator() { return token_enumerator_; } |
309 | 317 |
310 SnapshotObjectId FindObjectId(Address object_addr) { | 318 SnapshotObjectId FindObjectId(Address object_addr) { |
311 return ids_.FindEntry(object_addr); | 319 return ids_.FindEntry(object_addr); |
(...skipping 369 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
681 friend class HeapSnapshotJSONSerializerIterator; | 689 friend class HeapSnapshotJSONSerializerIterator; |
682 | 690 |
683 DISALLOW_COPY_AND_ASSIGN(HeapSnapshotJSONSerializer); | 691 DISALLOW_COPY_AND_ASSIGN(HeapSnapshotJSONSerializer); |
684 }; | 692 }; |
685 | 693 |
686 | 694 |
687 } } // namespace v8::internal | 695 } } // namespace v8::internal |
688 | 696 |
689 #endif // V8_HEAP_SNAPSHOT_GENERATOR_H_ | 697 #endif // V8_HEAP_SNAPSHOT_GENERATOR_H_ |
690 | 698 |
OLD | NEW |