diff options
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.cc | 113 |
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 |