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 bf631b34bea033cba4c95f76d4f73439ed703d3f..c8be8f89312a34d5b0bdd3996c3abebbc143f10b 100644 |
--- a/base/trace_event/memory_dump_manager.cc |
+++ b/base/trace_event/memory_dump_manager.cc |
@@ -9,22 +9,15 @@ |
#include "base/compiler_specific.h" |
#include "base/trace_event/memory_dump_provider.h" |
#include "base/trace_event/process_memory_dump.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); |
- } |
-}; |
+#include "base/trace_event/trace_event_argument.h" |
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[] = |
@@ -32,13 +25,16 @@ 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::DeleteForTesting() { |
- DeleteTraceLogForTesting::Delete(); |
+void MemoryDumpManager::SetInstanceForTesting(MemoryDumpManager* instance) { |
+ g_instance_for_testing = instance; |
} |
MemoryDumpManager::MemoryDumpManager() : memory_tracing_enabled_(0) { |
@@ -96,15 +92,14 @@ void MemoryDumpManager::BroadcastDumpRequest() { |
// Creates a dump point for the current process and appends it to the trace. |
void MemoryDumpManager::CreateLocalDumpPoint() { |
AutoLock lock(lock_); |
- // 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()); |
+ scoped_ptr<ProcessMemoryDump> pmd(new ProcessMemoryDump()); |
for (MemoryDumpProvider* dump_provider : dump_providers_enabled_) { |
- dump_provider->DumpInto(static_cast<ProcessMemoryDump*>(pmd.get())); |
+ dump_provider->DumpInto(pmd.get()); |
} |
+ scoped_refptr<TracedValue> value(new TracedValue()); |
+ pmd->AsValueInto(value.get()); |
// TODO(primiano): add the dump point to the trace at this point. |
} |