Chromium Code Reviews| Index: base/trace_event/process_memory_dump.cc |
| diff --git a/base/trace_event/process_memory_dump.cc b/base/trace_event/process_memory_dump.cc |
| index 63d1340e42e3222c3ee99e92a7e676279cffb8a1..2bc2d65669efeff12d53ae1d3f8b79f368933838 100644 |
| --- a/base/trace_event/process_memory_dump.cc |
| +++ b/base/trace_event/process_memory_dump.cc |
| @@ -11,7 +11,8 @@ |
| #include "base/memory/ptr_util.h" |
| #include "base/process/process_metrics.h" |
| #include "base/strings/stringprintf.h" |
| -#include "base/trace_event/heap_profiler_heap_dump_writer.h" |
| +#include "base/trace_event/heap_profiler_allocation_register.h" |
| +#include "base/trace_event/heap_profiler_event_writer.h" |
| #include "base/trace_event/memory_infra_background_whitelist.h" |
| #include "base/trace_event/process_memory_totals.h" |
| #include "base/trace_event/trace_event_argument.h" |
| @@ -239,17 +240,18 @@ MemoryAllocatorDump* ProcessMemoryDump::GetSharedGlobalAllocatorDump( |
| } |
| void ProcessMemoryDump::DumpHeapUsage( |
| - const base::hash_map<base::trace_event::AllocationContext, |
| - base::trace_event::AllocationMetrics>& metrics_by_context, |
| - base::trace_event::TraceEventMemoryOverhead& overhead, |
| + const AllocationRegister& allocation_register, |
| const char* allocator_name) { |
| - if (!metrics_by_context.empty()) { |
| + if (dump_args_.level_of_detail == MemoryDumpLevelOfDetail::DETAILED && |
| + allocation_register.begin() != allocation_register.end()) { |
| DCHECK_EQ(0ul, heap_dumps_.count(allocator_name)); |
| - std::unique_ptr<TracedValue> heap_dump = ExportHeapDump( |
| - metrics_by_context, *session_state()); |
| + std::unique_ptr<TracedValue> heap_dump = |
| + SerializeHeapDump(allocation_register, *session_state()); |
| heap_dumps_[allocator_name] = std::move(heap_dump); |
| } |
| + TraceEventMemoryOverhead overhead; |
| + allocation_register.EstimateTraceMemoryOverhead(&overhead); |
|
ssid
2017/03/16 02:09:20
This part should be outside the if condition which
DmitrySkiba
2017/03/17 04:01:38
This is exactly how it's working now.
|
| std::string base_name = base::StringPrintf("tracing/heap_profiler_%s", |
| allocator_name); |
| overhead.DumpInto(base_name.c_str(), this); |
| @@ -313,13 +315,6 @@ void ProcessMemoryDump::AsValueInto(TracedValue* value) const { |
| value->EndDictionary(); |
| } |
| - if (heap_dumps_.size() > 0) { |
| - value->BeginDictionary("heaps"); |
| - for (const auto& name_and_dump : heap_dumps_) |
| - value->SetValueWithCopiedName(name_and_dump.first, *name_and_dump.second); |
| - value->EndDictionary(); // "heaps" |
| - } |
| - |
| value->BeginArray("allocators_graph"); |
| for (const MemoryAllocatorDumpEdge& edge : allocator_dumps_edges_) { |
| value->BeginDictionary(); |