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

Unified Diff: base/trace_event/memory_dump_manager_unittest.cc

Issue 2650863003: [tracing] Switch to new heap dump format. (Closed)
Patch Set: Add 'version' field. Created 3 years, 11 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 side-by-side diff with in-line comments
Download patch
Index: base/trace_event/memory_dump_manager_unittest.cc
diff --git a/base/trace_event/memory_dump_manager_unittest.cc b/base/trace_event/memory_dump_manager_unittest.cc
index e8c33af3e06b935a80911bf049ff3d6e8c3c4b01..7ecfc90c73ba2f6b7537f0e5fd69404bcd76f0ee 100644
--- a/base/trace_event/memory_dump_manager_unittest.cc
+++ b/base/trace_event/memory_dump_manager_unittest.cc
@@ -9,13 +9,17 @@
#include <memory>
#include <vector>
+#include "base/base_switches.h"
#include "base/bind_helpers.h"
+#include "base/json/json_reader.h"
+#include "base/json/json_writer.h"
#include "base/memory/ptr_util.h"
#include "base/memory/ref_counted_memory.h"
#include "base/message_loop/message_loop.h"
#include "base/run_loop.h"
#include "base/strings/stringprintf.h"
#include "base/synchronization/waitable_event.h"
+#include "base/test/scoped_command_line.h"
#include "base/test/sequenced_worker_pool_owner.h"
#include "base/test/test_io_thread.h"
#include "base/test/trace_event_analyzer.h"
@@ -24,6 +28,7 @@
#include "base/threading/sequenced_worker_pool.h"
#include "base/threading/thread.h"
#include "base/threading/thread_task_runner_handle.h"
+#include "base/trace_event/heap_profiler_allocation_register.h"
#include "base/trace_event/memory_dump_provider.h"
#include "base/trace_event/memory_infra_background_whitelist.h"
#include "base/trace_event/process_memory_dump.h"
@@ -1283,5 +1288,72 @@ TEST_F(MemoryDumpManagerTest, TestBlacklistedUnsafeUnregistration) {
thread.Stop();
}
+//==============================================================================
+
+class HeapDumpProvider : public MemoryDumpProvider {
Primiano Tucci (use gerrit) 2017/02/17 17:07:05 shouldn't these be in the *heap_profiler_something
DmitrySkiba 2017/02/23 07:17:19 This needs to be removed, it's a code I used durin
+ public:
+ HeapDumpProvider(const char* allocator_name)
+ : allocator_name_(allocator_name) {}
+
+ bool OnMemoryDump(const MemoryDumpArgs& args,
+ ProcessMemoryDump* pmd) override {
+ AllocationRegister allocation_register(100, 100);
+ AllocationContext context;
+ context.backtrace.frames[0] = StackFrame::FromThreadName("main");
+ context.backtrace.frames[1] = StackFrame::FromTraceEventName("foo()");
+ context.backtrace.frame_count = 2;
+ context.type_name = "FooClass";
+
+ allocation_register.Insert(reinterpret_cast<const void*>(0x100), 100,
+ context);
+
+ pmd->DumpHeapUsage(allocation_register, allocator_name_.c_str());
+ return true;
+ }
+
+ private:
+ std::string allocator_name_;
+};
+
+TEST_F(MemoryDumpManagerTest, TraceJSON) {
+ base::test::ScopedCommandLine scoped_command_line;
+ scoped_command_line.GetProcessCommandLine()->AppendSwitch(
+ switches::kEnableHeapProfiling);
+
+ InitializeMemoryDumpManager(false /* is_coordinator */);
+
+ // Standard provider with default options (create dump for current process).
+ MemoryDumpProvider::Options options;
+ HeapDumpProvider mdp1("malloc");
+ RegisterDumpProvider(&mdp1, nullptr, options);
+
+ // Another provider with out-of-process dumping.
+ HeapDumpProvider mdp3("blink_gc");
+ options.target_pid = 456;
+ RegisterDumpProvider(&mdp3, nullptr, options);
+
+ EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
+ EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1);
+ RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
+ MemoryDumpLevelOfDetail::DETAILED);
+ DisableTracing();
+
+ // Flush the trace into JSON.
+ trace_event::TraceResultBuffer buffer;
+ TraceResultBuffer::SimpleOutput trace_output;
+ buffer.SetOutputCallback(trace_output.GetCallback());
+ RunLoop run_loop;
+ buffer.Start();
+ trace_event::TraceLog::GetInstance()->Flush(
+ Bind(&OnTraceDataCollected, run_loop.QuitClosure(), Unretained(&buffer)));
+ run_loop.Run();
+ buffer.Finish();
+
+ std::string pretty_json;
+ JSONWriter::WriteWithOptions(*JSONReader::Read(trace_output.json_output),
+ JSONWriter::OPTIONS_PRETTY_PRINT, &pretty_json);
+ LOG(INFO) << "\n" << pretty_json;
+}
+
} // namespace trace_event
} // namespace base

Powered by Google App Engine
This is Rietveld 408576698