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

Unified Diff: base/trace_event/memory_dump_manager_unittest.cc

Issue 2844273002: memory-infra: Add unittest for MemoryDumpManager summary calculations (Closed)
Patch Set: Created 3 years, 8 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 732b5c8086652d9d7be8724e60db8c546e96c16b..ad62e58d6c4ba8165d56825532f0f210334a63c1 100644
--- a/base/trace_event/memory_dump_manager_unittest.cc
+++ b/base/trace_event/memory_dump_manager_unittest.cc
@@ -118,7 +118,6 @@ void PostTaskAndWait(const tracked_objects::Location& from_here,
// Adapts a ProcessMemoryDumpCallback into a GlobalMemoryDumpCallback by
// trimming off the result argument and calling the global callback.
-// TODO (fmeawad): we should keep the results for verification, but currently
// all results are empty.
Primiano Tucci (use gerrit) 2017/04/28 15:04:33 are you intending to keep this "all results are em
hjd 2017/05/02 12:38:37 oops, thanks! Done.
void ProcessDumpCallbackAdapter(
GlobalMemoryDumpCallback callback,
@@ -231,6 +230,7 @@ class MemoryDumpManagerTest : public testing::Test {
last_callback_success_ = false;
message_loop_.reset(new MessageLoop());
mdm_.reset(new MemoryDumpManager());
+ results_.clear();
MemoryDumpManager::SetInstanceForTesting(mdm_.get());
ASSERT_EQ(mdm_.get(), MemoryDumpManager::GetInstance());
}
@@ -293,13 +293,32 @@ class MemoryDumpManagerTest : public testing::Test {
return MemoryDumpManager::kMaxConsecutiveFailuresCount;
}
+ const std::vector<MemoryDumpCallbackResult>* GetResults() const {
+ return &results_;
+ }
+
const MemoryDumpProvider::Options kDefaultOptions;
std::unique_ptr<MemoryDumpManager> mdm_;
GlobalMemoryDumpHandler global_dump_handler_;
bool last_callback_success_;
+ // Adapts a ProcessMemoryDumpCallback into a GlobalMemoryDumpCallback by
+ // trimming off the result argument and calling the global callback.
Primiano Tucci (use gerrit) 2017/04/28 15:04:33 "trimming off" the result confused me a bit before
hjd 2017/05/02 12:38:37 Done.
+ // all results are empty.
+ void ProcessDumpRecordingCallbackAdapter(
+ GlobalMemoryDumpCallback callback,
+ uint64_t dump_guid,
+ bool success,
+ const base::Optional<MemoryDumpCallbackResult>& result) {
+ if (result.has_value()) {
+ results_.push_back(result.value());
+ }
+ callback.Run(dump_guid, success);
+ }
+
private:
std::unique_ptr<MessageLoop> message_loop_;
+ std::vector<MemoryDumpCallbackResult> results_;
// We want our singleton torn down after each test.
ShadowingAtExitManager at_exit_manager_;
@@ -1282,5 +1301,72 @@ TEST_F(MemoryDumpManagerTest, DumpWithTracingDisabled) {
mdm_->UnregisterDumpProvider(&mdp);
}
+TEST_F(MemoryDumpManagerTest, TestComputingSummary) {
Primiano Tucci (use gerrit) 2017/04/28 15:04:33 s/TestComputingSummary/TestSummaryComputation/ ju
hjd 2017/05/02 12:38:37 Done.
+ InitializeMemoryDumpManager(false /* is_coordinator */);
+ MockMemoryDumpProvider mdp;
+ RegisterDumpProvider(&mdp, ThreadTaskRunnerHandle::Get());
+
+ const MemoryDumpSessionState* session_state =
+ mdm_->session_state_for_testing().get();
+
+ EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _))
+ .WillOnce(Invoke([this](const MemoryDumpRequestArgs& args,
+ const GlobalMemoryDumpCallback& callback) {
+ ProcessMemoryDumpCallback process_callback =
+ Bind(&MemoryDumpManagerTest_TestComputingSummary_Test::
+ ProcessDumpRecordingCallbackAdapter,
+ Unretained(this), callback);
+ mdm_->CreateProcessDump(args, process_callback);
+ }));
+
+ EXPECT_CALL(mdp, OnMemoryDump(_, _))
+ .Times(1)
+ .WillRepeatedly(Invoke([session_state](const MemoryDumpArgs&,
+ ProcessMemoryDump* pmd) -> bool {
+ auto* size = MemoryAllocatorDump::kNameSize;
+ auto* bytes = MemoryAllocatorDump::kUnitsBytes;
+ auto kb = 1024;
Primiano Tucci (use gerrit) 2017/04/28 15:04:33 const uint32_t kB = 1024; kb -> kB will both match
hjd 2017/05/02 12:38:37 Done.
+
+ pmd->CreateAllocatorDump("malloc")->AddScalar(size, bytes, 1 * kb);
+ pmd->CreateAllocatorDump("malloc/foo")->AddScalar(size, bytes, 99 * kb);
+
+ pmd->CreateAllocatorDump("blink_gc")->AddScalar(size, bytes, 2 * kb);
+ pmd->CreateAllocatorDump("blink_gc/foo")
+ ->AddScalar(size, bytes, 99 * kb);
+
+ pmd->CreateAllocatorDump("v8/foo")->AddScalar(size, bytes, 1 * kb);
+ pmd->CreateAllocatorDump("v8/bar")->AddScalar(size, bytes, 2 * kb);
+ pmd->CreateAllocatorDump("v8")->AddScalar(size, bytes, 99 * kb);
+
+ pmd->CreateAllocatorDump("partition_alloc")
+ ->AddScalar(size, bytes, 99 * kb);
+ pmd->CreateAllocatorDump("partition_alloc/partitions")
+ ->AddScalar(size, bytes, 99 * kb);
+ pmd->CreateAllocatorDump("partition_alloc/partitions/foo")
+ ->AddScalar(size, bytes, 2 * kb);
+ pmd->CreateAllocatorDump("partition_alloc/partitions/bar")
+ ->AddScalar(size, bytes, 2 * kb);
+ pmd->process_totals()->set_resident_set_bytes(5 * kb);
+ pmd->set_has_process_totals();
+ return true;
+ }));
+
+ last_callback_success_ = false;
+
+ EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
+ RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
+ MemoryDumpLevelOfDetail::LIGHT);
+ DisableTracing();
+
Primiano Tucci (use gerrit) 2017/04/28 15:04:33 can you add a comment explaining why the 99 doesn'
hjd 2017/05/02 12:38:36 Yeah XD I ended up wrapping some of the others any
+ EXPECT_TRUE(last_callback_success_);
+ ASSERT_EQ(1u, GetResults()->size());
+ MemoryDumpCallbackResult result = GetResults()->front();
+ EXPECT_EQ(1u, result.chrome_dump.malloc_total_kb);
+ EXPECT_EQ(2u, result.chrome_dump.blink_gc_total_kb);
+ EXPECT_EQ(3u, result.chrome_dump.v8_total_kb);
+ EXPECT_EQ(4u, result.chrome_dump.partition_alloc_total_kb);
+ EXPECT_EQ(5u, result.os_dump.resident_set_kb);
+};
+
} // namespace trace_event
} // namespace base
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698