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

Unified Diff: components/memory_pressure/memory_pressure_monitor_unittest.cc

Issue 2874553004: Remove memory_pressure component. (Closed)
Patch Set: Created 3 years, 7 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: components/memory_pressure/memory_pressure_monitor_unittest.cc
diff --git a/components/memory_pressure/memory_pressure_monitor_unittest.cc b/components/memory_pressure/memory_pressure_monitor_unittest.cc
deleted file mode 100644
index b957832bef131233389e71a1ebe27185a7f7d8b9..0000000000000000000000000000000000000000
--- a/components/memory_pressure/memory_pressure_monitor_unittest.cc
+++ /dev/null
@@ -1,389 +0,0 @@
-// Copyright 2016 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "components/memory_pressure/memory_pressure_monitor.h"
-
-#include <memory>
-#include <utility>
-
-#include "base/bind.h"
-#include "base/task_runner.h"
-#include "base/test/simple_test_tick_clock.h"
-#include "base/tracked_objects.h"
-#include "components/memory_pressure/memory_pressure_stats_collector.h"
-#include "components/memory_pressure/test_memory_pressure_calculator.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace memory_pressure {
-
-namespace {
-
-using MemoryPressureLevel = MemoryPressureMonitor::MemoryPressureLevel;
-const MemoryPressureLevel MEMORY_PRESSURE_LEVEL_NONE =
- MemoryPressureListener::MEMORY_PRESSURE_LEVEL_NONE;
-const MemoryPressureLevel MEMORY_PRESSURE_LEVEL_MODERATE =
- MemoryPressureListener::MEMORY_PRESSURE_LEVEL_MODERATE;
-const MemoryPressureLevel MEMORY_PRESSURE_LEVEL_CRITICAL =
- MemoryPressureListener::MEMORY_PRESSURE_LEVEL_CRITICAL;
-
-using testing::_;
-
-} // namespace
-
-// A mock task runner. This isn't directly a TaskRunner as the reference
-// counting confuses gmock.
-class LenientMockTaskRunner {
- public:
- MOCK_METHOD2(PostDelayedTask,
- bool(const tracked_objects::Location&, base::TimeDelta));
-};
-using MockTaskRunner = testing::StrictMock<LenientMockTaskRunner>;
-
-// A TaskRunner implementation that wraps a MockTaskRunner.
-class TaskRunnerProxy : public base::TaskRunner {
- public:
- // The provided |mock| must outlive this object.
- explicit TaskRunnerProxy(MockTaskRunner* mock) : mock_(mock) {}
- bool RunsTasksInCurrentSequence() const override { return true; }
- bool PostDelayedTask(const tracked_objects::Location& location,
- base::OnceClosure closure,
- base::TimeDelta delta) override {
- return mock_->PostDelayedTask(location, delta);
- }
-
- private:
- MockTaskRunner* mock_;
- ~TaskRunnerProxy() override {}
-};
-
-class TestMemoryPressureMonitor : public MemoryPressureMonitor {
- public:
- // Expose the callback that is used for scheduled checks.
- using MemoryPressureMonitor::CheckPressureAndUpdateStats;
-
-#if !defined(MEMORY_PRESSURE_IS_POLLING)
- using MemoryPressureMonitor::OnMemoryPressureChanged;
-#endif
-
-#if defined(MEMORY_PRESSURE_IS_POLLING)
- TestMemoryPressureMonitor(scoped_refptr<base::TaskRunner> task_runner,
- base::TickClock* tick_clock,
- MemoryPressureStatsCollector* stats_collector,
- MemoryPressureCalculator* calculator,
- DispatchCallback dispatch_callback)
- : MemoryPressureMonitor(task_runner,
- tick_clock,
- stats_collector,
- calculator,
- dispatch_callback) {}
-#else // MEMORY_PRESSURE_IS_POLLING
- TestMemoryPressureMonitor(scoped_refptr<base::TaskRunner> task_runner,
- base::TickClock* tick_clock,
- MemoryPressureStatsCollector* stats_collector,
- DispatchCallback dispatch_callback,
- MemoryPressureLevel initial_level)
- : MemoryPressureMonitor(task_runner,
- tick_clock,
- stats_collector,
- dispatch_callback,
- initial_level) {}
-#endif // !MEMORY_PRESSURE_IS_POLLING
-
- // A handful of accessors for unittesting.
- MemoryPressureLevel current_memory_pressure_level() const {
- return current_memory_pressure_level_;
- }
- const std::map<int, base::TimeTicks>& scheduled_checks() const {
- return scheduled_checks_;
- }
- int serial_number() const { return serial_number_; }
-};
-
-// A mock dispatch class.
-class LenientMockDispatch {
- public:
- MOCK_METHOD1(Dispatch, void(MemoryPressureLevel));
-};
-using MockDispatch = testing::StrictMock<LenientMockDispatch>;
-
-class MemoryPressureMonitorTest : public testing::Test {
- public:
- MemoryPressureMonitorTest()
- : task_runner_proxy_(new TaskRunnerProxy(&mock_task_runner_)),
- stats_collector_(&tick_clock_) {}
-
-#if defined(MEMORY_PRESSURE_IS_POLLING)
- // Creates a monitor in the given initial pressure level and validates its
- // state.
- void CreateMonitor(MemoryPressureLevel initial_level) {
- calculator_.SetLevel(initial_level);
- Tick(1); // Advance the clock so it doesn't return zero.
-
- // Determine the delay with which we expect the task to be posted.
- int delay = MemoryPressureMonitor::kDefaultPollingIntervalMs;
- if (initial_level == MEMORY_PRESSURE_LEVEL_MODERATE)
- delay = MemoryPressureMonitor::kNotificationIntervalPressureModerateMs;
- else if (initial_level == MEMORY_PRESSURE_LEVEL_CRITICAL)
- delay = MemoryPressureMonitor::kNotificationIntervalPressureCriticalMs;
-
- // The monitor will make one call to the task runner during construction.
- ExpectTaskPosted(delay);
- monitor_.reset(new TestMemoryPressureMonitor(
- task_runner_proxy_, &tick_clock_, &stats_collector_, &calculator_,
- base::Bind(&MockDispatch::Dispatch,
- base::Unretained(&mock_dispatch_))));
- VerifyAndClearExpectations();
- EXPECT_EQ(1u, monitor_->scheduled_checks().size());
-
- // The monitor should have made one call immediately to the calculator_.
- EXPECT_EQ(1, calculator_.calls());
- ExpectPressure(initial_level);
- calculator_.ResetCalls();
- }
-#else // MEMORY_PRESSURE_IS_POLLING
- void CreateMonitor(MemoryPressureLevel initial_level) {
- Tick(1); // Advance the clock so it doesn't return zero.
-
- // The monitor will make one call to the task runner during construction.
- ExpectTaskPosted(MemoryPressureMonitor::kDefaultPollingIntervalMs);
- monitor_.reset(new TestMemoryPressureMonitor(
- task_runner_proxy_, &tick_clock_, &stats_collector_,
- base::Bind(&MockDispatch::Dispatch, base::Unretained(&mock_dispatch_)),
- initial_level));
- VerifyAndClearExpectations();
- EXPECT_EQ(1u, monitor_->scheduled_checks().size());
-
- // The monitor should have made one call immediately to the calculator_.
- ExpectPressure(initial_level);
- }
-#endif // !MEMORY_PRESSURE_IS_POLLING
-
- // Advances the tick clock by the given number of milliseconds.
- void Tick(int ms) {
- tick_clock_.Advance(base::TimeDelta::FromMilliseconds(ms));
- }
-
- // Sets expectations for tasks scheduled via |mock_task_runner_|.
- void ExpectTaskPosted(int delay_ms) {
- base::TimeDelta delay = base::TimeDelta::FromMilliseconds(delay_ms);
- EXPECT_CALL(mock_task_runner_, PostDelayedTask(_, delay))
- .WillOnce(testing::Return(true));
- }
-
- // Sets up expectations for calls to |mock_dispatch_|.
- void ExpectDispatch(MemoryPressureLevel level) {
- EXPECT_CALL(mock_dispatch_, Dispatch(level));
- }
- void ExpectDispatchModerate() {
- EXPECT_CALL(mock_dispatch_, Dispatch(MEMORY_PRESSURE_LEVEL_MODERATE));
- }
- void ExpectDispatchCritical() {
- EXPECT_CALL(mock_dispatch_, Dispatch(MEMORY_PRESSURE_LEVEL_CRITICAL));
- }
-
- // Verifies and clears expectations for both |mock_task_runner_| and
- // |mock_dispatch_|.
- void VerifyAndClearExpectations() {
- testing::Mock::VerifyAndClearExpectations(&mock_task_runner_);
- testing::Mock::VerifyAndClearExpectations(&mock_dispatch_);
- }
-
- // Checks expectations on |monitor_->current_memory_pressure_level()|.
- void ExpectPressure(MemoryPressureLevel level) {
- EXPECT_EQ(level, monitor_->current_memory_pressure_level());
- }
- void ExpectNone() {
- EXPECT_EQ(MEMORY_PRESSURE_LEVEL_NONE,
- monitor_->current_memory_pressure_level());
- }
- void ExpectModerate() {
- EXPECT_EQ(MEMORY_PRESSURE_LEVEL_MODERATE,
- monitor_->current_memory_pressure_level());
- }
- void ExpectCritical() {
- EXPECT_EQ(MEMORY_PRESSURE_LEVEL_CRITICAL,
- monitor_->current_memory_pressure_level());
- }
-
- MockTaskRunner mock_task_runner_;
- scoped_refptr<TaskRunnerProxy> task_runner_proxy_;
- base::SimpleTestTickClock tick_clock_;
- MemoryPressureStatsCollector stats_collector_;
-
-#if defined(MEMORY_PRESSURE_IS_POLLING)
- TestMemoryPressureCalculator calculator_;
-#endif
-
- MockDispatch mock_dispatch_;
- std::unique_ptr<TestMemoryPressureMonitor> monitor_;
-};
-
-TEST_F(MemoryPressureMonitorTest, NormalScheduling) {
- CreateMonitor(MEMORY_PRESSURE_LEVEL_NONE);
-
- Tick(MemoryPressureMonitor::kDefaultPollingIntervalMs);
- ExpectTaskPosted(MemoryPressureMonitor::kDefaultPollingIntervalMs);
- monitor_->CheckPressureAndUpdateStats(monitor_->serial_number());
- VerifyAndClearExpectations();
-
- Tick(MemoryPressureMonitor::kDefaultPollingIntervalMs);
- ExpectTaskPosted(MemoryPressureMonitor::kDefaultPollingIntervalMs);
- monitor_->CheckPressureAndUpdateStats(monitor_->serial_number());
- VerifyAndClearExpectations();
-}
-
-#if defined(MEMORY_PRESSURE_IS_POLLING)
-
-TEST_F(MemoryPressureMonitorTest, CalculatorNotAlwaysInvoked) {
- CreateMonitor(MEMORY_PRESSURE_LEVEL_NONE);
-
- // Callback into the monitor too soon and expect nothing to happen.
- Tick(1);
- EXPECT_EQ(MEMORY_PRESSURE_LEVEL_NONE, monitor_->GetCurrentPressureLevel());
- VerifyAndClearExpectations();
- EXPECT_EQ(0, calculator_.calls());
- ExpectNone();
- EXPECT_EQ(1u, monitor_->scheduled_checks().size());
-
- // Pass sufficient time that the rate limiter will allow another calculation.
- // Don't expect another scheduled call because there's already one pending.
- Tick(MemoryPressureMonitor::kMinimumTimeBetweenSamplesMs);
- EXPECT_EQ(MEMORY_PRESSURE_LEVEL_NONE, monitor_->GetCurrentPressureLevel());
- VerifyAndClearExpectations();
- EXPECT_EQ(1, calculator_.calls());
- ExpectNone();
- EXPECT_EQ(1u, monitor_->scheduled_checks().size());
-}
-
-TEST_F(MemoryPressureMonitorTest, NoPressureScheduling) {
- CreateMonitor(MEMORY_PRESSURE_LEVEL_NONE);
-
- // Step forward by a polling interval. This should cause another scheduled
- // check to be posted.
- Tick(MemoryPressureMonitor::kDefaultPollingIntervalMs);
- ExpectTaskPosted(MemoryPressureMonitor::kDefaultPollingIntervalMs);
- monitor_->CheckPressureAndUpdateStats(monitor_->serial_number());
- VerifyAndClearExpectations();
- ExpectNone();
- EXPECT_EQ(1u, monitor_->scheduled_checks().size());
-}
-
-TEST_F(MemoryPressureMonitorTest, NoPressureToModerateViaScheduling) {
- CreateMonitor(MEMORY_PRESSURE_LEVEL_NONE);
-
- // Step forward by a polling interval. This should cause another scheduled
- // check to be posted.
- calculator_.SetModerate();
- Tick(MemoryPressureMonitor::kDefaultPollingIntervalMs);
- ExpectTaskPosted(
- MemoryPressureMonitor::kNotificationIntervalPressureModerateMs);
- ExpectDispatchModerate();
- monitor_->CheckPressureAndUpdateStats(monitor_->serial_number());
- VerifyAndClearExpectations();
- ExpectModerate();
- EXPECT_EQ(1u, monitor_->scheduled_checks().size());
-}
-
-TEST_F(MemoryPressureMonitorTest, NoPressureToCriticalViaScheduling) {
- CreateMonitor(MEMORY_PRESSURE_LEVEL_NONE);
-
- // Step forward by a polling interval. This should cause another scheduled
- // check to be posted.
- calculator_.SetCritical();
- Tick(MemoryPressureMonitor::kDefaultPollingIntervalMs);
- ExpectTaskPosted(
- MemoryPressureMonitor::kNotificationIntervalPressureCriticalMs);
- ExpectDispatchCritical();
- monitor_->CheckPressureAndUpdateStats(monitor_->serial_number());
- VerifyAndClearExpectations();
- ExpectCritical();
- EXPECT_EQ(1u, monitor_->scheduled_checks().size());
-}
-
-TEST_F(MemoryPressureMonitorTest, ModeratePressureToCriticalViaScheduling) {
- CreateMonitor(MEMORY_PRESSURE_LEVEL_MODERATE);
-
- // Step forward by a polling interval. This should cause another scheduled
- // check to be posted.
- calculator_.SetCritical();
- Tick(MemoryPressureMonitor::kNotificationIntervalPressureModerateMs);
- ExpectTaskPosted(
- MemoryPressureMonitor::kNotificationIntervalPressureCriticalMs);
- ExpectDispatchCritical();
- monitor_->CheckPressureAndUpdateStats(monitor_->serial_number());
- VerifyAndClearExpectations();
- ExpectCritical();
- EXPECT_EQ(1u, monitor_->scheduled_checks().size());
-}
-
-TEST_F(MemoryPressureMonitorTest, UnscheduledStateChange) {
- CreateMonitor(MEMORY_PRESSURE_LEVEL_NONE);
-
- // Callback into the monitor directly. This will change the memory pressure
- // and cause a new call to be scheduled as the higher memory pressure has a
- // higher renotification frequency.
- // NOTE: This test relies implicitly on the following facts:
- // kMinimumTimeBetweenSamplesMs < kDefaultPollingIntervalMs / 2
- // kNotificationIntervalPressureCriticalMs < kDefaultPollingIntervalMs / 2
- calculator_.SetCritical();
- Tick(MemoryPressureMonitor::kDefaultPollingIntervalMs / 2);
- ExpectTaskPosted(
- MemoryPressureMonitor::kNotificationIntervalPressureCriticalMs);
- ExpectDispatchCritical();
- EXPECT_EQ(MEMORY_PRESSURE_LEVEL_CRITICAL,
- monitor_->GetCurrentPressureLevel());
- VerifyAndClearExpectations();
- EXPECT_EQ(1, calculator_.calls());
- ExpectCritical();
- EXPECT_EQ(2u, monitor_->scheduled_checks().size());
-}
-
-#else // MEMORY_PRESSURE_IS_POLLING
-
-TEST_F(MemoryPressureMonitorTest, PressureChangeNop) {
- CreateMonitor(MEMORY_PRESSURE_LEVEL_NONE);
-
- // The pressure hasn't changed so this should be a nop.
- Tick(1);
- monitor_->OnMemoryPressureChanged(MEMORY_PRESSURE_LEVEL_NONE);
- VerifyAndClearExpectations();
- ExpectNone();
- EXPECT_EQ(1u, monitor_->scheduled_checks().size());
-}
-
-TEST_F(MemoryPressureMonitorTest, PressureChangeNoNewScheduledTask) {
- CreateMonitor(MEMORY_PRESSURE_LEVEL_NONE);
-
- // The pressure is increasing and the renotification frequency has changed.
- // However, a pending event is already scheduled soon enough so no new one
- // should be scheduled.
- Tick(MemoryPressureMonitor::kDefaultPollingIntervalMs -
- MemoryPressureMonitor::kNotificationIntervalPressureModerateMs / 2);
- ExpectDispatchModerate();
- monitor_->OnMemoryPressureChanged(MEMORY_PRESSURE_LEVEL_MODERATE);
- VerifyAndClearExpectations();
- ExpectModerate();
- EXPECT_EQ(1u, monitor_->scheduled_checks().size());
-}
-
-TEST_F(MemoryPressureMonitorTest, PressureChangeNewScheduledTask) {
- CreateMonitor(MEMORY_PRESSURE_LEVEL_NONE);
-
- // The pressure is increasing and the renotification frequency has changed.
- // The already scheduled event is too far in the future so a new event should
- // be scheduled.
- Tick(1);
- ExpectTaskPosted(
- MemoryPressureMonitor::kNotificationIntervalPressureCriticalMs);
- ExpectDispatchCritical();
- monitor_->OnMemoryPressureChanged(MEMORY_PRESSURE_LEVEL_CRITICAL);
- VerifyAndClearExpectations();
- ExpectCritical();
- EXPECT_EQ(2u, monitor_->scheduled_checks().size());
-}
-
-#endif // !MEMORY_PRESSURE_IS_POLLING
-
-} // namespace memory_pressure
« no previous file with comments | « components/memory_pressure/memory_pressure_monitor.cc ('k') | components/memory_pressure/memory_pressure_stats_collector.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698