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

Unified Diff: base/trace_event/memory_dump_manager_unittest.cc

Issue 1313613002: [tracing] MemoryDumpManager uses TraceConfig to set the periodic dump timers (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@test
Patch Set: Set delegate once. Created 5 years, 3 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 | « base/trace_event/memory_dump_manager.cc ('k') | 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 4d0372fd3243286fca9fbca439a89108970be143..374066548debe914af1c636ba01b1fc89c1d949f 100644
--- a/base/trace_event/memory_dump_manager_unittest.cc
+++ b/base/trace_event/memory_dump_manager_unittest.cc
@@ -25,8 +25,8 @@ using testing::Return;
namespace base {
namespace trace_event {
namespace {
-MemoryDumpArgs high_detail_args = {MemoryDumpArgs::LevelOfDetail::HIGH};
-MemoryDumpArgs low_detail_args = {MemoryDumpArgs::LevelOfDetail::LOW};
+MemoryDumpArgs g_high_detail_args = {MemoryDumpArgs::LevelOfDetail::HIGH};
+MemoryDumpArgs g_low_detail_args = {MemoryDumpArgs::LevelOfDetail::LOW};
}
// Testing MemoryDumpManagerDelegate which short-circuits dump requests locally
@@ -44,6 +44,16 @@ class MemoryDumpManagerDelegateForTesting : public MemoryDumpManagerDelegate {
}
};
+class MemoryDumpManagerDelegateForPeriodicDumpTest
+ : public MemoryDumpManagerDelegateForTesting {
+ public:
+ MOCK_METHOD2(RequestGlobalMemoryDump,
+ void(const MemoryDumpRequestArgs& args,
+ const MemoryDumpCallback& callback));
+
+ bool IsCoordinatorProcess() const override { return true; }
+};
+
class MemoryDumpManagerTest : public testing::Test {
public:
void SetUp() override {
@@ -53,7 +63,6 @@ class MemoryDumpManagerTest : public testing::Test {
MemoryDumpManager::SetInstanceForTesting(mdm_.get());
ASSERT_EQ(mdm_, MemoryDumpManager::GetInstance());
MemoryDumpManager::GetInstance()->Initialize();
- MemoryDumpManager::GetInstance()->SetDelegate(&delegate_);
}
void TearDown() override {
@@ -72,19 +81,35 @@ class MemoryDumpManagerTest : public testing::Test {
}
protected:
+ void SetDelegate(scoped_ptr<MemoryDumpManagerDelegateForTesting> delegate) {
+ delegate_ = delegate.Pass();
+ MemoryDumpManager::GetInstance()->SetDelegate(delegate_.get());
+ }
+
+ // This enalbes tracing using the legacy category filter string.
void EnableTracing(const char* category) {
+ if (!delegate_) {
+ delegate_.reset(new MemoryDumpManagerDelegateForTesting());
+ MemoryDumpManager::GetInstance()->SetDelegate(delegate_.get());
+ }
TraceLog::GetInstance()->SetEnabled(
TraceConfig(category, ""), TraceLog::RECORDING_MODE);
}
+ void EnableTracingWithTraceConfig(const char* trace_config) {
+ DCHECK(delegate_);
+ TraceConfig tc(trace_config);
+ TraceLog::GetInstance()->SetEnabled(tc, TraceLog::RECORDING_MODE);
+ }
+
void DisableTracing() { TraceLog::GetInstance()->SetDisabled(); }
scoped_ptr<MemoryDumpManager> mdm_;
bool last_callback_success_;
+ scoped_ptr<MemoryDumpManagerDelegateForTesting> delegate_;
private:
scoped_ptr<MessageLoop> message_loop_;
- MemoryDumpManagerDelegateForTesting delegate_;
// We want our singleton torn down after each test.
ShadowingAtExitManager at_exit_manager_;
@@ -170,7 +195,7 @@ TEST_F(MemoryDumpManagerTest, SingleDumper) {
EnableTracing("foo-and-bar-but-not-memory");
EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(0);
mdm_->RequestGlobalDump(MemoryDumpType::EXPLICITLY_TRIGGERED,
- high_detail_args);
+ g_high_detail_args);
DisableTracing();
// Now repeat enabling the memory category and check that the dumper is
@@ -179,7 +204,7 @@ TEST_F(MemoryDumpManagerTest, SingleDumper) {
EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(3).WillRepeatedly(Return(true));
for (int i = 0; i < 3; ++i)
mdm_->RequestGlobalDump(MemoryDumpType::EXPLICITLY_TRIGGERED,
- high_detail_args);
+ g_high_detail_args);
DisableTracing();
mdm_->UnregisterDumpProvider(&mdp);
@@ -188,7 +213,7 @@ TEST_F(MemoryDumpManagerTest, SingleDumper) {
EnableTracing(MemoryDumpManager::kTraceCategory);
EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(0);
mdm_->RequestGlobalDump(MemoryDumpType::EXPLICITLY_TRIGGERED,
- high_detail_args);
+ g_high_detail_args);
TraceLog::GetInstance()->SetDisabled();
}
@@ -205,7 +230,7 @@ TEST_F(MemoryDumpManagerTest, CheckMemoryDumpArgs) {
Invoke(&mdp_high_detail,
&MockDumpProvider::OnMemoryDump_CheckMemoryDumpArgs));
mdm_->RequestGlobalDump(MemoryDumpType::EXPLICITLY_TRIGGERED,
- high_detail_args);
+ g_high_detail_args);
DisableTracing();
mdm_->UnregisterDumpProvider(&mdp_high_detail);
@@ -221,7 +246,7 @@ TEST_F(MemoryDumpManagerTest, CheckMemoryDumpArgs) {
Invoke(&mdp_low_detail,
&MockDumpProvider::OnMemoryDump_CheckMemoryDumpArgs));
mdm_->RequestGlobalDump(MemoryDumpType::EXPLICITLY_TRIGGERED,
- low_detail_args);
+ g_low_detail_args);
DisableTracing();
mdm_->UnregisterDumpProvider(&mdp_low_detail);
}
@@ -244,7 +269,7 @@ TEST_F(MemoryDumpManagerTest, SharedSessionState) {
for (int i = 0; i < 2; ++i)
mdm_->RequestGlobalDump(MemoryDumpType::EXPLICITLY_TRIGGERED,
- high_detail_args);
+ g_high_detail_args);
DisableTracing();
}
@@ -259,7 +284,7 @@ TEST_F(MemoryDumpManagerTest, MultipleDumpers) {
EXPECT_CALL(mdp1, OnMemoryDump(_, _)).Times(1).WillRepeatedly(Return(true));
EXPECT_CALL(mdp2, OnMemoryDump(_, _)).Times(0);
mdm_->RequestGlobalDump(MemoryDumpType::EXPLICITLY_TRIGGERED,
- high_detail_args);
+ g_high_detail_args);
DisableTracing();
// Invert: enable mdp1 and disable mdp2.
@@ -269,7 +294,7 @@ TEST_F(MemoryDumpManagerTest, MultipleDumpers) {
EXPECT_CALL(mdp1, OnMemoryDump(_, _)).Times(0);
EXPECT_CALL(mdp2, OnMemoryDump(_, _)).Times(1).WillRepeatedly(Return(true));
mdm_->RequestGlobalDump(MemoryDumpType::EXPLICITLY_TRIGGERED,
- high_detail_args);
+ g_high_detail_args);
DisableTracing();
// Enable both mdp1 and mdp2.
@@ -278,7 +303,7 @@ TEST_F(MemoryDumpManagerTest, MultipleDumpers) {
EXPECT_CALL(mdp1, OnMemoryDump(_, _)).Times(1).WillRepeatedly(Return(true));
EXPECT_CALL(mdp2, OnMemoryDump(_, _)).Times(1).WillRepeatedly(Return(true));
mdm_->RequestGlobalDump(MemoryDumpType::EXPLICITLY_TRIGGERED,
- high_detail_args);
+ g_high_detail_args);
DisableTracing();
}
@@ -293,7 +318,7 @@ TEST_F(MemoryDumpManagerTest, RegistrationConsistency) {
EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(1);
EnableTracing(MemoryDumpManager::kTraceCategory);
mdm_->RequestGlobalDump(MemoryDumpType::EXPLICITLY_TRIGGERED,
- high_detail_args);
+ g_high_detail_args);
DisableTracing();
}
@@ -303,7 +328,7 @@ TEST_F(MemoryDumpManagerTest, RegistrationConsistency) {
EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(0);
EnableTracing(MemoryDumpManager::kTraceCategory);
mdm_->RequestGlobalDump(MemoryDumpType::EXPLICITLY_TRIGGERED,
- high_detail_args);
+ g_high_detail_args);
DisableTracing();
}
@@ -314,7 +339,7 @@ TEST_F(MemoryDumpManagerTest, RegistrationConsistency) {
EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(0);
EnableTracing(MemoryDumpManager::kTraceCategory);
mdm_->RequestGlobalDump(MemoryDumpType::EXPLICITLY_TRIGGERED,
- high_detail_args);
+ g_high_detail_args);
DisableTracing();
}
@@ -326,7 +351,7 @@ TEST_F(MemoryDumpManagerTest, RegistrationConsistency) {
EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(1);
EnableTracing(MemoryDumpManager::kTraceCategory);
mdm_->RequestGlobalDump(MemoryDumpType::EXPLICITLY_TRIGGERED,
- high_detail_args);
+ g_high_detail_args);
DisableTracing();
}
}
@@ -366,7 +391,7 @@ TEST_F(MemoryDumpManagerTest, RespectTaskRunnerAffinity) {
Bind(&MemoryDumpManagerTest::DumpCallbackAdapter, Unretained(this),
MessageLoop::current()->task_runner(), run_loop.QuitClosure());
mdm_->RequestGlobalDump(MemoryDumpType::EXPLICITLY_TRIGGERED,
- high_detail_args, callback);
+ g_high_detail_args, callback);
// This nested message loop (|run_loop|) will be quit if and only if
// the RequestGlobalDump callback is invoked.
run_loop.Run();
@@ -414,7 +439,7 @@ TEST_F(MemoryDumpManagerTest, DisableFailingDumpers) {
for (int i = 0; i < 1 + MemoryDumpManager::kMaxConsecutiveFailuresCount;
i++) {
mdm_->RequestGlobalDump(MemoryDumpType::EXPLICITLY_TRIGGERED,
- high_detail_args);
+ g_high_detail_args);
}
DisableTracing();
@@ -445,7 +470,7 @@ TEST_F(MemoryDumpManagerTest, RegisterDumperWhileDumping) {
for (int i = 0; i < 4; i++) {
mdm_->RequestGlobalDump(MemoryDumpType::EXPLICITLY_TRIGGERED,
- high_detail_args);
+ g_high_detail_args);
}
DisableTracing();
@@ -476,7 +501,7 @@ TEST_F(MemoryDumpManagerTest, UnregisterDumperWhileDumping) {
for (int i = 0; i < 4; i++) {
mdm_->RequestGlobalDump(MemoryDumpType::EXPLICITLY_TRIGGERED,
- high_detail_args);
+ g_high_detail_args);
}
DisableTracing();
@@ -526,7 +551,7 @@ TEST_F(MemoryDumpManagerTest, UnregisterDumperFromThreadWhileDumping) {
EnableTracing(MemoryDumpManager::kTraceCategory);
MemoryDumpRequestArgs request_args = {0, MemoryDumpType::EXPLICITLY_TRIGGERED,
- high_detail_args};
+ g_high_detail_args};
mdm_->CreateProcessDump(request_args, callback);
run_loop.Run();
@@ -552,11 +577,65 @@ TEST_F(MemoryDumpManagerTest, CallbackCalledOnFailure) {
Bind(&MemoryDumpManagerTest::DumpCallbackAdapter, Unretained(this),
MessageLoop::current()->task_runner(), run_loop.QuitClosure());
mdm_->RequestGlobalDump(MemoryDumpType::EXPLICITLY_TRIGGERED,
- high_detail_args, callback);
+ g_high_detail_args, callback);
run_loop.Run();
}
EXPECT_FALSE(last_callback_success_);
}
+MATCHER(IsHighDetail, "") {
+ return arg.dump_args.level_of_detail == MemoryDumpArgs::LevelOfDetail::HIGH;
+}
+
+MATCHER(IsLowDetail, "") {
+ return arg.dump_args.level_of_detail == MemoryDumpArgs::LevelOfDetail::LOW;
+}
+
+TEST_F(MemoryDumpManagerTest, SchedulePeriodicDumpsFromTraceConfig) {
+ const char kMemoryDumpTraceConfigString[] =
+ "{"
+ "\"included_categories\":["
+ "\"disabled-by-default-memory-infra\""
+ "],"
+ "\"memory_dump_config\":{"
+ "\"triggers\":["
+ "{"
+ "\"mode\":\"light\","
+ "\"periodic_interval_ms\":1"
+ "},"
+ "{"
+ "\"mode\":\"detailed\","
+ "\"periodic_interval_ms\":3"
+ "}"
+ "]"
+ "}"
+ "}";
+
+ RunLoop run_loop;
+ scoped_ptr<MemoryDumpManagerDelegateForPeriodicDumpTest> delegate(
+ new MemoryDumpManagerDelegateForPeriodicDumpTest());
+
+ auto quit_closure = run_loop.QuitClosure();
+ testing::InSequence sequence;
+ EXPECT_CALL(*delegate.get(), RequestGlobalMemoryDump(IsHighDetail(), _))
+ .Times(1);
+ EXPECT_CALL(*delegate.get(), RequestGlobalMemoryDump(IsLowDetail(), _))
+ .Times(2);
+ EXPECT_CALL(*delegate.get(), RequestGlobalMemoryDump(IsHighDetail(), _))
+ .Times(1);
+ EXPECT_CALL(*delegate.get(), RequestGlobalMemoryDump(IsLowDetail(), _))
+ .Times(1)
+ .WillOnce(Invoke([quit_closure](const MemoryDumpRequestArgs& args,
+ const MemoryDumpCallback& callback) {
+ TraceLog::GetInstance()->SetDisabled();
+ ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, quit_closure);
+ }));
+
+ SetDelegate(delegate.Pass());
+ EnableTracingWithTraceConfig(kMemoryDumpTraceConfigString);
+
+ run_loop.Run();
+}
+
} // namespace trace_event
} // namespace base
« no previous file with comments | « base/trace_event/memory_dump_manager.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698