Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright 2017 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "base/trace_event/memory_tracing_observer.h" | |
| 6 | |
| 7 #include "base/trace_event/memory_dump_manager.h" | |
| 8 #include "base/trace_event/trace_event_argument.h" | |
| 9 | |
| 10 namespace base { | |
| 11 namespace trace_event { | |
| 12 | |
| 13 namespace { | |
| 14 | |
| 15 const int kTraceEventNumArgs = 1; | |
| 16 const char* kTraceEventArgNames[] = {"dumps"}; | |
| 17 const unsigned char kTraceEventArgTypes[] = {TRACE_VALUE_TYPE_CONVERTABLE}; | |
| 18 | |
| 19 }; // namespace | |
| 20 | |
| 21 MemoryTracingObserver::MemoryTracingObserver( | |
| 22 TraceLog* trace_log, | |
| 23 MemoryDumpManager* memory_dump_manager) { | |
| 24 enabled_ = false; | |
|
Primiano Tucci (use gerrit)
2017/04/21 10:10:26
initialize these in the ctor initializer list (Cto
hjd
2017/04/21 11:51:58
Done.
| |
| 25 trace_log_ = trace_log; | |
| 26 memory_dump_manager_ = memory_dump_manager; | |
| 27 | |
| 28 // DCHECK(memory_dump_manager_->IsInitialized()); | |
|
Primiano Tucci (use gerrit)
2017/04/21 10:10:27
remove this?
hjd
2017/04/21 11:51:57
Done, thanks!
| |
| 29 | |
| 30 // If tracing was enabled before initializing MemoryDumpManager, we missed the | |
| 31 // OnTraceLogEnabled() event. Synthetize it so we can late-join the party. | |
| 32 // IsEnabled is called before adding observer to avoid calling | |
| 33 // OnTraceLogEnabled twice. | |
| 34 bool is_tracing_already_enabled = trace_log_->IsEnabled(); | |
| 35 trace_log_->AddEnabledStateObserver(this); | |
| 36 if (is_tracing_already_enabled) | |
| 37 OnTraceLogEnabled(); | |
| 38 } | |
| 39 | |
| 40 MemoryTracingObserver::~MemoryTracingObserver() { | |
| 41 trace_log_->RemoveEnabledStateObserver(this); | |
| 42 } | |
| 43 | |
| 44 void MemoryTracingObserver::OnTraceLogEnabled() { | |
| 45 if (!IsMemoryInfraTracingEnabled()) | |
| 46 return; | |
| 47 | |
| 48 const TraceConfig& trace_config = | |
| 49 TraceLog::GetInstance()->GetCurrentTraceConfig(); | |
| 50 const TraceConfig::MemoryDumpConfig& memory_dump_config = | |
| 51 trace_config.memory_dump_config(); | |
| 52 | |
| 53 enabled_ = true; | |
| 54 memory_dump_manager_->Enable(memory_dump_config); | |
| 55 } | |
| 56 | |
| 57 void MemoryTracingObserver::OnTraceLogDisabled() { | |
| 58 if (!enabled_) | |
|
Primiano Tucci (use gerrit)
2017/04/21 10:10:27
this extra state seems to be here only to prevent
hjd
2017/04/21 11:51:58
Done.
| |
| 59 return; | |
| 60 memory_dump_manager_->Disable(); | |
| 61 enabled_ = false; | |
| 62 } | |
| 63 | |
| 64 // static | |
| 65 void MemoryTracingObserver::MaybeAddDumpToTrace( | |
| 66 const MemoryDumpRequestArgs* req_args, | |
| 67 const ProcessId pid, | |
| 68 const ProcessMemoryDump* process_memory_dump) { | |
| 69 if (!IsMemoryInfraTracingEnabled()) | |
| 70 return; | |
| 71 | |
| 72 const uint64_t dump_guid = req_args->dump_guid; | |
| 73 | |
| 74 std::unique_ptr<TracedValue> traced_value(new TracedValue); | |
| 75 process_memory_dump->AsValueInto(traced_value.get()); | |
| 76 traced_value->SetString("level_of_detail", MemoryDumpLevelOfDetailToString( | |
| 77 req_args->level_of_detail)); | |
| 78 const char* const event_name = MemoryDumpTypeToString(req_args->dump_type); | |
| 79 | |
| 80 std::unique_ptr<ConvertableToTraceFormat> event_value( | |
| 81 std::move(traced_value)); | |
| 82 TRACE_EVENT_API_ADD_TRACE_EVENT_WITH_PROCESS_ID( | |
| 83 TRACE_EVENT_PHASE_MEMORY_DUMP, | |
| 84 TraceLog::GetCategoryGroupEnabled(MemoryDumpManager::kTraceCategory), | |
| 85 event_name, trace_event_internal::kGlobalScope, dump_guid, pid, | |
| 86 kTraceEventNumArgs, kTraceEventArgNames, kTraceEventArgTypes, | |
| 87 nullptr /* arg_values */, &event_value, TRACE_EVENT_FLAG_HAS_ID); | |
| 88 } | |
| 89 | |
| 90 // static | |
| 91 bool MemoryTracingObserver::IsMemoryInfraTracingEnabled() { | |
| 92 bool enabled; | |
| 93 TRACE_EVENT_CATEGORY_GROUP_ENABLED(MemoryDumpManager::kTraceCategory, | |
| 94 &enabled); | |
| 95 return enabled; | |
| 96 } | |
| 97 | |
| 98 } // namespace trace_event | |
| 99 } // namespace base | |
| OLD | NEW |