| OLD | NEW |
| 1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef V8_PROFILER_HEAP_SNAPSHOT_GENERATOR_H_ | 5 #ifndef V8_PROFILER_HEAP_SNAPSHOT_GENERATOR_H_ |
| 6 #define V8_PROFILER_HEAP_SNAPSHOT_GENERATOR_H_ | 6 #define V8_PROFILER_HEAP_SNAPSHOT_GENERATOR_H_ |
| 7 | 7 |
| 8 #include <deque> |
| 8 #include <unordered_map> | 9 #include <unordered_map> |
| 9 | 10 |
| 10 #include "include/v8-profiler.h" | 11 #include "include/v8-profiler.h" |
| 11 #include "src/base/platform/time.h" | 12 #include "src/base/platform/time.h" |
| 12 #include "src/objects.h" | 13 #include "src/objects.h" |
| 13 #include "src/profiler/strings-storage.h" | 14 #include "src/profiler/strings-storage.h" |
| 14 | 15 |
| 15 namespace v8 { | 16 namespace v8 { |
| 16 namespace internal { | 17 namespace internal { |
| 17 | 18 |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 108 Type type() { return static_cast<Type>(type_); } | 109 Type type() { return static_cast<Type>(type_); } |
| 109 const char* name() { return name_; } | 110 const char* name() { return name_; } |
| 110 void set_name(const char* name) { name_ = name; } | 111 void set_name(const char* name) { name_ = name; } |
| 111 SnapshotObjectId id() { return id_; } | 112 SnapshotObjectId id() { return id_; } |
| 112 size_t self_size() { return self_size_; } | 113 size_t self_size() { return self_size_; } |
| 113 unsigned trace_node_id() const { return trace_node_id_; } | 114 unsigned trace_node_id() const { return trace_node_id_; } |
| 114 INLINE(int index() const); | 115 INLINE(int index() const); |
| 115 int children_count() const { return children_count_; } | 116 int children_count() const { return children_count_; } |
| 116 INLINE(int set_children_index(int index)); | 117 INLINE(int set_children_index(int index)); |
| 117 void add_child(HeapGraphEdge* edge) { | 118 void add_child(HeapGraphEdge* edge) { |
| 118 children_arr()[children_count_++] = edge; | 119 *(children_begin() + children_count_++) = edge; |
| 119 } | 120 } |
| 120 Vector<HeapGraphEdge*> children() { | 121 HeapGraphEdge* child(int i) { return *(children_begin() + i); } |
| 121 return Vector<HeapGraphEdge*>(children_arr(), children_count_); } | |
| 122 INLINE(Isolate* isolate() const); | 122 INLINE(Isolate* isolate() const); |
| 123 | 123 |
| 124 void SetIndexedReference( | 124 void SetIndexedReference( |
| 125 HeapGraphEdge::Type type, int index, HeapEntry* entry); | 125 HeapGraphEdge::Type type, int index, HeapEntry* entry); |
| 126 void SetNamedReference( | 126 void SetNamedReference( |
| 127 HeapGraphEdge::Type type, const char* name, HeapEntry* entry); | 127 HeapGraphEdge::Type type, const char* name, HeapEntry* entry); |
| 128 | 128 |
| 129 void Print( | 129 void Print( |
| 130 const char* prefix, const char* edge_name, int max_depth, int indent); | 130 const char* prefix, const char* edge_name, int max_depth, int indent); |
| 131 | 131 |
| 132 private: | 132 private: |
| 133 INLINE(HeapGraphEdge** children_arr()); | 133 INLINE(std::deque<HeapGraphEdge*>::iterator children_begin()); |
| 134 INLINE(std::deque<HeapGraphEdge*>::iterator children_end()); |
| 134 const char* TypeAsString(); | 135 const char* TypeAsString(); |
| 135 | 136 |
| 136 unsigned type_: 4; | 137 unsigned type_: 4; |
| 137 int children_count_: 28; | 138 int children_count_: 28; |
| 138 int children_index_; | 139 int children_index_; |
| 139 size_t self_size_; | 140 size_t self_size_; |
| 140 HeapSnapshot* snapshot_; | 141 HeapSnapshot* snapshot_; |
| 141 const char* name_; | 142 const char* name_; |
| 142 SnapshotObjectId id_; | 143 SnapshotObjectId id_; |
| 143 // id of allocation stack trace top node | 144 // id of allocation stack trace top node |
| (...skipping 12 matching lines...) Expand all Loading... |
| 156 void Delete(); | 157 void Delete(); |
| 157 | 158 |
| 158 HeapProfiler* profiler() { return profiler_; } | 159 HeapProfiler* profiler() { return profiler_; } |
| 159 size_t RawSnapshotSize() const; | 160 size_t RawSnapshotSize() const; |
| 160 HeapEntry* root() { return &entries_[root_index_]; } | 161 HeapEntry* root() { return &entries_[root_index_]; } |
| 161 HeapEntry* gc_roots() { return &entries_[gc_roots_index_]; } | 162 HeapEntry* gc_roots() { return &entries_[gc_roots_index_]; } |
| 162 HeapEntry* gc_subroot(int index) { | 163 HeapEntry* gc_subroot(int index) { |
| 163 return &entries_[gc_subroot_indexes_[index]]; | 164 return &entries_[gc_subroot_indexes_[index]]; |
| 164 } | 165 } |
| 165 List<HeapEntry>& entries() { return entries_; } | 166 List<HeapEntry>& entries() { return entries_; } |
| 166 List<HeapGraphEdge>& edges() { return edges_; } | 167 std::deque<HeapGraphEdge>& edges() { return edges_; } |
| 167 List<HeapGraphEdge*>& children() { return children_; } | 168 std::deque<HeapGraphEdge*>& children() { return children_; } |
| 168 void RememberLastJSObjectId(); | 169 void RememberLastJSObjectId(); |
| 169 SnapshotObjectId max_snapshot_js_object_id() const { | 170 SnapshotObjectId max_snapshot_js_object_id() const { |
| 170 return max_snapshot_js_object_id_; | 171 return max_snapshot_js_object_id_; |
| 171 } | 172 } |
| 172 | 173 |
| 173 HeapEntry* AddEntry(HeapEntry::Type type, | 174 HeapEntry* AddEntry(HeapEntry::Type type, |
| 174 const char* name, | 175 const char* name, |
| 175 SnapshotObjectId id, | 176 SnapshotObjectId id, |
| 176 size_t size, | 177 size_t size, |
| 177 unsigned trace_node_id); | 178 unsigned trace_node_id); |
| 178 void AddSyntheticRootEntries(); | 179 void AddSyntheticRootEntries(); |
| 179 HeapEntry* GetEntryById(SnapshotObjectId id); | 180 HeapEntry* GetEntryById(SnapshotObjectId id); |
| 180 List<HeapEntry*>* GetSortedEntriesList(); | 181 List<HeapEntry*>* GetSortedEntriesList(); |
| 181 void FillChildren(); | 182 void FillChildren(); |
| 182 | 183 |
| 183 void Print(int max_depth); | 184 void Print(int max_depth); |
| 184 | 185 |
| 185 private: | 186 private: |
| 186 HeapEntry* AddRootEntry(); | 187 HeapEntry* AddRootEntry(); |
| 187 HeapEntry* AddGcRootsEntry(); | 188 HeapEntry* AddGcRootsEntry(); |
| 188 HeapEntry* AddGcSubrootEntry(int tag, SnapshotObjectId id); | 189 HeapEntry* AddGcSubrootEntry(int tag, SnapshotObjectId id); |
| 189 | 190 |
| 190 HeapProfiler* profiler_; | 191 HeapProfiler* profiler_; |
| 191 int root_index_; | 192 int root_index_; |
| 192 int gc_roots_index_; | 193 int gc_roots_index_; |
| 193 int gc_subroot_indexes_[VisitorSynchronization::kNumberOfSyncTags]; | 194 int gc_subroot_indexes_[VisitorSynchronization::kNumberOfSyncTags]; |
| 194 List<HeapEntry> entries_; | 195 List<HeapEntry> entries_; |
| 195 List<HeapGraphEdge> edges_; | 196 std::deque<HeapGraphEdge> edges_; |
| 196 List<HeapGraphEdge*> children_; | 197 std::deque<HeapGraphEdge*> children_; |
| 197 List<HeapEntry*> sorted_entries_; | 198 List<HeapEntry*> sorted_entries_; |
| 198 SnapshotObjectId max_snapshot_js_object_id_; | 199 SnapshotObjectId max_snapshot_js_object_id_; |
| 199 | 200 |
| 200 friend class HeapSnapshotTester; | 201 friend class HeapSnapshotTester; |
| 201 | 202 |
| 202 DISALLOW_COPY_AND_ASSIGN(HeapSnapshot); | 203 DISALLOW_COPY_AND_ASSIGN(HeapSnapshot); |
| 203 }; | 204 }; |
| 204 | 205 |
| 205 | 206 |
| 206 class HeapObjectsMap { | 207 class HeapObjectsMap { |
| (...skipping 415 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 622 friend class HeapSnapshotJSONSerializerIterator; | 623 friend class HeapSnapshotJSONSerializerIterator; |
| 623 | 624 |
| 624 DISALLOW_COPY_AND_ASSIGN(HeapSnapshotJSONSerializer); | 625 DISALLOW_COPY_AND_ASSIGN(HeapSnapshotJSONSerializer); |
| 625 }; | 626 }; |
| 626 | 627 |
| 627 | 628 |
| 628 } // namespace internal | 629 } // namespace internal |
| 629 } // namespace v8 | 630 } // namespace v8 |
| 630 | 631 |
| 631 #endif // V8_PROFILER_HEAP_SNAPSHOT_GENERATOR_H_ | 632 #endif // V8_PROFILER_HEAP_SNAPSHOT_GENERATOR_H_ |
| OLD | NEW |