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

Unified Diff: base/trace_event/memory_dump_manager_unittest.cc

Issue 2582453002: [tracing] Implement polling in MemoryDumpManager (Closed)
Patch Set: Address comments. Created 3 years, 10 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
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..c75ced83610cd1a72a2149b2116d396755c8d4c0 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 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);
+ 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();

Powered by Google App Engine
This is Rietveld 408576698