| Index: third_party/tcmalloc/chromium/src/heap-profile-table.cc
|
| diff --git a/third_party/tcmalloc/chromium/src/heap-profile-table.cc b/third_party/tcmalloc/chromium/src/heap-profile-table.cc
|
| index 1ef18586e4d050e6e0d1ded2b5ca2df256c058be..696f41e0b9cedbbaf36f43fd71e36605eb0e8117 100644
|
| --- a/third_party/tcmalloc/chromium/src/heap-profile-table.cc
|
| +++ b/third_party/tcmalloc/chromium/src/heap-profile-table.cc
|
| @@ -123,7 +123,12 @@ static bool ByAllocatedSpace(HeapProfileTable::Stats* a,
|
| //----------------------------------------------------------------------
|
|
|
| HeapProfileTable::HeapProfileTable(Allocator alloc, DeAllocator dealloc)
|
| - : alloc_(alloc), dealloc_(dealloc) {
|
| + : alloc_(alloc),
|
| + dealloc_(dealloc),
|
| + num_alloc_buckets_(0),
|
| + mmap_table_(NULL),
|
| + num_available_mmap_buckets_(0),
|
| + mmap_address_map_(NULL) {
|
| // Initialize the overall profile stats.
|
| memset(&total_, 0, sizeof(total_));
|
|
|
| @@ -131,16 +136,10 @@ HeapProfileTable::HeapProfileTable(Allocator alloc, DeAllocator dealloc)
|
| const int alloc_table_bytes = kHashTableSize * sizeof(*alloc_table_);
|
| alloc_table_ = reinterpret_cast<Bucket**>(alloc_(alloc_table_bytes));
|
| memset(alloc_table_, 0, alloc_table_bytes);
|
| - num_alloc_buckets_ = 0;
|
| -
|
| - // Initialize the mmap table.
|
| - mmap_table_ = NULL;
|
| - num_available_mmap_buckets_ = 0;
|
|
|
| // Make malloc and mmap allocation maps.
|
| alloc_address_map_ =
|
| new(alloc_(sizeof(AllocationMap))) AllocationMap(alloc_, dealloc_);
|
| - mmap_address_map_ = NULL;
|
| }
|
|
|
| HeapProfileTable::~HeapProfileTable() {
|
| @@ -355,7 +354,8 @@ HeapProfileTable::MakeSortedBucketList() const {
|
| return list;
|
| }
|
|
|
| -void HeapProfileTable::RefreshMMapData() {
|
| +void HeapProfileTable::RefreshMMapData(Allocator mmap_alloc,
|
| + DeAllocator mmap_dealloc) {
|
| // Make the table
|
| static const int mmap_table_bytes = kHashTableSize * sizeof(*mmap_table_);
|
| if (mmap_table_ == NULL) {
|
| @@ -365,8 +365,8 @@ void HeapProfileTable::RefreshMMapData() {
|
| num_available_mmap_buckets_ = 0;
|
|
|
| ClearMMapData();
|
| - mmap_address_map_ =
|
| - new(alloc_(sizeof(AllocationMap))) AllocationMap(alloc_, dealloc_);
|
| + mmap_address_map_ = new(alloc_(sizeof(AllocationMap)))
|
| + AllocationMap(mmap_alloc, mmap_dealloc);
|
|
|
| MemoryRegionMap::LockHolder l;
|
| for (MemoryRegionMap::RegionIterator r =
|
| @@ -388,12 +388,12 @@ void HeapProfileTable::RefreshMMapData() {
|
| }
|
|
|
| void HeapProfileTable::ClearMMapData() {
|
| - if (mmap_address_map_ != NULL) {
|
| - mmap_address_map_->Iterate(ZeroBucketCountsIterator, this);
|
| - mmap_address_map_->~AllocationMap();
|
| - dealloc_(mmap_address_map_);
|
| - mmap_address_map_ = NULL;
|
| - }
|
| + if (mmap_address_map_ == NULL) return;
|
| +
|
| + mmap_address_map_->Iterate(ZeroBucketCountsIterator, this);
|
| + mmap_address_map_->~AllocationMap();
|
| + dealloc_(mmap_address_map_);
|
| + mmap_address_map_ = NULL;
|
| }
|
|
|
| void HeapProfileTable::IterateOrderedAllocContexts(
|
| @@ -505,22 +505,21 @@ bool HeapProfileTable::WriteProfile(const char* file_name,
|
| AllocationMap* allocations) {
|
| RAW_VLOG(1, "Dumping non-live heap profile to %s", file_name);
|
| RawFD fd = RawOpenForWriting(file_name);
|
| - if (fd != kIllegalRawFD) {
|
| - RawWrite(fd, kProfileHeader, strlen(kProfileHeader));
|
| - char buf[512];
|
| - int len = UnparseBucket(total, buf, 0, sizeof(buf), " heapprofile",
|
| - NULL);
|
| - RawWrite(fd, buf, len);
|
| - const DumpArgs args(fd, NULL);
|
| - allocations->Iterate<const DumpArgs&>(DumpNonLiveIterator, args);
|
| - RawWrite(fd, kProcSelfMapsHeader, strlen(kProcSelfMapsHeader));
|
| - DumpProcSelfMaps(fd);
|
| - RawClose(fd);
|
| - return true;
|
| - } else {
|
| + if (fd == kIllegalRawFD) {
|
| RAW_LOG(ERROR, "Failed dumping filtered heap profile to %s", file_name);
|
| return false;
|
| }
|
| + RawWrite(fd, kProfileHeader, strlen(kProfileHeader));
|
| + char buf[512];
|
| + int len = UnparseBucket(total, buf, 0, sizeof(buf), " heapprofile",
|
| + NULL);
|
| + RawWrite(fd, buf, len);
|
| + const DumpArgs args(fd, NULL);
|
| + allocations->Iterate<const DumpArgs&>(DumpNonLiveIterator, args);
|
| + RawWrite(fd, kProcSelfMapsHeader, strlen(kProcSelfMapsHeader));
|
| + DumpProcSelfMaps(fd);
|
| + RawClose(fd);
|
| + return true;
|
| }
|
|
|
| void HeapProfileTable::CleanupOldProfiles(const char* prefix) {
|
|
|