| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium 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 // --- | 5 // --- |
| 6 // Author: Sainbayar Sukhbaatar | 6 // Author: Sainbayar Sukhbaatar |
| 7 // Dai Mikurube | 7 // Dai Mikurube |
| 8 // | 8 // |
| 9 | 9 |
| 10 #include "deep-heap-profile.h" | 10 #include "deep-heap-profile.h" |
| (...skipping 646 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 657 memory_residence_info_getter, first_address, last_address); | 657 memory_residence_info_getter, first_address, last_address); |
| 658 | 658 |
| 659 // TODO(dmikurube): Stop double-counting pagemap. | 659 // TODO(dmikurube): Stop double-counting pagemap. |
| 660 // Counts unhooked memory regions in /proc/<pid>/maps. | 660 // Counts unhooked memory regions in /proc/<pid>/maps. |
| 661 if (MemoryRegionMap::IsRecordingLocked()) { | 661 if (MemoryRegionMap::IsRecordingLocked()) { |
| 662 // It assumes that every mmap'ed region is included in one maps line. | 662 // It assumes that every mmap'ed region is included in one maps line. |
| 663 uint64 cursor = first_address; | 663 uint64 cursor = first_address; |
| 664 bool first = true; | 664 bool first = true; |
| 665 | 665 |
| 666 do { | 666 do { |
| 667 Bucket* bucket = NULL; | 667 if (!first) { |
| 668 cursor = mmap_iter->end_addr; |
| 669 ++mmap_iter; |
| 670 // Don't break here even if mmap_iter == EndRegionLocked(). |
| 671 } |
| 672 first = false; |
| 673 |
| 668 DeepBucket* deep_bucket = NULL; | 674 DeepBucket* deep_bucket = NULL; |
| 669 if (!first) { | 675 if (mmap_iter != MemoryRegionMap::EndRegionLocked()) { |
| 670 size_t committed = deep_profile->memory_residence_info_getter_-> | 676 size_t committed = deep_profile->memory_residence_info_getter_-> |
| 671 CommittedSize(mmap_iter->start_addr, mmap_iter->end_addr - 1); | 677 CommittedSize(mmap_iter->start_addr, mmap_iter->end_addr - 1); |
| 672 // TODO(dmikurube): Store a reference to the bucket in region. | 678 // TODO(dmikurube): Store a reference to the bucket in region. |
| 673 Bucket* bucket = MemoryRegionMap::GetBucket( | 679 Bucket* bucket = MemoryRegionMap::GetBucket( |
| 674 mmap_iter->call_stack_depth, mmap_iter->call_stack); | 680 mmap_iter->call_stack_depth, mmap_iter->call_stack); |
| 675 DeepBucket* deep_bucket = NULL; | |
| 676 if (bucket != NULL) { | 681 if (bucket != NULL) { |
| 677 deep_bucket = deep_profile->deep_table_.Lookup( | 682 deep_bucket = deep_profile->deep_table_.Lookup( |
| 678 bucket, | 683 bucket, |
| 679 #if defined(TYPE_PROFILING) | 684 #if defined(TYPE_PROFILING) |
| 680 NULL, // No type information for mmap'ed memory regions. | 685 NULL, // No type information for mmap'ed memory regions. |
| 681 #endif | 686 #endif |
| 682 /* is_mmap */ true); | 687 /* is_mmap */ true); |
| 683 } | 688 } |
| 684 | 689 |
| 685 if (deep_bucket != NULL) | 690 if (deep_bucket != NULL) |
| 686 deep_bucket->committed_size += committed; | 691 deep_bucket->committed_size += committed; |
| 687 profiled_mmap_.AddToVirtualBytes( | 692 profiled_mmap_.AddToVirtualBytes( |
| 688 mmap_iter->end_addr - mmap_iter->start_addr); | 693 mmap_iter->end_addr - mmap_iter->start_addr); |
| 689 profiled_mmap_.AddToCommittedBytes(committed); | 694 profiled_mmap_.AddToCommittedBytes(committed); |
| 690 | |
| 691 cursor = mmap_iter->end_addr; | |
| 692 ++mmap_iter; | |
| 693 // Don't break here even if mmap_iter == EndRegionLocked(). | |
| 694 } | 695 } |
| 695 first = false; | |
| 696 | 696 |
| 697 uint64 last_address_of_unhooked; | 697 uint64 last_address_of_unhooked; |
| 698 // If the next mmap entry is away from the current maps line. | 698 // If the next mmap entry is away from the current maps line. |
| 699 if (mmap_iter == MemoryRegionMap::EndRegionLocked() || | 699 if (mmap_iter == MemoryRegionMap::EndRegionLocked() || |
| 700 mmap_iter->start_addr > last_address) { | 700 mmap_iter->start_addr > last_address) { |
| 701 last_address_of_unhooked = last_address; | 701 last_address_of_unhooked = last_address; |
| 702 } else { | 702 } else { |
| 703 last_address_of_unhooked = mmap_iter->start_addr - 1; | 703 last_address_of_unhooked = mmap_iter->start_addr - 1; |
| 704 } | 704 } |
| 705 | 705 |
| (...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 884 } | 884 } |
| 885 | 885 |
| 886 DeepHeapProfile::~DeepHeapProfile() { | 886 DeepHeapProfile::~DeepHeapProfile() { |
| 887 } | 887 } |
| 888 | 888 |
| 889 int DeepHeapProfile::FillOrderedProfile(char raw_buffer[], int buffer_size) { | 889 int DeepHeapProfile::FillOrderedProfile(char raw_buffer[], int buffer_size) { |
| 890 return heap_profile_->FillOrderedProfile(raw_buffer, buffer_size); | 890 return heap_profile_->FillOrderedProfile(raw_buffer, buffer_size); |
| 891 } | 891 } |
| 892 | 892 |
| 893 #endif // DEEP_HEAP_PROFILE | 893 #endif // DEEP_HEAP_PROFILE |
| OLD | NEW |