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

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

Issue 951673002: Revert "Pull chromium at 2c3ffb2355a27c32f45e508ef861416b820c823b" (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: 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 #include "base/trace_event/trace_event_argument.h" 12
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 };
13 24
14 namespace base { 25 namespace base {
15 namespace trace_event { 26 namespace trace_event {
16 27
17 namespace {
18 MemoryDumpManager* g_instance_for_testing = nullptr;
19 }
20
21 // TODO(primiano): this should be smarter and should do something similar to 28 // TODO(primiano): this should be smarter and should do something similar to
22 // trace event synthetic delays. 29 // trace event synthetic delays.
23 const char MemoryDumpManager::kTraceCategory[] = 30 const char MemoryDumpManager::kTraceCategory[] =
24 TRACE_DISABLED_BY_DEFAULT("memory-dumps"); 31 TRACE_DISABLED_BY_DEFAULT("memory-dumps");
25 32
26 // static 33 // static
27 MemoryDumpManager* MemoryDumpManager::GetInstance() { 34 MemoryDumpManager* MemoryDumpManager::GetInstance() {
28 if (g_instance_for_testing)
29 return g_instance_for_testing;
30
31 return Singleton<MemoryDumpManager, 35 return Singleton<MemoryDumpManager,
32 LeakySingletonTraits<MemoryDumpManager>>::get(); 36 LeakySingletonTraits<MemoryDumpManager>>::get();
33 } 37 }
34 38
35 // static 39 // static
36 void MemoryDumpManager::SetInstanceForTesting(MemoryDumpManager* instance) { 40 void MemoryDumpManager::DeleteForTesting() {
37 g_instance_for_testing = instance; 41 DeleteTraceLogForTesting::Delete();
38 } 42 }
39 43
40 MemoryDumpManager::MemoryDumpManager() : memory_tracing_enabled_(0) { 44 MemoryDumpManager::MemoryDumpManager() : memory_tracing_enabled_(0) {
41 } 45 }
42 46
43 MemoryDumpManager::~MemoryDumpManager() { 47 MemoryDumpManager::~MemoryDumpManager() {
44 base::trace_event::TraceLog::GetInstance()->RemoveEnabledStateObserver(this); 48 base::trace_event::TraceLog::GetInstance()->RemoveEnabledStateObserver(this);
45 } 49 }
46 50
47 void MemoryDumpManager::Initialize() { 51 void MemoryDumpManager::Initialize() {
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
85 CreateLocalDumpPoint(); 89 CreateLocalDumpPoint();
86 } 90 }
87 91
88 void MemoryDumpManager::BroadcastDumpRequest() { 92 void MemoryDumpManager::BroadcastDumpRequest() {
89 NOTREACHED(); // TODO(primiano): implement IPC synchronization. 93 NOTREACHED(); // TODO(primiano): implement IPC synchronization.
90 } 94 }
91 95
92 // Creates a dump point for the current process and appends it to the trace. 96 // Creates a dump point for the current process and appends it to the trace.
93 void MemoryDumpManager::CreateLocalDumpPoint() { 97 void MemoryDumpManager::CreateLocalDumpPoint() {
94 AutoLock lock(lock_); 98 AutoLock lock(lock_);
95 scoped_ptr<ProcessMemoryDump> pmd(new ProcessMemoryDump()); 99 // TRACE_EVENT_* macros don't induce scoped_refptr type inference, hence we
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());
96 103
97 for (MemoryDumpProvider* dump_provider : dump_providers_enabled_) { 104 for (MemoryDumpProvider* dump_provider : dump_providers_enabled_) {
98 dump_provider->DumpInto(pmd.get()); 105 dump_provider->DumpInto(static_cast<ProcessMemoryDump*>(pmd.get()));
99 } 106 }
100 107
101 scoped_refptr<TracedValue> value(new TracedValue());
102 pmd->AsValueInto(value.get());
103 // TODO(primiano): add the dump point to the trace at this point. 108 // TODO(primiano): add the dump point to the trace at this point.
104 } 109 }
105 110
106 void MemoryDumpManager::OnTraceLogEnabled() { 111 void MemoryDumpManager::OnTraceLogEnabled() {
107 // TODO(primiano): at this point we query TraceLog::GetCurrentCategoryFilter 112 // TODO(primiano): at this point we query TraceLog::GetCurrentCategoryFilter
108 // to figure out (and cache) which dumpers should be enabled or not. 113 // to figure out (and cache) which dumpers should be enabled or not.
109 // For the moment piggy back everything on the generic "memory" category. 114 // For the moment piggy back everything on the generic "memory" category.
110 bool enabled; 115 bool enabled;
111 TRACE_EVENT_CATEGORY_GROUP_ENABLED(kTraceCategory, &enabled); 116 TRACE_EVENT_CATEGORY_GROUP_ENABLED(kTraceCategory, &enabled);
112 117
113 AutoLock lock(lock_); 118 AutoLock lock(lock_);
114 if (enabled) { 119 if (enabled) {
115 dump_providers_enabled_.assign(dump_providers_registered_.begin(), 120 dump_providers_enabled_.assign(dump_providers_registered_.begin(),
116 dump_providers_registered_.end()); 121 dump_providers_registered_.end());
117 } else { 122 } else {
118 dump_providers_enabled_.clear(); 123 dump_providers_enabled_.clear();
119 } 124 }
120 subtle::NoBarrier_Store(&memory_tracing_enabled_, 1); 125 subtle::NoBarrier_Store(&memory_tracing_enabled_, 1);
121 } 126 }
122 127
123 void MemoryDumpManager::OnTraceLogDisabled() { 128 void MemoryDumpManager::OnTraceLogDisabled() {
124 AutoLock lock(lock_); 129 AutoLock lock(lock_);
125 dump_providers_enabled_.clear(); 130 dump_providers_enabled_.clear();
126 subtle::NoBarrier_Store(&memory_tracing_enabled_, 0); 131 subtle::NoBarrier_Store(&memory_tracing_enabled_, 0);
127 } 132 }
128 133
129 } // namespace trace_event 134 } // namespace trace_event
130 } // namespace base 135 } // 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