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

Unified Diff: base/trace_event/memory_dump_manager_unittest.cc

Issue 2582453002: [tracing] Implement polling in MemoryDumpManager (Closed)
Patch Set: Created 4 years 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 48a50616574589a24473715880f3415f60b648f5..0c84afcb321178db75341786fd2bcac0fe8a158a 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_trigger.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"
@@ -270,17 +271,11 @@ class MemoryDumpManagerTest : public testing::Test {
void DisableTracing() { TraceLog::GetInstance()->SetDisabled(); }
- bool IsPeriodicDumpingEnabled() const {
- return mdm_->periodic_dump_timer_.IsRunning();
- }
-
int GetMaxConsecutiveFailuresCount() const {
return MemoryDumpManager::kMaxConsecutiveFailuresCount;
}
- scoped_refptr<SequencedTaskRunner> GetPollingTaskRunnerUnsafe() {
- return mdm_->dump_thread_->task_runner();
- }
+ MemoryDumpTrigger* GetDumpTrigger() { return mdm_->dump_trigger_.get(); }
const MemoryDumpProvider::Options kDefaultOptions;
std::unique_ptr<MemoryDumpManager> mdm_;
@@ -762,46 +757,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,
+ 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 10s of GiB of memory.
+ *total = call_count * 10lu * 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);
+ MemoryDumpTrigger::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();
@@ -924,7 +930,7 @@ TEST_F(MemoryDumpManagerTest, TraceConfigExpectations) {
// Enabling memory-infra in a non-coordinator process should not trigger any
// periodic dumps.
EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
- EXPECT_FALSE(IsPeriodicDumpingEnabled());
+ EXPECT_FALSE(GetDumpTrigger()->IsPeriodicDumpTimerRunning());
DisableTracing();
// Enabling memory-infra with the new (JSON) TraceConfig in a non-coordinator
@@ -932,7 +938,7 @@ TEST_F(MemoryDumpManagerTest, TraceConfigExpectations) {
// dumps.
EnableTracingWithTraceConfig(
TraceConfigMemoryTestUtil::GetTraceConfig_PeriodicTriggers(1, 5));
- EXPECT_FALSE(IsPeriodicDumpingEnabled());
+ EXPECT_FALSE(GetDumpTrigger()->IsPeriodicDumpTimerRunning());
DisableTracing();
}
@@ -944,7 +950,7 @@ TEST_F(MemoryDumpManagerTest, TraceConfigExpectationsWhenIsCoordinator) {
// Enabling memory-infra with the legacy TraceConfig (category filter) in
// a coordinator process should enable periodic dumps.
EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
- EXPECT_TRUE(IsPeriodicDumpingEnabled());
+ EXPECT_TRUE(GetDumpTrigger()->IsPeriodicDumpTimerRunning());
DisableTracing();
// Enabling memory-infra with the new (JSON) TraceConfig in a coordinator
@@ -953,7 +959,7 @@ TEST_F(MemoryDumpManagerTest, TraceConfigExpectationsWhenIsCoordinator) {
// is: ticking memory-infra should dump periodically with the default config.
EnableTracingWithTraceConfig(
TraceConfigMemoryTestUtil::GetTraceConfig_NoTriggers());
- EXPECT_TRUE(IsPeriodicDumpingEnabled());
+ EXPECT_TRUE(GetDumpTrigger()->IsPeriodicDumpTimerRunning());
DisableTracing();
// Enabling memory-infra with the new (JSON) TraceConfig in a coordinator
@@ -962,7 +968,7 @@ TEST_F(MemoryDumpManagerTest, TraceConfigExpectationsWhenIsCoordinator) {
// only explicitly triggered dumps.
EnableTracingWithTraceConfig(
TraceConfigMemoryTestUtil::GetTraceConfig_EmptyTriggers());
- EXPECT_FALSE(IsPeriodicDumpingEnabled());
+ EXPECT_FALSE(GetDumpTrigger()->IsPeriodicDumpTimerRunning());
DisableTracing();
// Enabling memory-infra with the new (JSON) TraceConfig in a coordinator
@@ -1223,7 +1229,7 @@ TEST_F(MemoryDumpManagerTest, TestWhitelistingMDP) {
EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1);
EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
- EXPECT_FALSE(IsPeriodicDumpingEnabled());
+ EXPECT_FALSE(GetDumpTrigger()->IsPeriodicDumpTimerRunning());
RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
MemoryDumpLevelOfDetail::BACKGROUND);
DisableTracing();
@@ -1259,7 +1265,7 @@ TEST_F(MemoryDumpManagerTest, TestBackgroundTracingSetup) {
MemoryDumpLevelOfDetail::DETAILED);
EXPECT_FALSE(last_callback_success_);
- ASSERT_TRUE(IsPeriodicDumpingEnabled());
+ ASSERT_TRUE(GetDumpTrigger()->IsPeriodicDumpTimerRunning());
run_loop.Run();
DisableTracing();
}

Powered by Google App Engine
This is Rietveld 408576698