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 #include "src/v8.h" | 5 #include "src/v8.h" |
6 | 6 |
7 #include "src/heap-snapshot-generator-inl.h" | 7 #include "src/heap-snapshot-generator-inl.h" |
8 | 8 |
9 #include "src/allocation-tracker.h" | 9 #include "src/allocation-tracker.h" |
10 #include "src/code-stubs.h" | 10 #include "src/code-stubs.h" |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
105 HeapGraphEdge& edge = *ch[i]; | 105 HeapGraphEdge& edge = *ch[i]; |
106 const char* edge_prefix = ""; | 106 const char* edge_prefix = ""; |
107 EmbeddedVector<char, 64> index; | 107 EmbeddedVector<char, 64> index; |
108 const char* edge_name = index.start(); | 108 const char* edge_name = index.start(); |
109 switch (edge.type()) { | 109 switch (edge.type()) { |
110 case HeapGraphEdge::kContextVariable: | 110 case HeapGraphEdge::kContextVariable: |
111 edge_prefix = "#"; | 111 edge_prefix = "#"; |
112 edge_name = edge.name(); | 112 edge_name = edge.name(); |
113 break; | 113 break; |
114 case HeapGraphEdge::kElement: | 114 case HeapGraphEdge::kElement: |
115 OS::SNPrintF(index, "%d", edge.index()); | 115 SNPrintF(index, "%d", edge.index()); |
116 break; | 116 break; |
117 case HeapGraphEdge::kInternal: | 117 case HeapGraphEdge::kInternal: |
118 edge_prefix = "$"; | 118 edge_prefix = "$"; |
119 edge_name = edge.name(); | 119 edge_name = edge.name(); |
120 break; | 120 break; |
121 case HeapGraphEdge::kProperty: | 121 case HeapGraphEdge::kProperty: |
122 edge_name = edge.name(); | 122 edge_name = edge.name(); |
123 break; | 123 break; |
124 case HeapGraphEdge::kHidden: | 124 case HeapGraphEdge::kHidden: |
125 edge_prefix = "$"; | 125 edge_prefix = "$"; |
126 OS::SNPrintF(index, "%d", edge.index()); | 126 SNPrintF(index, "%d", edge.index()); |
127 break; | 127 break; |
128 case HeapGraphEdge::kShortcut: | 128 case HeapGraphEdge::kShortcut: |
129 edge_prefix = "^"; | 129 edge_prefix = "^"; |
130 edge_name = edge.name(); | 130 edge_name = edge.name(); |
131 break; | 131 break; |
132 case HeapGraphEdge::kWeak: | 132 case HeapGraphEdge::kWeak: |
133 edge_prefix = "w"; | 133 edge_prefix = "w"; |
134 edge_name = edge.name(); | 134 edge_name = edge.name(); |
135 break; | 135 break; |
136 default: | 136 default: |
137 OS::SNPrintF(index, "!!! unknown edge type: %d ", edge.type()); | 137 SNPrintF(index, "!!! unknown edge type: %d ", edge.type()); |
138 } | 138 } |
139 edge.to()->Print(edge_prefix, edge_name, max_depth, indent + 2); | 139 edge.to()->Print(edge_prefix, edge_name, max_depth, indent + 2); |
140 } | 140 } |
141 } | 141 } |
142 | 142 |
143 | 143 |
144 const char* HeapEntry::TypeAsString() { | 144 const char* HeapEntry::TypeAsString() { |
145 switch (type()) { | 145 switch (type()) { |
146 case kHidden: return "/hidden/"; | 146 case kHidden: return "/hidden/"; |
147 case kObject: return "/object/"; | 147 case kObject: return "/object/"; |
(...skipping 2558 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2706 stream_->EndOfStream(); | 2706 stream_->EndOfStream(); |
2707 } | 2707 } |
2708 | 2708 |
2709 private: | 2709 private: |
2710 template<typename T> | 2710 template<typename T> |
2711 void AddNumberImpl(T n, const char* format) { | 2711 void AddNumberImpl(T n, const char* format) { |
2712 // Buffer for the longest value plus trailing \0 | 2712 // Buffer for the longest value plus trailing \0 |
2713 static const int kMaxNumberSize = | 2713 static const int kMaxNumberSize = |
2714 MaxDecimalDigitsIn<sizeof(T)>::kUnsigned + 1; | 2714 MaxDecimalDigitsIn<sizeof(T)>::kUnsigned + 1; |
2715 if (chunk_size_ - chunk_pos_ >= kMaxNumberSize) { | 2715 if (chunk_size_ - chunk_pos_ >= kMaxNumberSize) { |
2716 int result = OS::SNPrintF( | 2716 int result = SNPrintF( |
2717 chunk_.SubVector(chunk_pos_, chunk_size_), format, n); | 2717 chunk_.SubVector(chunk_pos_, chunk_size_), format, n); |
2718 ASSERT(result != -1); | 2718 ASSERT(result != -1); |
2719 chunk_pos_ += result; | 2719 chunk_pos_ += result; |
2720 MaybeWriteChunk(); | 2720 MaybeWriteChunk(); |
2721 } else { | 2721 } else { |
2722 EmbeddedVector<char, kMaxNumberSize> buffer; | 2722 EmbeddedVector<char, kMaxNumberSize> buffer; |
2723 int result = OS::SNPrintF(buffer, format, n); | 2723 int result = SNPrintF(buffer, format, n); |
2724 USE(result); | 2724 USE(result); |
2725 ASSERT(result != -1); | 2725 ASSERT(result != -1); |
2726 AddString(buffer.start()); | 2726 AddString(buffer.start()); |
2727 } | 2727 } |
2728 } | 2728 } |
2729 void MaybeWriteChunk() { | 2729 void MaybeWriteChunk() { |
2730 ASSERT(chunk_pos_ <= chunk_size_); | 2730 ASSERT(chunk_pos_ <= chunk_size_); |
2731 if (chunk_pos_ == chunk_size_) { | 2731 if (chunk_pos_ == chunk_size_) { |
2732 WriteChunk(); | 2732 WriteChunk(); |
2733 } | 2733 } |
(...skipping 437 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3171 writer_->AddString("\"<dummy>\""); | 3171 writer_->AddString("\"<dummy>\""); |
3172 for (int i = 1; i < sorted_strings.length(); ++i) { | 3172 for (int i = 1; i < sorted_strings.length(); ++i) { |
3173 writer_->AddCharacter(','); | 3173 writer_->AddCharacter(','); |
3174 SerializeString(sorted_strings[i]); | 3174 SerializeString(sorted_strings[i]); |
3175 if (writer_->aborted()) return; | 3175 if (writer_->aborted()) return; |
3176 } | 3176 } |
3177 } | 3177 } |
3178 | 3178 |
3179 | 3179 |
3180 } } // namespace v8::internal | 3180 } } // namespace v8::internal |
OLD | NEW |