Index: src/profiler/heap-snapshot-generator.cc |
diff --git a/src/profiler/heap-snapshot-generator.cc b/src/profiler/heap-snapshot-generator.cc |
index 69ed5e6f293163f577a43df86ff4194fb113ea99..00809bed5153d6a2b6b096b008907b40d211a74f 100644 |
--- a/src/profiler/heap-snapshot-generator.cc |
+++ b/src/profiler/heap-snapshot-generator.cc |
@@ -2612,102 +2612,6 @@ bool HeapSnapshotGenerator::FillReferences() { |
} |
-template<int bytes> struct MaxDecimalDigitsIn; |
-template<> struct MaxDecimalDigitsIn<4> { |
- static const int kSigned = 11; |
- static const int kUnsigned = 10; |
-}; |
-template<> struct MaxDecimalDigitsIn<8> { |
- static const int kSigned = 20; |
- static const int kUnsigned = 20; |
-}; |
- |
- |
-class OutputStreamWriter { |
- public: |
- explicit OutputStreamWriter(v8::OutputStream* stream) |
- : stream_(stream), |
- chunk_size_(stream->GetChunkSize()), |
- chunk_(chunk_size_), |
- chunk_pos_(0), |
- aborted_(false) { |
- DCHECK(chunk_size_ > 0); |
- } |
- bool aborted() { return aborted_; } |
- void AddCharacter(char c) { |
- DCHECK(c != '\0'); |
- DCHECK(chunk_pos_ < chunk_size_); |
- chunk_[chunk_pos_++] = c; |
- MaybeWriteChunk(); |
- } |
- void AddString(const char* s) { |
- AddSubstring(s, StrLength(s)); |
- } |
- void AddSubstring(const char* s, int n) { |
- if (n <= 0) return; |
- DCHECK(static_cast<size_t>(n) <= strlen(s)); |
- const char* s_end = s + n; |
- while (s < s_end) { |
- int s_chunk_size = |
- Min(chunk_size_ - chunk_pos_, static_cast<int>(s_end - s)); |
- DCHECK(s_chunk_size > 0); |
- MemCopy(chunk_.start() + chunk_pos_, s, s_chunk_size); |
- s += s_chunk_size; |
- chunk_pos_ += s_chunk_size; |
- MaybeWriteChunk(); |
- } |
- } |
- void AddNumber(unsigned n) { AddNumberImpl<unsigned>(n, "%u"); } |
- void Finalize() { |
- if (aborted_) return; |
- DCHECK(chunk_pos_ < chunk_size_); |
- if (chunk_pos_ != 0) { |
- WriteChunk(); |
- } |
- stream_->EndOfStream(); |
- } |
- |
- private: |
- template<typename T> |
- void AddNumberImpl(T n, const char* format) { |
- // Buffer for the longest value plus trailing \0 |
- static const int kMaxNumberSize = |
- MaxDecimalDigitsIn<sizeof(T)>::kUnsigned + 1; |
- if (chunk_size_ - chunk_pos_ >= kMaxNumberSize) { |
- int result = SNPrintF( |
- chunk_.SubVector(chunk_pos_, chunk_size_), format, n); |
- DCHECK(result != -1); |
- chunk_pos_ += result; |
- MaybeWriteChunk(); |
- } else { |
- EmbeddedVector<char, kMaxNumberSize> buffer; |
- int result = SNPrintF(buffer, format, n); |
- USE(result); |
- DCHECK(result != -1); |
- AddString(buffer.start()); |
- } |
- } |
- void MaybeWriteChunk() { |
- DCHECK(chunk_pos_ <= chunk_size_); |
- if (chunk_pos_ == chunk_size_) { |
- WriteChunk(); |
- } |
- } |
- void WriteChunk() { |
- if (aborted_) return; |
- if (stream_->WriteAsciiChunk(chunk_.start(), chunk_pos_) == |
- v8::OutputStream::kAbort) aborted_ = true; |
- chunk_pos_ = 0; |
- } |
- |
- v8::OutputStream* stream_; |
- int chunk_size_; |
- ScopedVector<char> chunk_; |
- int chunk_pos_; |
- bool aborted_; |
-}; |
- |
- |
// type, name|index, to_node. |
const int HeapSnapshotJSONSerializer::kEdgeFieldsCount = 3; |
// type, name, id, self_size, edge_count, trace_node_id. |