summaryrefslogtreecommitdiff
path: root/chromium/third_party/blink/renderer/platform/scheduler/main_thread/memory_purge_manager_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/blink/renderer/platform/scheduler/main_thread/memory_purge_manager_unittest.cc')
-rw-r--r--chromium/third_party/blink/renderer/platform/scheduler/main_thread/memory_purge_manager_unittest.cc113
1 files changed, 69 insertions, 44 deletions
diff --git a/chromium/third_party/blink/renderer/platform/scheduler/main_thread/memory_purge_manager_unittest.cc b/chromium/third_party/blink/renderer/platform/scheduler/main_thread/memory_purge_manager_unittest.cc
index 3293c3151d3..3dea63c3bbb 100644
--- a/chromium/third_party/blink/renderer/platform/scheduler/main_thread/memory_purge_manager_unittest.cc
+++ b/chromium/third_party/blink/renderer/platform/scheduler/main_thread/memory_purge_manager_unittest.cc
@@ -25,8 +25,7 @@ class MemoryPurgeManagerTest : public testing::Test {
MemoryPurgeManagerTest()
: task_environment_(base::test::TaskEnvironment::MainThreadType::UI,
base::test::TaskEnvironment::TimeSource::MOCK_TIME),
- memory_purge_manager_(task_environment_.GetMainThreadTaskRunner()),
- observed_memory_pressure_(false) {}
+ memory_purge_manager_(task_environment_.GetMainThreadTaskRunner()) {}
void SetUp() override {
memory_pressure_listener_ =
@@ -49,34 +48,23 @@ class MemoryPurgeManagerTest : public testing::Test {
{features::kPurgeRendererMemoryWhenBackgrounded});
}
- void ExpectMemoryPressure(
- base::TimeDelta delay = base::TimeDelta::FromMinutes(0)) {
- FastForwardBy(delay);
- EXPECT_TRUE(observed_memory_pressure_);
- observed_memory_pressure_ = false;
- }
-
- void ExpectNoMemoryPressure(
- base::TimeDelta delay = base::TimeDelta::FromMinutes(0)) {
- FastForwardBy(delay);
- EXPECT_FALSE(observed_memory_pressure_);
- }
-
void FastForwardBy(base::TimeDelta delta) {
task_environment_.FastForwardBy(delta);
}
+ unsigned MemoryPressureCount() const { return memory_pressure_count_; }
+
base::test::ScopedFeatureList scoped_feature_list_;
base::test::TaskEnvironment task_environment_;
std::unique_ptr<base::MemoryPressureListener> memory_pressure_listener_;
MemoryPurgeManager memory_purge_manager_;
- bool observed_memory_pressure_;
+ unsigned memory_pressure_count_ = 0;
private:
void OnMemoryPressure(base::MemoryPressureListener::MemoryPressureLevel) {
- observed_memory_pressure_ = true;
+ memory_pressure_count_++;
}
DISALLOW_COPY_AND_ASSIGN(MemoryPurgeManagerTest);
@@ -92,7 +80,8 @@ TEST_F(MemoryPurgeManagerTest, PageFrozenInBackgroundedRenderer) {
memory_purge_manager_.OnPageCreated(PageLifecycleState::kActive);
memory_purge_manager_.SetRendererBackgrounded(true);
memory_purge_manager_.OnPageFrozen();
- ExpectMemoryPressure();
+ FastForwardBy(base::TimeDelta::FromMinutes(0));
+ EXPECT_EQ(1U, MemoryPressureCount());
}
// Verify that OnPageFrozen() does not trigger a memory pressure notification in
@@ -105,7 +94,8 @@ TEST_F(MemoryPurgeManagerTest, PageFrozenInForegroundedRenderer) {
memory_purge_manager_.OnPageCreated(PageLifecycleState::kActive);
memory_purge_manager_.SetRendererBackgrounded(false);
memory_purge_manager_.OnPageFrozen();
- ExpectNoMemoryPressure();
+ FastForwardBy(base::TimeDelta::FromMinutes(0));
+ EXPECT_EQ(0U, MemoryPressureCount());
}
TEST_F(MemoryPurgeManagerTest, PageResumedUndoMemoryPressureSuppression) {
@@ -117,7 +107,9 @@ TEST_F(MemoryPurgeManagerTest, PageResumedUndoMemoryPressureSuppression) {
memory_purge_manager_.SetRendererBackgrounded(true);
memory_purge_manager_.OnPageFrozen();
- ExpectMemoryPressure();
+ FastForwardBy(base::TimeDelta::FromMinutes(0));
+ EXPECT_EQ(1U, MemoryPressureCount());
+
EXPECT_TRUE(base::MemoryPressureListener::AreNotificationsSuppressed());
memory_purge_manager_.OnPageResumed();
EXPECT_FALSE(base::MemoryPressureListener::AreNotificationsSuppressed());
@@ -139,15 +131,18 @@ TEST_F(MemoryPurgeManagerTest, PageFrozenPurgeMemoryAllPagesFrozenDisabled) {
memory_purge_manager_.OnPageCreated(PageLifecycleState::kActive);
memory_purge_manager_.OnPageFrozen();
- ExpectMemoryPressure();
+ FastForwardBy(base::TimeDelta::FromMinutes(0));
+ EXPECT_EQ(1U, MemoryPressureCount());
EXPECT_FALSE(base::MemoryPressureListener::AreNotificationsSuppressed());
memory_purge_manager_.OnPageFrozen();
- ExpectMemoryPressure();
+ FastForwardBy(base::TimeDelta::FromMinutes(0));
+ EXPECT_EQ(2U, MemoryPressureCount());
EXPECT_FALSE(base::MemoryPressureListener::AreNotificationsSuppressed());
memory_purge_manager_.OnPageFrozen();
- ExpectMemoryPressure();
+ FastForwardBy(base::TimeDelta::FromMinutes(0));
+ EXPECT_EQ(3U, MemoryPressureCount());
EXPECT_TRUE(base::MemoryPressureListener::AreNotificationsSuppressed());
memory_purge_manager_.OnPageResumed();
@@ -177,15 +172,18 @@ TEST_F(MemoryPurgeManagerTest, PageFrozenPurgeMemoryAllPagesFrozenEnabled) {
memory_purge_manager_.OnPageCreated(PageLifecycleState::kActive);
memory_purge_manager_.OnPageFrozen();
- ExpectNoMemoryPressure();
+ FastForwardBy(base::TimeDelta::FromMinutes(0));
+ EXPECT_EQ(0U, MemoryPressureCount());
EXPECT_FALSE(base::MemoryPressureListener::AreNotificationsSuppressed());
memory_purge_manager_.OnPageFrozen();
- ExpectNoMemoryPressure();
+ FastForwardBy(base::TimeDelta::FromMinutes(0));
+ EXPECT_EQ(0U, MemoryPressureCount());
EXPECT_FALSE(base::MemoryPressureListener::AreNotificationsSuppressed());
memory_purge_manager_.OnPageFrozen();
- ExpectMemoryPressure();
+ FastForwardBy(base::TimeDelta::FromMinutes(0));
+ EXPECT_EQ(1U, MemoryPressureCount());
EXPECT_TRUE(base::MemoryPressureListener::AreNotificationsSuppressed());
memory_purge_manager_.OnPageResumed();
@@ -211,10 +209,12 @@ TEST_F(MemoryPurgeManagerTest, MemoryPurgeWithDelay) {
memory_purge_manager_.OnPageFrozen();
// The memory pressure notification should not occur immediately
- ExpectNoMemoryPressure();
+ FastForwardBy(base::TimeDelta::FromMinutes(0));
+ EXPECT_EQ(0U, MemoryPressureCount());
// The memory pressure notification should occur after 1 minute
- ExpectMemoryPressure(kDelayForPurgeAfterFreeze);
+ FastForwardBy(kDelayForPurgeAfterFreeze);
+ EXPECT_EQ(1U, MemoryPressureCount());
memory_purge_manager_.OnPageDestroyed(PageLifecycleState::kFrozen);
}
@@ -227,12 +227,13 @@ TEST_F(MemoryPurgeManagerTest, CancelMemoryPurgeWithDelay) {
memory_purge_manager_.SetRendererBackgrounded(true);
memory_purge_manager_.OnPageFrozen();
FastForwardBy(base::TimeDelta::FromSeconds(40));
- ExpectNoMemoryPressure();
+ EXPECT_EQ(0U, MemoryPressureCount());
// If the page is resumed before the memory purge timer expires, the purge
// should be cancelled.
memory_purge_manager_.OnPageResumed();
- ExpectNoMemoryPressure(kDelayForPurgeAfterFreeze);
+ FastForwardBy(base::TimeDelta::FromMinutes(0));
+ EXPECT_EQ(0U, MemoryPressureCount());
memory_purge_manager_.OnPageDestroyed(PageLifecycleState::kActive);
}
@@ -245,11 +246,12 @@ TEST_F(MemoryPurgeManagerTest, MemoryPurgeWithDelayNewActivePageCreated) {
memory_purge_manager_.SetRendererBackgrounded(true);
memory_purge_manager_.OnPageFrozen();
FastForwardBy(base::TimeDelta::FromSeconds(40));
- ExpectNoMemoryPressure();
+ EXPECT_EQ(0U, MemoryPressureCount());
// All pages are no longer frozen, the memory purge should be cancelled.
memory_purge_manager_.OnPageCreated(PageLifecycleState::kActive);
- ExpectNoMemoryPressure(kDelayForPurgeAfterFreeze);
+ FastForwardBy(kDelayForPurgeAfterFreeze);
+ EXPECT_EQ(0U, MemoryPressureCount());
memory_purge_manager_.OnPageDestroyed(PageLifecycleState::kFrozen);
memory_purge_manager_.OnPageDestroyed(PageLifecycleState::kActive);
@@ -263,11 +265,12 @@ TEST_F(MemoryPurgeManagerTest, MemoryPurgeWithDelayNewFrozenPageCreated) {
memory_purge_manager_.SetRendererBackgrounded(true);
memory_purge_manager_.OnPageFrozen();
FastForwardBy(base::TimeDelta::FromSeconds(40));
- ExpectNoMemoryPressure();
+ EXPECT_EQ(0U, MemoryPressureCount());
// All pages are still frozen and the memory purge should occur.
memory_purge_manager_.OnPageCreated(PageLifecycleState::kFrozen);
- ExpectMemoryPressure(kDelayForPurgeAfterFreeze);
+ FastForwardBy(kDelayForPurgeAfterFreeze);
+ EXPECT_EQ(1U, MemoryPressureCount());
memory_purge_manager_.OnPageDestroyed(PageLifecycleState::kFrozen);
memory_purge_manager_.OnPageDestroyed(PageLifecycleState::kFrozen);
@@ -281,7 +284,8 @@ TEST_F(MemoryPurgeManagerTest, PurgeRendererMemoryWhenBackgroundedEnabled) {
memory_purge_manager_.SetRendererBackgrounded(true);
FastForwardBy(base::TimeDelta::FromMinutes(
MemoryPurgeManager::kDefaultMaxTimeToPurgeAfterBackgrounded));
- ExpectMemoryPressure();
+ // No page, no memory pressure.
+ EXPECT_EQ(0U, MemoryPressureCount());
}
TEST_F(MemoryPurgeManagerTest, PurgeRendererMemoryWhenBackgroundedDisabled) {
@@ -291,7 +295,7 @@ TEST_F(MemoryPurgeManagerTest, PurgeRendererMemoryWhenBackgroundedDisabled) {
memory_purge_manager_.SetRendererBackgrounded(true);
FastForwardBy(base::TimeDelta::Max());
- ExpectNoMemoryPressure();
+ EXPECT_EQ(0U, MemoryPressureCount());
}
TEST_F(MemoryPurgeManagerTest,
@@ -302,11 +306,11 @@ TEST_F(MemoryPurgeManagerTest,
memory_purge_manager_.SetRendererBackgrounded(true);
FastForwardBy(base::TimeDelta::FromSeconds(30));
- ExpectNoMemoryPressure();
+ EXPECT_EQ(0U, MemoryPressureCount());
memory_purge_manager_.SetRendererBackgrounded(false);
FastForwardBy(base::TimeDelta::Max());
- ExpectNoMemoryPressure();
+ EXPECT_EQ(0U, MemoryPressureCount());
}
TEST_F(MemoryPurgeManagerTest, PageFrozenAndResumedWhileBackgrounded) {
@@ -329,7 +333,8 @@ TEST_F(MemoryPurgeManagerTest, PageFrozenAndResumedWhileBackgrounded) {
memory_purge_manager_.SetRendererBackgrounded(true);
memory_purge_manager_.OnPageFrozen();
FastForwardBy(kBeforeBackgroundPurgeDelay);
- ExpectNoMemoryPressure();
+ EXPECT_EQ(0U, MemoryPressureCount());
+
memory_purge_manager_.OnPageResumed();
FastForwardBy(
base::TimeDelta::FromMinutes(
@@ -337,7 +342,7 @@ TEST_F(MemoryPurgeManagerTest, PageFrozenAndResumedWhileBackgrounded) {
kBeforeBackgroundPurgeDelay);
// Since the renderer is still backgrounded, the memory purge should happen
// even though there are no frozen pages.
- ExpectMemoryPressure();
+ EXPECT_EQ(1U, MemoryPressureCount());
memory_purge_manager_.OnPageDestroyed(PageLifecycleState::kActive);
}
@@ -357,10 +362,12 @@ TEST_F(MemoryPurgeManagerTest,
memory_purge_manager_.SetRendererBackgrounded(true);
memory_purge_manager_.OnPageFrozen();
- ExpectMemoryPressure(base::TimeDelta::FromMinutes(
+ FastForwardBy(base::TimeDelta::FromMinutes(
MemoryPurgeManager::kDefaultMaxTimeToPurgeAfterBackgrounded));
+ EXPECT_EQ(1U, MemoryPressureCount());
+
FastForwardBy(kFreezePurgeDelay);
- ExpectNoMemoryPressure();
+ EXPECT_EQ(1U, MemoryPressureCount());
memory_purge_manager_.OnPageDestroyed(PageLifecycleState::kFrozen);
}
@@ -380,11 +387,29 @@ TEST_F(MemoryPurgeManagerTest,
memory_purge_manager_.SetRendererBackgrounded(true);
memory_purge_manager_.OnPageFrozen();
- ExpectMemoryPressure(kFreezePurgeDelay);
+ FastForwardBy(kFreezePurgeDelay);
+ EXPECT_EQ(1U, MemoryPressureCount());
+
FastForwardBy(base::TimeDelta::Max());
- ExpectNoMemoryPressure();
+ EXPECT_EQ(1U, MemoryPressureCount());
+
+ memory_purge_manager_.OnPageDestroyed(PageLifecycleState::kFrozen);
+}
+
+TEST_F(MemoryPurgeManagerTest, NoMemoryPurgeIfNoPage) {
+ scoped_feature_list_.InitWithFeatures(
+ {features::kFreezePurgeMemoryAllPagesFrozen} /* enabled */,
+ {features::kPurgeRendererMemoryWhenBackgrounded} /* disabled */);
+ memory_purge_manager_.SetRendererBackgrounded(true);
+ memory_purge_manager_.OnPageCreated(PageLifecycleState::kActive);
+
+ memory_purge_manager_.SetRendererBackgrounded(true);
+ memory_purge_manager_.OnPageFrozen();
memory_purge_manager_.OnPageDestroyed(PageLifecycleState::kFrozen);
+
+ FastForwardBy(base::TimeDelta::FromMinutes(0));
+ EXPECT_EQ(0U, MemoryPressureCount());
}
} // namespace