diff --git a/base/android/pre_freeze_background_memory_trimmer.cc b/base/android/pre_freeze_background_memory_trimmer.cc index 73a6d01f21fd1..609738cd13ab7 100644 --- a/base/android/pre_freeze_background_memory_trimmer.cc +++ b/base/android/pre_freeze_background_memory_trimmer.cc @@ -284,12 +284,24 @@ void PreFreezeBackgroundMemoryTrimmer::SetSupportsModernTrimForTesting( Instance().supports_modern_trim_ = is_supported; } +// static +void PreFreezeBackgroundMemoryTrimmer::SetDidRegisterTasksForTesting( + bool did_register_task) { + base::AutoLock locker(Instance().lock_); + Instance().did_register_task_ = did_register_task; +} + size_t PreFreezeBackgroundMemoryTrimmer:: GetNumberOfPendingBackgroundTasksForTesting() { base::AutoLock locker(lock_); return background_tasks_.size(); } +bool PreFreezeBackgroundMemoryTrimmer::DidRegisterTasksForTesting() { + base::AutoLock locker(lock_); + return did_register_task_; +} + // static void PreFreezeBackgroundMemoryTrimmer::BackgroundTask::RunNow( std::unique_ptr<PreFreezeBackgroundMemoryTrimmer::BackgroundTask> diff --git a/base/android/pre_freeze_background_memory_trimmer.h b/base/android/pre_freeze_background_memory_trimmer.h index 74842a8f636ab..0e156c0c53bc1 100644 --- a/base/android/pre_freeze_background_memory_trimmer.h +++ b/base/android/pre_freeze_background_memory_trimmer.h @@ -60,7 +60,9 @@ class BASE_EXPORT PreFreezeBackgroundMemoryTrimmer { base::TimeDelta delay) LOCKS_EXCLUDED(lock_); static void SetSupportsModernTrimForTesting(bool is_supported); + static void SetDidRegisterTasksForTesting(bool did_register_tasks); size_t GetNumberOfPendingBackgroundTasksForTesting() LOCKS_EXCLUDED(lock_); + bool DidRegisterTasksForTesting(); static void OnPreFreezeForTesting() LOCKS_EXCLUDED(lock_) { OnPreFreeze(); } diff --git a/base/android/pre_freeze_background_memory_trimmer_unittest.cc b/base/android/pre_freeze_background_memory_trimmer_unittest.cc index d0f27c4847406..7190ed1bfd80c 100644 --- a/base/android/pre_freeze_background_memory_trimmer_unittest.cc +++ b/base/android/pre_freeze_background_memory_trimmer_unittest.cc @@ -42,9 +42,9 @@ class PreFreezeBackgroundMemoryTrimmerTest : public testing::Test { PreFreezeBackgroundMemoryTrimmerTest() { fl_.InitAndEnableFeature(kOnPreFreezeMemoryTrim); } - void SetUp() override { PreFreezeBackgroundMemoryTrimmer::SetSupportsModernTrimForTesting(true); + PreFreezeBackgroundMemoryTrimmer::SetDidRegisterTasksForTesting(false); ResetGlobalCounter(); } @@ -54,26 +54,54 @@ class PreFreezeBackgroundMemoryTrimmerTest : public testing::Test { .GetNumberOfPendingBackgroundTasksForTesting(); } + bool did_register_tasks() { + return PreFreezeBackgroundMemoryTrimmer::Instance() + .DidRegisterTasksForTesting(); + } + test::TaskEnvironment task_environment_{ base::test::TaskEnvironment::TimeSource::MOCK_TIME}; - private: test::ScopedFeatureList fl_; }; -TEST_F(PreFreezeBackgroundMemoryTrimmerTest, PostTaskPreFreezeDisabled) { +// We do not expect any tasks to be registered with +// PreFreezeBackgroundMemoryTrimmer on Android versions before U. +TEST_F(PreFreezeBackgroundMemoryTrimmerTest, PostTaskPreFreezeUnsupported) { PreFreezeBackgroundMemoryTrimmer::SetSupportsModernTrimForTesting(false); + ASSERT_FALSE(did_register_tasks()); + PreFreezeBackgroundMemoryTrimmer::PostDelayedBackgroundTask( SingleThreadTaskRunner::GetCurrentDefault(), FROM_HERE, base::BindRepeating(&IncGlobalCounter), base::Seconds(30)); ASSERT_EQ(pending_task_count(), 0u); + ASSERT_FALSE(did_register_tasks()); task_environment_.FastForwardBy(base::Seconds(30)); ASSERT_EQ(pending_task_count(), 0u); + EXPECT_EQ(s_counter, 1); +} +TEST_F(PreFreezeBackgroundMemoryTrimmerTest, PostTaskPreFreezeWithoutTrim) { + test::ScopedFeatureList fl; + fl.InitAndDisableFeature(kOnPreFreezeMemoryTrim); + ASSERT_FALSE(did_register_tasks()); + + PreFreezeBackgroundMemoryTrimmer::PostDelayedBackgroundTask( + SingleThreadTaskRunner::GetCurrentDefault(), FROM_HERE, + base::BindRepeating(&IncGlobalCounter), base::Seconds(30)); + + ASSERT_EQ(pending_task_count(), 0u); + ASSERT_TRUE(did_register_tasks()); + + task_environment_.FastForwardBy(base::Seconds(30)); + + PreFreezeBackgroundMemoryTrimmer::OnPreFreezeForTesting(); + + ASSERT_EQ(pending_task_count(), 0u); EXPECT_EQ(s_counter, 1); } @@ -82,6 +110,7 @@ TEST_F(PreFreezeBackgroundMemoryTrimmerTest, PostDelayedTaskSimple) { SingleThreadTaskRunner::GetCurrentDefault(), FROM_HERE, base::BindRepeating(&IncGlobalCounter), base::Seconds(30)); + ASSERT_TRUE(did_register_tasks()); ASSERT_EQ(pending_task_count(), 1u); task_environment_.FastForwardBy(base::Seconds(30));