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

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

Issue 952893003: Update from https://crrev.com/317530 (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Fix gn for nacl Created 5 years, 10 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
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/trace_event/memory_dump_manager.h" 5 #include "base/trace_event/memory_dump_manager.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/compiler_specific.h" 9 #include "base/compiler_specific.h"
10 #include "base/trace_event/memory_dump_provider.h" 10 #include "base/trace_event/memory_dump_provider.h"
11 #include "base/trace_event/process_memory_dump.h" 11 #include "base/trace_event/process_memory_dump.h"
12 12 #include "base/trace_event/trace_event_argument.h"
13 // TODO(primiano): in a separate CL rename DeleteTraceLogForTesting into
14 // something like base::internal::TeardownSingletonForTesting so we don't have
15 // to add a new friend to singleton each time.
16 class DeleteTraceLogForTesting {
17 public:
18 static void Delete() {
19 Singleton<
20 base::trace_event::MemoryDumpManager,
21 LeakySingletonTraits<base::trace_event::MemoryDumpManager>>::OnExit(0);
22 }
23 };
24 13
25 namespace base { 14 namespace base {
26 namespace trace_event { 15 namespace trace_event {
27 16
17 namespace {
18 MemoryDumpManager* g_instance_for_testing = nullptr;
19 }
20
28 // TODO(primiano): this should be smarter and should do something similar to 21 // TODO(primiano): this should be smarter and should do something similar to
29 // trace event synthetic delays. 22 // trace event synthetic delays.
30 const char MemoryDumpManager::kTraceCategory[] = 23 const char MemoryDumpManager::kTraceCategory[] =
31 TRACE_DISABLED_BY_DEFAULT("memory-dumps"); 24 TRACE_DISABLED_BY_DEFAULT("memory-dumps");
32 25
33 // static 26 // static
34 MemoryDumpManager* MemoryDumpManager::GetInstance() { 27 MemoryDumpManager* MemoryDumpManager::GetInstance() {
28 if (g_instance_for_testing)
29 return g_instance_for_testing;
30
35 return Singleton<MemoryDumpManager, 31 return Singleton<MemoryDumpManager,
36 LeakySingletonTraits<MemoryDumpManager>>::get(); 32 LeakySingletonTraits<MemoryDumpManager>>::get();
37 } 33 }
38 34
39 // static 35 // static
40 void MemoryDumpManager::DeleteForTesting() { 36 void MemoryDumpManager::SetInstanceForTesting(MemoryDumpManager* instance) {
41 DeleteTraceLogForTesting::Delete(); 37 g_instance_for_testing = instance;
42 } 38 }
43 39
44 MemoryDumpManager::MemoryDumpManager() : memory_tracing_enabled_(0) { 40 MemoryDumpManager::MemoryDumpManager() : memory_tracing_enabled_(0) {
45 } 41 }
46 42
47 MemoryDumpManager::~MemoryDumpManager() { 43 MemoryDumpManager::~MemoryDumpManager() {
48 base::trace_event::TraceLog::GetInstance()->RemoveEnabledStateObserver(this); 44 base::trace_event::TraceLog::GetInstance()->RemoveEnabledStateObserver(this);
49 } 45 }
50 46
51 void MemoryDumpManager::Initialize() { 47 void MemoryDumpManager::Initialize() {
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
89 CreateLocalDumpPoint(); 85 CreateLocalDumpPoint();
90 } 86 }
91 87
92 void MemoryDumpManager::BroadcastDumpRequest() { 88 void MemoryDumpManager::BroadcastDumpRequest() {
93 NOTREACHED(); // TODO(primiano): implement IPC synchronization. 89 NOTREACHED(); // TODO(primiano): implement IPC synchronization.
94 } 90 }
95 91
96 // Creates a dump point for the current process and appends it to the trace. 92 // Creates a dump point for the current process and appends it to the trace.
97 void MemoryDumpManager::CreateLocalDumpPoint() { 93 void MemoryDumpManager::CreateLocalDumpPoint() {
98 AutoLock lock(lock_); 94 AutoLock lock(lock_);
99 // TRACE_EVENT_* macros don't induce scoped_refptr type inference, hence we 95 scoped_ptr<ProcessMemoryDump> pmd(new ProcessMemoryDump());
100 // need the base ConvertableToTraceFormat and the upcast below. The
101 // alternative would be unnecessarily expensive (double Acquire/Release).
102 scoped_refptr<ConvertableToTraceFormat> pmd(new ProcessMemoryDump());
103 96
104 for (MemoryDumpProvider* dump_provider : dump_providers_enabled_) { 97 for (MemoryDumpProvider* dump_provider : dump_providers_enabled_) {
105 dump_provider->DumpInto(static_cast<ProcessMemoryDump*>(pmd.get())); 98 dump_provider->DumpInto(pmd.get());
106 } 99 }
107 100
101 scoped_refptr<TracedValue> value(new TracedValue());
102 pmd->AsValueInto(value.get());
108 // TODO(primiano): add the dump point to the trace at this point. 103 // TODO(primiano): add the dump point to the trace at this point.
109 } 104 }
110 105
111 void MemoryDumpManager::OnTraceLogEnabled() { 106 void MemoryDumpManager::OnTraceLogEnabled() {
112 // TODO(primiano): at this point we query TraceLog::GetCurrentCategoryFilter 107 // TODO(primiano): at this point we query TraceLog::GetCurrentCategoryFilter
113 // to figure out (and cache) which dumpers should be enabled or not. 108 // to figure out (and cache) which dumpers should be enabled or not.
114 // For the moment piggy back everything on the generic "memory" category. 109 // For the moment piggy back everything on the generic "memory" category.
115 bool enabled; 110 bool enabled;
116 TRACE_EVENT_CATEGORY_GROUP_ENABLED(kTraceCategory, &enabled); 111 TRACE_EVENT_CATEGORY_GROUP_ENABLED(kTraceCategory, &enabled);
117 112
118 AutoLock lock(lock_); 113 AutoLock lock(lock_);
119 if (enabled) { 114 if (enabled) {
120 dump_providers_enabled_.assign(dump_providers_registered_.begin(), 115 dump_providers_enabled_.assign(dump_providers_registered_.begin(),
121 dump_providers_registered_.end()); 116 dump_providers_registered_.end());
122 } else { 117 } else {
123 dump_providers_enabled_.clear(); 118 dump_providers_enabled_.clear();
124 } 119 }
125 subtle::NoBarrier_Store(&memory_tracing_enabled_, 1); 120 subtle::NoBarrier_Store(&memory_tracing_enabled_, 1);
126 } 121 }
127 122
128 void MemoryDumpManager::OnTraceLogDisabled() { 123 void MemoryDumpManager::OnTraceLogDisabled() {
129 AutoLock lock(lock_); 124 AutoLock lock(lock_);
130 dump_providers_enabled_.clear(); 125 dump_providers_enabled_.clear();
131 subtle::NoBarrier_Store(&memory_tracing_enabled_, 0); 126 subtle::NoBarrier_Store(&memory_tracing_enabled_, 0);
132 } 127 }
133 128
134 } // namespace trace_event 129 } // namespace trace_event
135 } // namespace base 130 } // namespace base
OLDNEW
« no previous file with comments | « base/trace_event/memory_dump_manager.h ('k') | base/trace_event/memory_dump_manager_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698