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

Unified Diff: chrome/browser/memory/tab_manager_unittest.cc

Issue 2711093002: Purge once random minutes(between 30min and 60min) after backgrounded. (Closed)
Patch Set: Fixed Created 3 years, 9 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: chrome/browser/memory/tab_manager_unittest.cc
diff --git a/chrome/browser/memory/tab_manager_unittest.cc b/chrome/browser/memory/tab_manager_unittest.cc
index c20c3946fc9d2b29eb99a79ca8ccaea6b7079005..5fd7b77ff3e94375cca8756ad541df3e19bf01e9 100644
--- a/chrome/browser/memory/tab_manager_unittest.cc
+++ b/chrome/browser/memory/tab_manager_unittest.cc
@@ -27,7 +27,9 @@
#include "chrome/test/base/chrome_render_view_host_test_harness.h"
#include "chrome/test/base/testing_profile.h"
#include "components/variations/variations_associated_data.h"
+#include "content/public/browser/render_process_host.h"
#include "content/public/browser/web_contents.h"
+#include "content/public/test/mock_render_process_host.h"
#include "content/public/test/web_contents_tester.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -672,7 +674,15 @@ TEST_F(TabManagerTest, MAYBE_ChildProcessNotifications) {
ASSERT_TRUE(tabstrip.empty());
}
-TEST_F(TabManagerTest, NextPurgeAndSuspendState) {
+TEST_F(TabManagerTest, DefaultTimeToPurgeInCorrectRange) {
+ TabManager tab_manager;
+ base::TimeDelta time_to_purge =
+ tab_manager.GetTimeToPurge(TabManager::kDefaultMinTimeToPurge);
+ EXPECT_GE(time_to_purge, base::TimeDelta::FromMinutes(30));
+ EXPECT_LT(time_to_purge, base::TimeDelta::FromMinutes(60));
+}
+
+TEST_F(TabManagerTest, ShouldPurgeAtDefaultTime) {
TabManager tab_manager;
TabStripDummyDelegate delegate;
TabStripModel tabstrip(&delegate, profile());
@@ -681,102 +691,67 @@ TEST_F(TabManagerTest, NextPurgeAndSuspendState) {
WebContents* test_contents = CreateWebContents();
tabstrip.AppendWebContents(test_contents, false);
- // Use default time-to-first-purge defined in TabManager.
- base::TimeDelta threshold = TabManager::kDefaultTimeToFirstPurge;
base::SimpleTestTickClock test_clock;
+ tab_manager.set_test_tick_clock(&test_clock);
+ tab_manager.GetWebContentsData(test_contents)->set_is_purged(false);
tab_manager.GetWebContentsData(test_contents)
- ->SetPurgeAndSuspendState(TabManager::RUNNING);
+ ->SetLastInactiveTime(test_clock.NowTicks());
tab_manager.GetWebContentsData(test_contents)
- ->SetLastPurgeAndSuspendModifiedTimeForTesting(test_clock.NowTicks());
+ ->set_time_to_purge(base::TimeDelta::FromMinutes(1));
- // Wait 30 minutes and verify that the tab is still RUNNING.
- test_clock.Advance(base::TimeDelta::FromMinutes(30));
- EXPECT_EQ(TabManager::RUNNING,
- tab_manager.GetNextPurgeAndSuspendState(
- test_contents, test_clock.NowTicks(), threshold));
+ // Wait 1 minute and verify that the tab is still not to be purged.
+ test_clock.Advance(base::TimeDelta::FromMinutes(1));
+ EXPECT_FALSE(tab_manager.ShouldPurgeNow(test_contents));
- // Wait another second and verify that it is now SUSPENDED.
+ // Wait another 1 second and verify that it should be purged now .
test_clock.Advance(base::TimeDelta::FromSeconds(1));
- EXPECT_EQ(TabManager::SUSPENDED,
- tab_manager.GetNextPurgeAndSuspendState(
- test_contents, test_clock.NowTicks(), threshold));
+ EXPECT_TRUE(tab_manager.ShouldPurgeNow(test_contents));
+ tab_manager.GetWebContentsData(test_contents)->set_is_purged(true);
tab_manager.GetWebContentsData(test_contents)
- ->SetPurgeAndSuspendState(TabManager::SUSPENDED);
- tab_manager.GetWebContentsData(test_contents)
- ->SetLastPurgeAndSuspendModifiedTimeForTesting(test_clock.NowTicks());
+ ->SetLastInactiveTime(test_clock.NowTicks());
- test_clock.Advance(base::TimeDelta::FromSeconds(1200));
- EXPECT_EQ(TabManager::SUSPENDED,
- tab_manager.GetNextPurgeAndSuspendState(
- test_contents, test_clock.NowTicks(), threshold));
-
- test_clock.Advance(base::TimeDelta::FromSeconds(1));
- EXPECT_EQ(TabManager::RESUMED,
- tab_manager.GetNextPurgeAndSuspendState(
- test_contents, test_clock.NowTicks(), threshold));
-
- tab_manager.GetWebContentsData(test_contents)
- ->SetPurgeAndSuspendState(TabManager::RESUMED);
- tab_manager.GetWebContentsData(test_contents)
- ->SetLastPurgeAndSuspendModifiedTimeForTesting(test_clock.NowTicks());
-
- test_clock.Advance(base::TimeDelta::FromSeconds(10));
- EXPECT_EQ(TabManager::RESUMED,
- tab_manager.GetNextPurgeAndSuspendState(
- test_contents, test_clock.NowTicks(), threshold));
-
- test_clock.Advance(base::TimeDelta::FromSeconds(1));
- EXPECT_EQ(TabManager::SUSPENDED,
- tab_manager.GetNextPurgeAndSuspendState(
- test_contents, test_clock.NowTicks(), threshold));
-
- // Clean up the tabstrip.
- tabstrip.CloseAllTabs();
- EXPECT_TRUE(tabstrip.empty());
+ // Wait 1 day and verify that the tab is still be purged.
+ test_clock.Advance(base::TimeDelta::FromHours(24));
+ EXPECT_FALSE(tab_manager.ShouldPurgeNow(test_contents));
}
-TEST_F(TabManagerTest, ActivateTabResetPurgeAndSuspendState) {
+TEST_F(TabManagerTest, ActivateTabResetPurgeState) {
TabManager tab_manager;
TabStripDummyDelegate delegate;
TabStripModel tabstrip(&delegate, profile());
tabstrip.AddObserver(&tab_manager);
+ tab_manager.test_tab_strip_models_.push_back(
+ TabManager::TestTabStripModel(&tabstrip, false /* !is_app */));
+
+ base::SimpleTestTickClock test_clock;
+ tab_manager.set_test_tick_clock(&test_clock);
WebContents* tab1 = CreateWebContents();
WebContents* tab2 = CreateWebContents();
tabstrip.AppendWebContents(tab1, true);
tabstrip.AppendWebContents(tab2, false);
- base::SimpleTestTickClock test_clock;
-
- // Initially PurgeAndSuspend state should be RUNNING.
- EXPECT_EQ(TabManager::RUNNING,
- tab_manager.GetWebContentsData(tab2)->GetPurgeAndSuspendState());
-
- tab_manager.GetWebContentsData(tab2)->SetPurgeAndSuspendState(
- TabManager::SUSPENDED);
- tab_manager.GetWebContentsData(tab2)
- ->SetLastPurgeAndSuspendModifiedTimeForTesting(test_clock.NowTicks());
-
- // Activate tab2. Tab2's PurgeAndSuspend state should be RUNNING.
+ tab_manager.GetWebContentsData(tab2)->SetLastInactiveTime(
+ test_clock.NowTicks());
+ static_cast<content::MockRenderProcessHost*>(tab2->GetRenderProcessHost())
+ ->set_is_process_backgrounded(true);
+ EXPECT_TRUE(tab2->GetRenderProcessHost()->IsProcessBackgrounded());
+
+ // Initially PurgeAndSuspend state should be NOT_PURGED.
+ EXPECT_FALSE(tab_manager.GetWebContentsData(tab2)->is_purged());
+ tab_manager.GetWebContentsData(tab2)->set_time_to_purge(
+ base::TimeDelta::FromMinutes(1));
+ test_clock.Advance(base::TimeDelta::FromMinutes(2));
+ tab_manager.PurgeBackgroundedTabsIfNeeded();
+ // Since tab2 is kept inactive and background for more than time-to-purge,
+ // tab2 should be purged.
+ EXPECT_TRUE(tab_manager.GetWebContentsData(tab2)->is_purged());
+
+ // Activate tab2. Tab2's PurgeAndSuspend state should be NOT_PURGED.
tabstrip.ActivateTabAt(1, true /* user_gesture */);
- EXPECT_EQ(TabManager::RUNNING,
- tab_manager.GetWebContentsData(tab2)->GetPurgeAndSuspendState());
-
- tab_manager.GetWebContentsData(tab1)->SetPurgeAndSuspendState(
- TabManager::RESUMED);
- tab_manager.GetWebContentsData(tab1)
- ->SetLastPurgeAndSuspendModifiedTimeForTesting(test_clock.NowTicks());
-
- // Activate tab1. Tab1's PurgeAndSuspend state should be RUNNING.
- tabstrip.ActivateTabAt(0, true /* user_gesture */);
- EXPECT_EQ(TabManager::RUNNING,
- tab_manager.GetWebContentsData(tab1)->GetPurgeAndSuspendState());
-
- // Clean up the tabstrip.
- tabstrip.CloseAllTabs();
- EXPECT_TRUE(tabstrip.empty());
+ EXPECT_FALSE(tab_manager.GetWebContentsData(tab2)->is_purged());
}
} // namespace memory
« no previous file with comments | « chrome/browser/memory/tab_manager_browsertest.cc ('k') | chrome/browser/memory/tab_manager_web_contents_data.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698