| 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..51d41943fba0416fd9ad5f167d78cbbbdbc51a1c 100644
|
| --- a/base/trace_event/memory_dump_manager_unittest.cc
|
| +++ b/base/trace_event/memory_dump_manager_unittest.cc
|
| @@ -25,6 +25,7 @@
|
| #include "base/threading/thread.h"
|
| #include "base/threading/thread_task_runner_handle.h"
|
| #include "base/trace_event/memory_dump_provider.h"
|
| +#include "base/trace_event/memory_dump_scheduler.h"
|
| #include "base/trace_event/memory_infra_background_whitelist.h"
|
| #include "base/trace_event/process_memory_dump.h"
|
| #include "base/trace_event/trace_buffer.h"
|
| @@ -273,17 +274,13 @@ class MemoryDumpManagerTest : public testing::Test {
|
| void DisableTracing() { TraceLog::GetInstance()->SetDisabled(); }
|
|
|
| bool IsPeriodicDumpingEnabled() const {
|
| - return mdm_->periodic_dump_timer_.IsRunning();
|
| + return mdm_->dump_scheduler_->IsPeriodicTimerRunningForTesting();
|
| }
|
|
|
| int GetMaxConsecutiveFailuresCount() const {
|
| return MemoryDumpManager::kMaxConsecutiveFailuresCount;
|
| }
|
|
|
| - scoped_refptr<SequencedTaskRunner> GetPollingTaskRunnerUnsafe() {
|
| - return mdm_->dump_thread_->task_runner();
|
| - }
|
| -
|
| const MemoryDumpProvider::Options kDefaultOptions;
|
| std::unique_ptr<MemoryDumpManager> mdm_;
|
| std::unique_ptr<MemoryDumpManagerDelegateForTesting> delegate_;
|
| @@ -764,46 +761,57 @@ TEST_F(MemoryDumpManagerTest, TestPollingOnDumpThread) {
|
| EXPECT_CALL(*mdp1, Destructor());
|
| EXPECT_CALL(*mdp2, Destructor());
|
|
|
| + MemoryDumpProvider::Options options;
|
| + options.is_fast_polling_supported = true;
|
| + RegisterDumpProvider(mdp1.get(), nullptr, options);
|
| +
|
| RunLoop run_loop;
|
| scoped_refptr<SingleThreadTaskRunner> 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(4)
|
| - .WillRepeatedly(Invoke([&call_count, &test_task_runner,
|
| - quit_closure](uint64_t* total) -> void {
|
| - ++call_count;
|
| - if (call_count == 4)
|
| - test_task_runner->PostTask(FROM_HERE, quit_closure);
|
| - }));
|
| + .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, 4))
|
| + .Times(Between(0, kPollsToQuit - 1))
|
| .WillRepeatedly(Return());
|
|
|
| - MemoryDumpProvider::Options options;
|
| - options.is_fast_polling_supported = true;
|
| - RegisterDumpProvider(mdp1.get(), nullptr, options);
|
| + MemoryDumpScheduler::SetPollingIntervalForTesting(1);
|
| EnableTracingWithTraceConfig(
|
| - TraceConfigMemoryTestUtil::GetTraceConfig_PeakDetectionTrigger(1));
|
| - scoped_refptr<SequencedTaskRunner> polling_task_runner =
|
| - GetPollingTaskRunnerUnsafe().get();
|
| - ASSERT_TRUE(polling_task_runner);
|
| + TraceConfigMemoryTestUtil::GetTraceConfig_PeakDetectionTrigger(3));
|
|
|
| - uint64_t value = 0;
|
| - for (int i = 0; i < 4; i++) {
|
| - if (i == 0)
|
| - RegisterDumpProvider(mdp2.get(), nullptr, options);
|
| - if (i == 2)
|
| - mdm_->UnregisterAndDeleteDumpProviderSoon(std::move(mdp2));
|
| - polling_task_runner->PostTask(
|
| - FROM_HERE, Bind(&MemoryDumpManagerTest::PollFastMemoryTotal,
|
| - Unretained(this), &value));
|
| - }
|
| + 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;
|
| + }));
|
|
|
| run_loop.Run();
|
| DisableTracing();
|
|
|