Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5)

Side by Side Diff: base/trace_event/memory_tracing_observer.cc

Issue 2820433005: memory-infra: Start disentangling tracing from memory-infra (Closed)
Patch Set: update for comments Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(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 bool IsMemoryInfraTracingEnabled() {
20 bool enabled;
21 TRACE_EVENT_CATEGORY_GROUP_ENABLED(MemoryDumpManager::kTraceCategory,
22 &enabled);
23 return enabled;
24 }
25
26 }; // namespace
27
28 MemoryTracingObserver::MemoryTracingObserver(
29 TraceLog* trace_log,
30 MemoryDumpManager* memory_dump_manager)
31 : enabled_(false),
32 memory_dump_manager_(memory_dump_manager),
33 trace_log_(trace_log) {
34 // If tracing was enabled before initializing MemoryDumpManager, we missed the
35 // OnTraceLogEnabled() event. Synthetize it so we can late-join the party.
36 // IsEnabled is called before adding observer to avoid calling
37 // OnTraceLogEnabled twice.
38 bool is_tracing_already_enabled = trace_log_->IsEnabled();
39 trace_log_->AddEnabledStateObserver(this);
40 if (is_tracing_already_enabled)
41 OnTraceLogEnabled();
42 }
43
44 MemoryTracingObserver::~MemoryTracingObserver() {
45 trace_log_->RemoveEnabledStateObserver(this);
46 }
47
48 void MemoryTracingObserver::OnTraceLogEnabled() {
49 if (!IsMemoryInfraTracingEnabled())
50 return;
51
52 // Initialize the TraceLog for the current thread. This is to avoids that the
53 // TraceLog memory dump provider is registered lazily during the MDM Enable()
54 TraceLog::GetInstance()->InitializeThreadLocalEventBufferIfSupported();
55
56 const TraceConfig& trace_config =
57 TraceLog::GetInstance()->GetCurrentTraceConfig();
58 const TraceConfig::MemoryDumpConfig& memory_dump_config =
59 trace_config.memory_dump_config();
60
61 enabled_ = true;
Primiano Tucci (use gerrit) 2017/04/21 13:14:17 sorry I just realized my comment was a bit ambiguo
hjd 2017/04/21 13:42:32 Done.
62 memory_dump_manager_->Enable(memory_dump_config);
63 }
64
65 void MemoryTracingObserver::OnTraceLogDisabled() {
66 memory_dump_manager_->Disable();
67 enabled_ = false;
68 }
69
70 bool MemoryTracingObserver::AddDumpToTraceIfEnabled(
71 const MemoryDumpRequestArgs* req_args,
72 const ProcessId pid,
73 const ProcessMemoryDump* process_memory_dump) {
74 if (!enabled_)
Primiano Tucci (use gerrit) 2017/04/21 13:14:16 this should really be IsMemoryInfraTracingEnabled(
hjd 2017/04/21 13:42:32 Done.
75 return false;
76
77 const uint64_t dump_guid = req_args->dump_guid;
78
79 std::unique_ptr<TracedValue> traced_value(new TracedValue);
80 process_memory_dump->AsValueInto(traced_value.get());
81 traced_value->SetString("level_of_detail", MemoryDumpLevelOfDetailToString(
82 req_args->level_of_detail));
83 const char* const event_name = MemoryDumpTypeToString(req_args->dump_type);
84
85 std::unique_ptr<ConvertableToTraceFormat> event_value(
86 std::move(traced_value));
87 TRACE_EVENT_API_ADD_TRACE_EVENT_WITH_PROCESS_ID(
88 TRACE_EVENT_PHASE_MEMORY_DUMP,
89 TraceLog::GetCategoryGroupEnabled(MemoryDumpManager::kTraceCategory),
90 event_name, trace_event_internal::kGlobalScope, dump_guid, pid,
91 kTraceEventNumArgs, kTraceEventArgNames, kTraceEventArgTypes,
92 nullptr /* arg_values */, &event_value, TRACE_EVENT_FLAG_HAS_ID);
93
94 return true;
95 }
96
97 } // namespace trace_event
98 } // namespace base
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698