Chromium Code Reviews| Index: base/trace_event/memory_dump_manager.cc |
| diff --git a/base/trace_event/memory_dump_manager.cc b/base/trace_event/memory_dump_manager.cc |
| index 45d448425e9afbf7112e9575aefa6f2a5b2a32bc..82a12e15216b142a6d038a9d668d09f98cb89e75 100644 |
| --- a/base/trace_event/memory_dump_manager.cc |
| +++ b/base/trace_event/memory_dump_manager.cc |
| @@ -719,6 +719,20 @@ bool MemoryDumpManager::PollFastMemoryTotal(uint64_t* memory_total) { |
| } |
| // static |
| +uint32_t MemoryDumpManager::SumSizesInKbForPrefix( |
| + const std::string& prefix, |
| + const ProcessMemoryDump* pmd) { |
| + uint64_t sum = 0; |
| + for (const auto& kv : pmd->allocator_dumps()) { |
| + if (kv.first.compare(0, prefix.length(), prefix) == 0) { |
|
Primiano Tucci (use gerrit)
2017/03/22 17:19:52
as we discussed offline let's use StartsWith in st
hjd
2017/03/22 19:24:20
Done.
|
| + sum += kv.second->GetSize(); |
| + } |
| + } |
| + // Convert bytes to kilobytes. |
|
Primiano Tucci (use gerrit)
2017/03/22 17:19:52
this comment should be unnecessary given the name
hjd
2017/03/22 19:24:20
Done.
|
| + return sum / 1024; |
| +} |
| + |
| +// static |
| void MemoryDumpManager::FinalizeDumpAndAddToTrace( |
| std::unique_ptr<ProcessMemoryDumpAsyncState> pmd_async_state) { |
| HEAP_PROFILER_SCOPED_IGNORE; |
| @@ -737,6 +751,26 @@ void MemoryDumpManager::FinalizeDumpAndAddToTrace( |
| "MemoryDumpManager::FinalizeDumpAndAddToTrace", |
| TRACE_ID_MANGLE(dump_guid), TRACE_EVENT_FLAG_FLOW_IN); |
| + // Fill results struct. |
|
Primiano Tucci (use gerrit)
2017/03/22 17:19:52
ditto about todo + bug
hjd
2017/03/22 19:24:20
Done.
|
| + MemoryDumpCallbackResult result; |
| + for (const auto& kv : pmd_async_state->process_dumps) { |
|
Primiano Tucci (use gerrit)
2017/03/22 17:19:52
since you have the same loop below, could you make
hjd
2017/03/22 19:24:20
not really, just seemed easier while I was debuggi
|
| + ProcessMemoryDump* process_memory_dump = kv.second.get(); |
| + if (kv.first == kNullProcessId) { |
| + result.chrome_dump.v8_total_kb = |
| + SumSizesInKbForPrefix("v8/", process_memory_dump); |
| + result.chrome_dump.malloc_total_kb = |
| + SumSizesInKbForPrefix("malloc/", process_memory_dump); |
|
Primiano Tucci (use gerrit)
2017/03/22 17:19:52
hmm I know that we discussed this offline but now
hjd
2017/03/22 19:24:20
Done.
|
| + // partition_alloc reports sizes for both allocated_objects and |
| + // partitions. The memory allocated_objects uses is a subset of |
| + // the partitions memory so to avoid double counting we only |
| + // count partitions memory. |
| + result.chrome_dump.partition_alloc_total_kb = SumSizesInKbForPrefix( |
| + "partition_alloc/partitions", process_memory_dump); |
| + result.chrome_dump.blink_gc_total_kb = |
| + SumSizesInKbForPrefix("blink_gc/", process_memory_dump); |
| + } |
| + } |
| + |
| for (const auto& kv : pmd_async_state->process_dumps) { |
| ProcessId pid = kv.first; // kNullProcessId for the current process. |
| ProcessMemoryDump* process_memory_dump = kv.second.get(); |