| Index: src/profile-generator.cc
|
| diff --git a/src/profile-generator.cc b/src/profile-generator.cc
|
| index 69ef082dce09da266bc4300b4781a387f25e854a..02c67f4ea6656d057610a1b549edf01e174fd672 100644
|
| --- a/src/profile-generator.cc
|
| +++ b/src/profile-generator.cc
|
| @@ -3248,7 +3248,6 @@ HeapSnapshot* HeapSnapshotJSONSerializer::CreateFakeSnapshot() {
|
|
|
|
|
| void HeapSnapshotJSONSerializer::SerializeImpl() {
|
| - List<HeapEntry>& nodes = snapshot_->entries();
|
| ASSERT(0 == snapshot_->root()->index());
|
| writer_->AddCharacter('{');
|
| writer_->AddString("\"snapshot\":{");
|
| @@ -3256,11 +3255,11 @@ void HeapSnapshotJSONSerializer::SerializeImpl() {
|
| if (writer_->aborted()) return;
|
| writer_->AddString("},\n");
|
| writer_->AddString("\"nodes\":[");
|
| - SerializeNodes(nodes);
|
| + SerializeNodes();
|
| if (writer_->aborted()) return;
|
| writer_->AddString("],\n");
|
| writer_->AddString("\"edges\":[");
|
| - SerializeEdges(nodes);
|
| + SerializeEdges();
|
| if (writer_->aborted()) return;
|
| writer_->AddString("],\n");
|
| writer_->AddString("\"strings\":[");
|
| @@ -3302,9 +3301,9 @@ static int utoa(unsigned value, const Vector<char>& buffer, int buffer_pos) {
|
|
|
| void HeapSnapshotJSONSerializer::SerializeEdge(HeapGraphEdge* edge,
|
| bool first_edge) {
|
| - // The buffer needs space for 3 ints, 3 commas and \0
|
| + // The buffer needs space for 3 unsigned ints, 3 commas and \0
|
| static const int kBufferSize =
|
| - MaxDecimalDigitsIn<sizeof(int)>::kSigned * 3 + 3 + 1; // NOLINT
|
| + MaxDecimalDigitsIn<sizeof(unsigned)>::kUnsigned * 3 + 3 + 1; // NOLINT
|
| EmbeddedVector<char, kBufferSize> buffer;
|
| int edge_name_or_index = edge->type() == HeapGraphEdge::kElement
|
| || edge->type() == HeapGraphEdge::kHidden
|
| @@ -3324,25 +3323,21 @@ void HeapSnapshotJSONSerializer::SerializeEdge(HeapGraphEdge* edge,
|
| }
|
|
|
|
|
| -void HeapSnapshotJSONSerializer::SerializeEdges(const List<HeapEntry>& nodes) {
|
| - bool first_edge = true;
|
| - for (int i = 0; i < nodes.length(); ++i) {
|
| - HeapEntry* entry = &nodes[i];
|
| - Vector<HeapGraphEdge*> children = entry->children();
|
| - for (int j = 0; j < children.length(); ++j) {
|
| - SerializeEdge(children[j], first_edge);
|
| - first_edge = false;
|
| - if (writer_->aborted()) return;
|
| - }
|
| +void HeapSnapshotJSONSerializer::SerializeEdges() {
|
| + List<HeapGraphEdge*>& edges = snapshot_->children();
|
| + for (int i = 0; i < edges.length(); ++i) {
|
| + ASSERT(i == 0 ||
|
| + edges[i - 1]->from()->index() <= edges[i]->from()->index());
|
| + SerializeEdge(edges[i], i == 0);
|
| + if (writer_->aborted()) return;
|
| }
|
| }
|
|
|
|
|
| -void HeapSnapshotJSONSerializer::SerializeNode(HeapEntry* entry,
|
| - int edges_index) {
|
| - // The buffer needs space for 5 uint32_t, 5 commas, \n and \0
|
| +void HeapSnapshotJSONSerializer::SerializeNode(HeapEntry* entry) {
|
| + // The buffer needs space for 5 unsigned ints, 5 commas, \n and \0
|
| static const int kBufferSize =
|
| - 5 * MaxDecimalDigitsIn<sizeof(uint32_t)>::kUnsigned // NOLINT
|
| + 5 * MaxDecimalDigitsIn<sizeof(unsigned)>::kUnsigned // NOLINT
|
| + 5 + 1 + 1;
|
| EmbeddedVector<char, kBufferSize> buffer;
|
| int buffer_pos = 0;
|
| @@ -3357,19 +3352,17 @@ void HeapSnapshotJSONSerializer::SerializeNode(HeapEntry* entry,
|
| buffer[buffer_pos++] = ',';
|
| buffer_pos = utoa(entry->self_size(), buffer, buffer_pos);
|
| buffer[buffer_pos++] = ',';
|
| - buffer_pos = utoa(edges_index, buffer, buffer_pos);
|
| + buffer_pos = utoa(entry->children_count(), buffer, buffer_pos);
|
| buffer[buffer_pos++] = '\n';
|
| buffer[buffer_pos++] = '\0';
|
| writer_->AddString(buffer.start());
|
| }
|
|
|
|
|
| -void HeapSnapshotJSONSerializer::SerializeNodes(const List<HeapEntry>& nodes) {
|
| - int edges_index = 0;
|
| - for (int i = 0; i < nodes.length(); ++i) {
|
| - HeapEntry* entry = &nodes[i];
|
| - SerializeNode(entry, edges_index);
|
| - edges_index += entry->children().length() * kEdgeFieldsCount;
|
| +void HeapSnapshotJSONSerializer::SerializeNodes() {
|
| + List<HeapEntry>& entries = snapshot_->entries();
|
| + for (int i = 0; i < entries.length(); ++i) {
|
| + SerializeNode(&entries[i]);
|
| if (writer_->aborted()) return;
|
| }
|
| }
|
| @@ -3393,7 +3386,7 @@ void HeapSnapshotJSONSerializer::SerializeSnapshot() {
|
| JSON_S("name") ","
|
| JSON_S("id") ","
|
| JSON_S("self_size") ","
|
| - JSON_S("edges_index")) ","
|
| + JSON_S("edge_count")) ","
|
| JSON_S("node_types") ":" JSON_A(
|
| JSON_A(
|
| JSON_S("hidden") ","
|
|
|