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 593 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
604 PrintF("Last %d objects were skipped\n", | 604 PrintF("Last %d objects were skipped\n", |
605 heap_objects.length() - 1 - last_printed_object); | 605 heap_objects.length() - 1 - last_printed_object); |
606 } | 606 } |
607 PrintF("End HeapObjectsMap::FindUntrackedObjects. %d entries in map.\n\n", | 607 PrintF("End HeapObjectsMap::FindUntrackedObjects. %d entries in map.\n\n", |
608 entries_map_.occupancy()); | 608 entries_map_.occupancy()); |
609 } | 609 } |
610 return untracked; | 610 return untracked; |
611 } | 611 } |
612 | 612 |
613 | 613 |
614 SnapshotObjectId HeapObjectsMap::PushHeapObjectsStats(OutputStream* stream) { | 614 SnapshotObjectId HeapObjectsMap::PushHeapObjectsStats(OutputStream* stream, |
| 615 int64_t* timestamp_us) { |
615 UpdateHeapObjectsMap(); | 616 UpdateHeapObjectsMap(); |
616 time_intervals_.Add(TimeInterval(next_id_)); | 617 time_intervals_.Add(TimeInterval(next_id_)); |
617 int prefered_chunk_size = stream->GetChunkSize(); | 618 int prefered_chunk_size = stream->GetChunkSize(); |
618 List<v8::HeapStatsUpdate> stats_buffer; | 619 List<v8::HeapStatsUpdate> stats_buffer; |
619 DCHECK(!entries_.is_empty()); | 620 DCHECK(!entries_.is_empty()); |
620 EntryInfo* entry_info = &entries_.first(); | 621 EntryInfo* entry_info = &entries_.first(); |
621 EntryInfo* end_entry_info = &entries_.last() + 1; | 622 EntryInfo* end_entry_info = &entries_.last() + 1; |
622 for (int time_interval_index = 0; | 623 for (int time_interval_index = 0; |
623 time_interval_index < time_intervals_.length(); | 624 time_interval_index < time_intervals_.length(); |
624 ++time_interval_index) { | 625 ++time_interval_index) { |
(...skipping 21 matching lines...) Expand all Loading... |
646 } | 647 } |
647 } | 648 } |
648 } | 649 } |
649 DCHECK(entry_info == end_entry_info); | 650 DCHECK(entry_info == end_entry_info); |
650 if (!stats_buffer.is_empty()) { | 651 if (!stats_buffer.is_empty()) { |
651 OutputStream::WriteResult result = stream->WriteHeapStatsChunk( | 652 OutputStream::WriteResult result = stream->WriteHeapStatsChunk( |
652 &stats_buffer.first(), stats_buffer.length()); | 653 &stats_buffer.first(), stats_buffer.length()); |
653 if (result == OutputStream::kAbort) return last_assigned_id(); | 654 if (result == OutputStream::kAbort) return last_assigned_id(); |
654 } | 655 } |
655 stream->EndOfStream(); | 656 stream->EndOfStream(); |
| 657 if (timestamp_us) { |
| 658 *timestamp_us = (time_intervals_.last().timestamp - |
| 659 time_intervals_[0].timestamp).InMicroseconds(); |
| 660 } |
656 return last_assigned_id(); | 661 return last_assigned_id(); |
657 } | 662 } |
658 | 663 |
659 | 664 |
660 void HeapObjectsMap::RemoveDeadEntries() { | 665 void HeapObjectsMap::RemoveDeadEntries() { |
661 DCHECK(entries_.length() > 0 && | 666 DCHECK(entries_.length() > 0 && |
662 entries_.at(0).id == 0 && | 667 entries_.at(0).id == 0 && |
663 entries_.at(0).addr == NULL); | 668 entries_.at(0).addr == NULL); |
664 int first_free_entry = 1; | 669 int first_free_entry = 1; |
665 for (int i = 1; i < entries_.length(); ++i) { | 670 for (int i = 1; i < entries_.length(); ++i) { |
(...skipping 2486 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3152 writer_->AddString("\"<dummy>\""); | 3157 writer_->AddString("\"<dummy>\""); |
3153 for (int i = 1; i < sorted_strings.length(); ++i) { | 3158 for (int i = 1; i < sorted_strings.length(); ++i) { |
3154 writer_->AddCharacter(','); | 3159 writer_->AddCharacter(','); |
3155 SerializeString(sorted_strings[i]); | 3160 SerializeString(sorted_strings[i]); |
3156 if (writer_->aborted()) return; | 3161 if (writer_->aborted()) return; |
3157 } | 3162 } |
3158 } | 3163 } |
3159 | 3164 |
3160 | 3165 |
3161 } } // namespace v8::internal | 3166 } } // namespace v8::internal |
OLD | NEW |