| Index: third_party/tcmalloc/chromium/src/deep-heap-profile.cc
|
| diff --git a/third_party/tcmalloc/chromium/src/deep-heap-profile.cc b/third_party/tcmalloc/chromium/src/deep-heap-profile.cc
|
| index 173b244c7a2c56576fce0814b376cbc0aab58667..748e58c885b9fed598395f9fbe96ee3ff6c0e5c2 100644
|
| --- a/third_party/tcmalloc/chromium/src/deep-heap-profile.cc
|
| +++ b/third_party/tcmalloc/chromium/src/deep-heap-profile.cc
|
| @@ -704,6 +704,10 @@ void DeepHeapProfile::GlobalStats::SnapshotMaps(
|
| }
|
|
|
| if (last_address_of_unhooked + 1 > cursor) {
|
| + RAW_CHECK(cursor >= first_address,
|
| + "Wrong calculation for unhooked");
|
| + RAW_CHECK(last_address_of_unhooked <= last_address,
|
| + "Wrong calculation for unhooked");
|
| uint64 committed_size = unhooked_[type].Record(
|
| memory_residence_info_getter,
|
| cursor,
|
| @@ -748,6 +752,37 @@ void DeepHeapProfile::GlobalStats::SnapshotMaps(
|
| mmap_iter->end_addr - 1 <= last_address);
|
| }
|
| }
|
| +
|
| + // TODO(dmikurube): Investigate and fix http://crbug.com/189114.
|
| + //
|
| + // The total committed memory usage in all_ (from /proc/<pid>/maps) is
|
| + // sometimes smaller than the sum of the committed mmap'ed addresses and
|
| + // unhooked regions. Within our observation, the difference was only 4KB
|
| + // in committed usage, zero in reserved virtual addresses
|
| + //
|
| + // A guess is that an uncommitted (but reserved) page may become committed
|
| + // during counting memory usage in the loop above.
|
| + //
|
| + // The difference is accounted as "ABSENT" to investigate such cases.
|
| +
|
| + RegionStats all_total;
|
| + RegionStats unhooked_total;
|
| + for (int i = 0; i < NUMBER_OF_MAPS_REGION_TYPES; ++i) {
|
| + all_total.AddAnotherRegionStat(all_[i]);
|
| + unhooked_total.AddAnotherRegionStat(unhooked_[i]);
|
| + }
|
| +
|
| + size_t absent_virtual = profiled_mmap_.virtual_bytes() +
|
| + unhooked_total.virtual_bytes() -
|
| + all_total.virtual_bytes();
|
| + if (absent_virtual > 0)
|
| + all_[ABSENT].AddToVirtualBytes(absent_virtual);
|
| +
|
| + size_t absent_committed = profiled_mmap_.committed_bytes() +
|
| + unhooked_total.committed_bytes() -
|
| + all_total.committed_bytes();
|
| + if (absent_committed > 0)
|
| + all_[ABSENT].AddToCommittedBytes(absent_committed);
|
| }
|
|
|
| void DeepHeapProfile::GlobalStats::SnapshotAllocations(
|
| @@ -786,6 +821,7 @@ void DeepHeapProfile::GlobalStats::Unparse(TextBuffer* buffer) {
|
| buffer->AppendString("\n", 0);
|
|
|
| all_total.Unparse("total", buffer);
|
| + all_[ABSENT].Unparse("absent", buffer);
|
| all_[FILE_EXEC].Unparse("file-exec", buffer);
|
| all_[FILE_NONEXEC].Unparse("file-nonexec", buffer);
|
| all_[ANONYMOUS].Unparse("anonymous", buffer);
|
|
|