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 008b22a2d30be84f4e79db9b2c20de715c7c95ce..4a0d1c2e576f337c6ca7204aad8ae38549978785 100644 |
| --- a/base/trace_event/memory_dump_manager.cc |
| +++ b/base/trace_event/memory_dump_manager.cc |
| @@ -29,9 +29,7 @@ |
| #include "base/trace_event/heap_profiler.h" |
| #include "base/trace_event/heap_profiler_allocation_context_tracker.h" |
| #include "base/trace_event/heap_profiler_event_filter.h" |
| -#include "base/trace_event/heap_profiler_serialization_state.h" |
| -#include "base/trace_event/heap_profiler_stack_frame_deduplicator.h" |
| -#include "base/trace_event/heap_profiler_type_name_deduplicator.h" |
| +#include "base/trace_event/heap_profiler_event_writer.h" |
| #include "base/trace_event/malloc_dump_provider.h" |
| #include "base/trace_event/memory_dump_provider.h" |
| #include "base/trace_event/memory_dump_scheduler.h" |
| @@ -83,37 +81,6 @@ void FillOsDumpFromProcessMemoryDump( |
| } |
| } |
| -// Proxy class which wraps a ConvertableToTraceFormat owned by the |
| -// |heap_profiler_serialization_state| into a proxy object that can be added to |
| -// the trace event log. This is to solve the problem that the |
| -// HeapProfilerSerializationState is refcounted but the tracing subsystem wants |
| -// a std::unique_ptr<ConvertableToTraceFormat>. |
| -template <typename T> |
| -struct SessionStateConvertableProxy : public ConvertableToTraceFormat { |
| - using GetterFunctPtr = T* (HeapProfilerSerializationState::*)() const; |
| - |
| - SessionStateConvertableProxy(scoped_refptr<HeapProfilerSerializationState> |
| - heap_profiler_serialization_state, |
| - GetterFunctPtr getter_function) |
| - : heap_profiler_serialization_state(heap_profiler_serialization_state), |
| - getter_function(getter_function) {} |
| - |
| - void AppendAsTraceFormat(std::string* out) const override { |
| - return (heap_profiler_serialization_state.get()->*getter_function)() |
| - ->AppendAsTraceFormat(out); |
| - } |
| - |
| - void EstimateTraceMemoryOverhead( |
| - TraceEventMemoryOverhead* overhead) override { |
| - return (heap_profiler_serialization_state.get()->*getter_function)() |
| - ->EstimateTraceMemoryOverhead(overhead); |
| - } |
| - |
| - scoped_refptr<HeapProfilerSerializationState> |
| - heap_profiler_serialization_state; |
| - GetterFunctPtr const getter_function; |
| -}; |
| - |
| void OnPeakDetected(MemoryDumpLevelOfDetail level_of_detail) { |
| MemoryDumpManager::GetInstance()->RequestGlobalDump( |
| MemoryDumpType::PEAK_MEMORY_USAGE, level_of_detail); |
| @@ -780,6 +747,14 @@ void MemoryDumpManager::FinalizeDumpAndAddToTrace( |
| } |
| } |
| + bool tracing_still_enabled; |
|
Primiano Tucci (use gerrit)
2017/05/30 18:50:53
I think this is a rebase leftover. we don't want t
DmitrySkiba
2017/06/05 00:50:18
Nice catch! Done.
|
| + TRACE_EVENT_CATEGORY_GROUP_ENABLED(kTraceCategory, &tracing_still_enabled); |
| + if (!tracing_still_enabled) { |
| + pmd_async_state->dump_successful = false; |
| + VLOG(1) << kLogPrefix << " failed because tracing was disabled before" |
| + << " the dump was completed"; |
| + } |
| + |
| if (!pmd_async_state->callback.is_null()) { |
| pmd_async_state->callback.Run(dump_guid, dump_successful, result); |
| pmd_async_state->callback.Reset(); |
| @@ -797,28 +772,13 @@ void MemoryDumpManager::SetupForTracing( |
| ->set_heap_profiler_breakdown_threshold_bytes( |
| memory_dump_config.heap_profiler_options.breakdown_threshold_bytes); |
| if (heap_profiling_enabled_) { |
| - // If heap profiling is enabled, the stack frame deduplicator and type name |
| - // deduplicator will be in use. Add a metadata events to write the frames |
| - // and type IDs. |
| - heap_profiler_serialization_state->SetStackFrameDeduplicator( |
| - WrapUnique(new StackFrameDeduplicator)); |
| - |
| - heap_profiler_serialization_state->SetTypeNameDeduplicator( |
| - WrapUnique(new TypeNameDeduplicator)); |
| - |
| - TRACE_EVENT_API_ADD_METADATA_EVENT( |
| - TraceLog::GetCategoryGroupEnabled("__metadata"), "stackFrames", |
| - "stackFrames", |
| - MakeUnique<SessionStateConvertableProxy<StackFrameDeduplicator>>( |
| - heap_profiler_serialization_state, |
| - &HeapProfilerSerializationState::stack_frame_deduplicator)); |
| - |
| - TRACE_EVENT_API_ADD_METADATA_EVENT( |
| - TraceLog::GetCategoryGroupEnabled("__metadata"), "typeNames", |
| - "typeNames", |
| - MakeUnique<SessionStateConvertableProxy<TypeNameDeduplicator>>( |
| - heap_profiler_serialization_state, |
| - &HeapProfilerSerializationState::type_name_deduplicator)); |
| + heap_profiler_serialization_state->CreateDeduplicators(); |
| + const TraceConfig& trace_config = |
| + TraceLog::GetInstance()->GetCurrentTraceConfig(); |
| + // TODO(dskiba): support continuous mode (crbug.com/701052) |
| + LOG_IF(ERROR, trace_config.GetTraceRecordMode() != RECORD_CONTINUOUSLY) |
|
Primiano Tucci (use gerrit)
2017/05/30 18:50:53
FATAL (which causes a crash) or D/VLOG. any other
DmitrySkiba
2017/06/05 00:50:18
I think it was your idea to use LOG_IF :)
"
Primi
|
| + << "Heap profile format is incremental and doesn't yet fully support " |
| + << "continuous mode."; |
| } |
| AutoLock lock(lock_); |