Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(445)

Side by Side Diff: third_party/tcmalloc/chromium/src/deep-heap-profile.cc

Issue 10832290: Dump /proc/<pid>/maps with every heap profile dump. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: added comments. Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « third_party/tcmalloc/chromium/src/deep-heap-profile.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
83 pagemap_fd_ = OpenProcPagemap(); 83 pagemap_fd_ = OpenProcPagemap();
84 84
85 for (int i = 0; i < kHashTableSize; i++) { 85 for (int i = 0; i < kHashTableSize; i++) {
86 for (DeepBucket* deep_bucket = deep_table_[i]; 86 for (DeepBucket* deep_bucket = deep_table_[i];
87 deep_bucket != NULL; 87 deep_bucket != NULL;
88 deep_bucket = deep_bucket->next) { 88 deep_bucket = deep_bucket->next) {
89 deep_bucket->is_logged = false; 89 deep_bucket->is_logged = false;
90 } 90 }
91 } 91 }
92 92
93 // Write maps into a .maps file with using the global buffer. 93 // Write maps into "|filename_prefix|.<pid>.maps" using global buffer.
94 WriteMapsToFile(filename_prefix_, kProfilerBufferSize, profiler_buffer_); 94 WriteMapsToFile(filename_prefix_, 0,
95 kProfilerBufferSize, profiler_buffer_);
95 } 96 }
97 // Write maps into "|filename_prefix|.<pid>.|count|.maps" using global buffer.
98 WriteMapsToFile(filename_prefix_, dump_count_,
99 kProfilerBufferSize, profiler_buffer_);
96 100
97 // Reset committed sizes of buckets. 101 // Reset committed sizes of buckets.
98 ResetCommittedSize(deep_table_); 102 ResetCommittedSize(deep_table_);
99 103
100 // Allocate a list for mmap'ed regions. 104 // Allocate a list for mmap'ed regions.
101 num_mmap_allocations_ = 0; 105 num_mmap_allocations_ = 0;
102 heap_profile_->mmap_address_map_->Iterate(CountMMap, this); 106 heap_profile_->mmap_address_map_->Iterate(CountMMap, this);
103 mmap_list_length_ = 0; 107 mmap_list_length_ = 0;
104 mmap_list_ = reinterpret_cast<MMapListEntry*>(heap_profile_->alloc_( 108 mmap_list_ = reinterpret_cast<MMapListEntry*>(heap_profile_->alloc_(
105 sizeof(MMapListEntry) * num_mmap_allocations_)); 109 sizeof(MMapListEntry) * num_mmap_allocations_));
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after
316 break; 320 break;
317 } 321 }
318 page_address += page_size; 322 page_address += page_size;
319 } 323 }
320 324
321 return committed_size; 325 return committed_size;
322 } 326 }
323 327
324 // static 328 // static
325 void DeepHeapProfile::WriteMapsToFile(const char* filename_prefix, 329 void DeepHeapProfile::WriteMapsToFile(const char* filename_prefix,
330 unsigned count,
326 int buffer_size, 331 int buffer_size,
327 char buffer[]) { 332 char buffer[]) {
328 char filename[100]; 333 char filename[100];
329 snprintf(filename, sizeof(filename), 334 if (count > 0) {
330 "%s.%05d.maps", filename_prefix, static_cast<int>(getpid())); 335 snprintf(filename, sizeof(filename),
336 "%s.%05d.%04d.maps", filename_prefix, static_cast<int>(getpid()),
337 count);
338 } else {
339 snprintf(filename, sizeof(filename),
340 "%s.%05d.maps", filename_prefix, static_cast<int>(getpid()));
341 }
331 342
332 RawFD maps_fd = RawOpenForWriting(filename); 343 RawFD maps_fd = RawOpenForWriting(filename);
333 RAW_DCHECK(maps_fd != kIllegalRawFD, ""); 344 RAW_DCHECK(maps_fd != kIllegalRawFD, "");
334 345
335 int map_length; 346 int map_length;
336 bool wrote_all; 347 bool wrote_all;
337 map_length = tcmalloc::FillProcSelfMaps(buffer, buffer_size, &wrote_all); 348 map_length = tcmalloc::FillProcSelfMaps(buffer, buffer_size, &wrote_all);
338 RAW_DCHECK(wrote_all, ""); 349 RAW_DCHECK(wrote_all, "");
339 RAW_DCHECK(map_length <= buffer_size, ""); 350 RAW_DCHECK(map_length <= buffer_size, "");
340 RawWrite(maps_fd, buffer, map_length); 351 RawWrite(maps_fd, buffer, map_length);
(...skipping 466 matching lines...) Expand 10 before | Expand all | Expand 10 after
807 } 818 }
808 819
809 DeepHeapProfile::~DeepHeapProfile() { 820 DeepHeapProfile::~DeepHeapProfile() {
810 } 821 }
811 822
812 int DeepHeapProfile::FillOrderedProfile(char buffer[], int buffer_size) { 823 int DeepHeapProfile::FillOrderedProfile(char buffer[], int buffer_size) {
813 return heap_profile_->FillOrderedProfile(buffer, buffer_size); 824 return heap_profile_->FillOrderedProfile(buffer, buffer_size);
814 } 825 }
815 826
816 #endif // DEEP_HEAP_PROFILE 827 #endif // DEEP_HEAP_PROFILE
OLDNEW
« no previous file with comments | « third_party/tcmalloc/chromium/src/deep-heap-profile.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698