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 c8be8f89312a34d5b0bdd3996c3abebbc143f10b..bf631b34bea033cba4c95f76d4f73439ed703d3f 100644 |
--- a/base/trace_event/memory_dump_manager.cc |
+++ b/base/trace_event/memory_dump_manager.cc |
@@ -9,15 +9,22 @@ |
#include "base/compiler_specific.h" |
#include "base/trace_event/memory_dump_provider.h" |
#include "base/trace_event/process_memory_dump.h" |
-#include "base/trace_event/trace_event_argument.h" |
+ |
+// TODO(primiano): in a separate CL rename DeleteTraceLogForTesting into |
+// something like base::internal::TeardownSingletonForTesting so we don't have |
+// to add a new friend to singleton each time. |
+class DeleteTraceLogForTesting { |
+ public: |
+ static void Delete() { |
+ Singleton< |
+ base::trace_event::MemoryDumpManager, |
+ LeakySingletonTraits<base::trace_event::MemoryDumpManager>>::OnExit(0); |
+ } |
+}; |
namespace base { |
namespace trace_event { |
-namespace { |
-MemoryDumpManager* g_instance_for_testing = nullptr; |
-} |
- |
// TODO(primiano): this should be smarter and should do something similar to |
// trace event synthetic delays. |
const char MemoryDumpManager::kTraceCategory[] = |
@@ -25,16 +32,13 @@ const char MemoryDumpManager::kTraceCategory[] = |
// static |
MemoryDumpManager* MemoryDumpManager::GetInstance() { |
- if (g_instance_for_testing) |
- return g_instance_for_testing; |
- |
return Singleton<MemoryDumpManager, |
LeakySingletonTraits<MemoryDumpManager>>::get(); |
} |
// static |
-void MemoryDumpManager::SetInstanceForTesting(MemoryDumpManager* instance) { |
- g_instance_for_testing = instance; |
+void MemoryDumpManager::DeleteForTesting() { |
+ DeleteTraceLogForTesting::Delete(); |
} |
MemoryDumpManager::MemoryDumpManager() : memory_tracing_enabled_(0) { |
@@ -92,14 +96,15 @@ void MemoryDumpManager::BroadcastDumpRequest() { |
// Creates a dump point for the current process and appends it to the trace. |
void MemoryDumpManager::CreateLocalDumpPoint() { |
AutoLock lock(lock_); |
- scoped_ptr<ProcessMemoryDump> pmd(new ProcessMemoryDump()); |
+ // TRACE_EVENT_* macros don't induce scoped_refptr type inference, hence we |
+ // need the base ConvertableToTraceFormat and the upcast below. The |
+ // alternative would be unnecessarily expensive (double Acquire/Release). |
+ scoped_refptr<ConvertableToTraceFormat> pmd(new ProcessMemoryDump()); |
for (MemoryDumpProvider* dump_provider : dump_providers_enabled_) { |
- dump_provider->DumpInto(pmd.get()); |
+ dump_provider->DumpInto(static_cast<ProcessMemoryDump*>(pmd.get())); |
} |
- scoped_refptr<TracedValue> value(new TracedValue()); |
- pmd->AsValueInto(value.get()); |
// TODO(primiano): add the dump point to the trace at this point. |
} |