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 cb7af6215d7eb6d75079f7579118c85a2cef800f..48f747de9590f1db976abc3426a6005775f2ea3b 100644 |
--- a/base/trace_event/memory_dump_manager_unittest.cc |
+++ b/base/trace_event/memory_dump_manager_unittest.cc |
@@ -244,10 +244,6 @@ class MemoryDumpManagerTest : public testing::Test { |
task_runner->PostTask(FROM_HERE, closure); |
} |
- void PollFastMemoryTotal(uint64_t* memory_total) { |
- mdm_->PollFastMemoryTotal(memory_total); |
- } |
- |
protected: |
void InitializeMemoryDumpManager(bool is_coordinator) { |
mdm_->set_dumper_registrations_ignored_for_testing(true); |
@@ -278,8 +274,7 @@ class MemoryDumpManagerTest : public testing::Test { |
void DisableTracing() { TraceLog::GetInstance()->SetDisabled(); } |
bool IsPeriodicDumpingEnabled() const { |
- return MemoryDumpScheduler::GetInstance() |
- ->IsPeriodicTimerRunningForTesting(); |
+ return MemoryDumpScheduler::GetInstance()->is_enabled_for_testing(); |
} |
int GetMaxConsecutiveFailuresCount() const { |
@@ -766,9 +761,6 @@ TEST_F(MemoryDumpManagerTest, TestPollingOnDumpThread) { |
std::unique_ptr<MockMemoryDumpProvider> mdp2(new MockMemoryDumpProvider()); |
mdp1->enable_mock_destructor = true; |
mdp2->enable_mock_destructor = true; |
- |
- EXPECT_CALL(*mdp1, SuspendFastMemoryPolling()).Times(1); |
- EXPECT_CALL(*mdp2, SuspendFastMemoryPolling()).Times(1); |
EXPECT_CALL(*mdp1, Destructor()); |
EXPECT_CALL(*mdp2, Destructor()); |
@@ -777,53 +769,37 @@ TEST_F(MemoryDumpManagerTest, TestPollingOnDumpThread) { |
RegisterDumpProvider(mdp1.get(), nullptr, options); |
RunLoop run_loop; |
- scoped_refptr<SingleThreadTaskRunner> test_task_runner = |
- ThreadTaskRunnerHandle::Get(); |
+ auto test_task_runner = ThreadTaskRunnerHandle::Get(); |
auto quit_closure = run_loop.QuitClosure(); |
- |
- const int kPollsToQuit = 10; |
- int call_count = 0; |
MemoryDumpManager* mdm = mdm_.get(); |
- const auto poll_function1 = [&call_count, &test_task_runner, quit_closure, |
- &mdp2, mdm, &options, kPollsToQuit, |
- this](uint64_t* total) -> void { |
- ++call_count; |
- if (call_count == 1) |
- RegisterDumpProvider(mdp2.get(), nullptr, options, kMDPName); |
- else if (call_count == 4) |
- mdm->UnregisterAndDeleteDumpProviderSoon(std::move(mdp2)); |
- else if (call_count == kPollsToQuit) |
- test_task_runner->PostTask(FROM_HERE, quit_closure); |
- |
- // Record increase of 1 GiB of memory at each call. |
- *total = static_cast<uint64_t>(call_count) * 1024 * 1024 * 1024; |
- }; |
- EXPECT_CALL(*mdp1, PollFastMemoryTotal(_)) |
- .Times(testing::AtLeast(kPollsToQuit)) |
- .WillRepeatedly(Invoke(poll_function1)); |
- // Depending on the order of PostTask calls the mdp2 might be registered after |
- // all polls or in between polls. |
- EXPECT_CALL(*mdp2, PollFastMemoryTotal(_)) |
- .Times(Between(0, kPollsToQuit - 1)) |
+ EXPECT_CALL(*mdp1, PollFastMemoryTotal(_)) |
+ .WillOnce(Invoke([&mdp2, options, this](uint64_t*) { |
+ RegisterDumpProvider(mdp2.get(), nullptr, options); |
+ })) |
+ .WillOnce(Return()) |
+ .WillOnce(Invoke([mdm, &mdp2](uint64_t*) { |
+ mdm->UnregisterAndDeleteDumpProviderSoon(std::move(mdp2)); |
+ })) |
+ .WillOnce(Invoke([test_task_runner, quit_closure](uint64_t*) { |
+ test_task_runner->PostTask(FROM_HERE, quit_closure); |
+ })) |
.WillRepeatedly(Return()); |
- MemoryDumpScheduler::SetPollingIntervalForTesting(1); |
- EnableTracingWithTraceConfig( |
- TraceConfigMemoryTestUtil::GetTraceConfig_PeakDetectionTrigger(3)); |
+ // We expect a call to |mdp1| because it is still registered at the time the |
+ // Peak detector is Stop()-ed (upon OnTraceLogDisabled(). We do NOT expect |
+ // instead a call for |mdp2|, because that gets unregisterd before the Stop(). |
+ EXPECT_CALL(*mdp1, SuspendFastMemoryPolling()).Times(1); |
+ EXPECT_CALL(*mdp2, SuspendFastMemoryPolling()).Times(0); |
- int last_poll_to_request_dump = -2; |
- EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)) |
- .Times(testing::AtLeast(2)) |
- .WillRepeatedly(Invoke([&last_poll_to_request_dump, &call_count]( |
- const MemoryDumpRequestArgs& args, |
- const MemoryDumpCallback& callback) -> void { |
- // Minimum number of polls between dumps must be 3 (polling interval is |
- // 1ms). |
- EXPECT_GE(call_count - last_poll_to_request_dump, 3); |
- last_poll_to_request_dump = call_count; |
- })); |
+ // |mdp2| should invoke exactly twice: |
+ // - once after the registrarion, when |mdp1| hits the first Return() |
+ // - the 2nd time when |mdp1| unregisters |mdp1|. The unregistration is |
+ // posted and will necessarily happen after the polling task. |
+ EXPECT_CALL(*mdp2, PollFastMemoryTotal(_)).Times(2).WillRepeatedly(Return()); |
+ EnableTracingWithTraceConfig( |
+ TraceConfigMemoryTestUtil::GetTraceConfig_PeakDetectionTrigger(1)); |
run_loop.Run(); |
DisableTracing(); |
mdm_->UnregisterAndDeleteDumpProviderSoon(std::move(mdp1)); |
@@ -989,6 +965,7 @@ TEST_F(MemoryDumpManagerTest, TraceConfigExpectationsWhenIsCoordinator) { |
// process with a fully defined trigger config should cause periodic dumps to |
// be performed in the correct order. |
RunLoop run_loop; |
+ auto test_task_runner = ThreadTaskRunnerHandle::Get(); |
auto quit_closure = run_loop.QuitClosure(); |
const int kHeavyDumpRate = 5; |
@@ -1003,10 +980,11 @@ TEST_F(MemoryDumpManagerTest, TraceConfigExpectationsWhenIsCoordinator) { |
EXPECT_CALL(delegate, RequestGlobalMemoryDump(IsLightDump(), _)) |
.Times(kHeavyDumpRate - 2); |
EXPECT_CALL(delegate, RequestGlobalMemoryDump(IsLightDump(), _)) |
- .WillOnce(Invoke([quit_closure](const MemoryDumpRequestArgs& args, |
- const MemoryDumpCallback& callback) { |
- ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, quit_closure); |
- })); |
+ .WillOnce(Invoke( |
+ [test_task_runner, quit_closure](const MemoryDumpRequestArgs& args, |
+ const MemoryDumpCallback& callback) { |
+ test_task_runner->PostTask(FROM_HERE, quit_closure); |
+ })); |
// Swallow all the final spurious calls until tracing gets disabled. |
EXPECT_CALL(delegate, RequestGlobalMemoryDump(_, _)).Times(AnyNumber()); |
@@ -1259,16 +1237,18 @@ TEST_F(MemoryDumpManagerTest, TestBackgroundTracingSetup) { |
InitializeMemoryDumpManager(true /* is_coordinator */); |
RunLoop run_loop; |
+ auto test_task_runner = ThreadTaskRunnerHandle::Get(); |
auto quit_closure = run_loop.QuitClosure(); |
testing::InSequence sequence; |
EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(IsBackgroundDump(), _)) |
.Times(5); |
EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(IsBackgroundDump(), _)) |
- .WillOnce(Invoke([quit_closure](const MemoryDumpRequestArgs& args, |
- const MemoryDumpCallback& callback) { |
- ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, quit_closure); |
- })); |
+ .WillOnce(Invoke( |
+ [test_task_runner, quit_closure](const MemoryDumpRequestArgs& args, |
+ const MemoryDumpCallback& callback) { |
+ test_task_runner->PostTask(FROM_HERE, quit_closure); |
+ })); |
EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(AnyNumber()); |
EnableTracingWithTraceConfig( |