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

Unified Diff: content/browser/memory/memory_coordinator_impl_unittest.cc

Issue 2943603002: Remove MemoryCondition::WARNING (Closed)
Patch Set: rebase Created 3 years, 6 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
« no previous file with comments | « content/browser/memory/memory_coordinator_impl.cc ('k') | content/browser/memory/memory_monitor_android.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/memory/memory_coordinator_impl_unittest.cc
diff --git a/content/browser/memory/memory_coordinator_impl_unittest.cc b/content/browser/memory/memory_coordinator_impl_unittest.cc
index 56bff5def9e4b7928e40822ef19c0e4d8b6846ba..ab466a175110702c1b00839ac37f039ffc809b3f 100644
--- a/content/browser/memory/memory_coordinator_impl_unittest.cc
+++ b/content/browser/memory/memory_coordinator_impl_unittest.cc
@@ -301,14 +301,6 @@ TEST_F(MemoryCoordinatorImplTest, OnChildVisibilityChanged) {
EXPECT_EQ(mojom::MemoryState::NORMAL, child->state());
#endif
- coordinator_->memory_condition_ = MemoryCondition::WARNING;
- coordinator_->policy_->OnChildVisibilityChanged(1, true);
- RunUntilIdle();
- EXPECT_EQ(mojom::MemoryState::NORMAL, child->state());
- coordinator_->policy_->OnChildVisibilityChanged(1, false);
- RunUntilIdle();
- EXPECT_EQ(mojom::MemoryState::THROTTLED, child->state());
-
coordinator_->memory_condition_ = MemoryCondition::CRITICAL;
coordinator_->policy_->OnChildVisibilityChanged(1, true);
RunUntilIdle();
@@ -320,64 +312,28 @@ TEST_F(MemoryCoordinatorImplTest, OnChildVisibilityChanged) {
TEST_F(MemoryCoordinatorImplTest, CalculateNextCondition) {
auto* condition_observer = coordinator_->condition_observer_.get();
- condition_observer->expected_renderer_size_ = 10;
- condition_observer->new_renderers_until_warning_ = 4;
- condition_observer->new_renderers_until_critical_ = 2;
- condition_observer->new_renderers_back_to_normal_ = 5;
- condition_observer->new_renderers_back_to_warning_ = 3;
- DCHECK(condition_observer->ValidateParameters());
// The default condition is NORMAL.
EXPECT_EQ(MemoryCondition::NORMAL, coordinator_->GetMemoryCondition());
// Transitions from NORMAL
- GetMockMemoryMonitor()->SetFreeMemoryUntilCriticalMB(50);
+ GetMockMemoryMonitor()->SetFreeMemoryUntilCriticalMB(1000);
EXPECT_EQ(MemoryCondition::NORMAL,
condition_observer->CalculateNextCondition());
- GetMockMemoryMonitor()->SetFreeMemoryUntilCriticalMB(40);
- EXPECT_EQ(MemoryCondition::WARNING,
- condition_observer->CalculateNextCondition());
- GetMockMemoryMonitor()->SetFreeMemoryUntilCriticalMB(20);
- EXPECT_EQ(MemoryCondition::CRITICAL,
- condition_observer->CalculateNextCondition());
-
- // Transitions from WARNING
- coordinator_->memory_condition_ = MemoryCondition::WARNING;
- EXPECT_EQ(MemoryCondition::WARNING, coordinator_->GetMemoryCondition());
-
- GetMockMemoryMonitor()->SetFreeMemoryUntilCriticalMB(40);
- EXPECT_EQ(MemoryCondition::WARNING,
- condition_observer->CalculateNextCondition());
- GetMockMemoryMonitor()->SetFreeMemoryUntilCriticalMB(50);
- EXPECT_EQ(MemoryCondition::NORMAL,
- condition_observer->CalculateNextCondition());
- GetMockMemoryMonitor()->SetFreeMemoryUntilCriticalMB(20);
+ GetMockMemoryMonitor()->SetFreeMemoryUntilCriticalMB(0);
EXPECT_EQ(MemoryCondition::CRITICAL,
condition_observer->CalculateNextCondition());
// Transitions from CRITICAL
coordinator_->memory_condition_ = MemoryCondition::CRITICAL;
EXPECT_EQ(MemoryCondition::CRITICAL, coordinator_->GetMemoryCondition());
-
- GetMockMemoryMonitor()->SetFreeMemoryUntilCriticalMB(20);
- EXPECT_EQ(MemoryCondition::CRITICAL,
- condition_observer->CalculateNextCondition());
- GetMockMemoryMonitor()->SetFreeMemoryUntilCriticalMB(30);
- EXPECT_EQ(MemoryCondition::WARNING,
- condition_observer->CalculateNextCondition());
- GetMockMemoryMonitor()->SetFreeMemoryUntilCriticalMB(50);
+ GetMockMemoryMonitor()->SetFreeMemoryUntilCriticalMB(1000);
EXPECT_EQ(MemoryCondition::NORMAL,
condition_observer->CalculateNextCondition());
}
TEST_F(MemoryCoordinatorImplTest, UpdateCondition) {
auto* condition_observer = coordinator_->condition_observer_.get();
- condition_observer->expected_renderer_size_ = 10;
- condition_observer->new_renderers_until_warning_ = 4;
- condition_observer->new_renderers_until_critical_ = 2;
- condition_observer->new_renderers_back_to_normal_ = 5;
- condition_observer->new_renderers_back_to_warning_ = 3;
- DCHECK(condition_observer->ValidateParameters());
auto* foreground_child = coordinator_->CreateChildMemoryCoordinator(1);
auto* background_child = coordinator_->CreateChildMemoryCoordinator(2);
@@ -385,29 +341,11 @@ TEST_F(MemoryCoordinatorImplTest, UpdateCondition) {
iter->second.is_visible = false;
{
- // Transition happens (NORMAL -> WARNING).
- // Foreground processes should remain NORMAL state but background processes
- // should become THROTTLED state.
- MockMemoryCoordinatorClient client;
- base::MemoryCoordinatorClientRegistry::GetInstance()->Register(&client);
- coordinator_->memory_condition_ = MemoryCondition::NORMAL;
- GetMockMemoryMonitor()->SetFreeMemoryUntilCriticalMB(40);
- condition_observer->UpdateCondition();
- task_runner_->FastForwardBy(base::TimeDelta::FromSeconds(40));
- RunUntilIdle();
- EXPECT_FALSE(client.did_state_changed());
- EXPECT_EQ(base::MemoryState::NORMAL, client.state());
- EXPECT_EQ(mojom::MemoryState::NORMAL, foreground_child->state());
- EXPECT_EQ(mojom::MemoryState::THROTTLED, background_child->state());
- base::MemoryCoordinatorClientRegistry::GetInstance()->Unregister(&client);
- }
-
- {
- // Transition happens (WARNING -> CRITICAL).
+ // Transition happens (NORMAL -> CRITICAL).
// All processes should be in THROTTLED memory state.
MockMemoryCoordinatorClient client;
base::MemoryCoordinatorClientRegistry::GetInstance()->Register(&client);
- GetMockMemoryMonitor()->SetFreeMemoryUntilCriticalMB(20);
+ GetMockMemoryMonitor()->SetFreeMemoryUntilCriticalMB(0);
condition_observer->UpdateCondition();
task_runner_->FastForwardBy(base::TimeDelta::FromSeconds(40));
RunUntilIdle();
@@ -423,7 +361,7 @@ TEST_F(MemoryCoordinatorImplTest, UpdateCondition) {
MockMemoryCoordinatorClient client;
base::MemoryCoordinatorClientRegistry::GetInstance()->Register(&client);
coordinator_->memory_condition_ = MemoryCondition::NORMAL;
- GetMockMemoryMonitor()->SetFreeMemoryUntilCriticalMB(50);
+ GetMockMemoryMonitor()->SetFreeMemoryUntilCriticalMB(1000);
condition_observer->UpdateCondition();
RunUntilIdle();
EXPECT_FALSE(client.did_state_changed());
@@ -439,14 +377,14 @@ TEST_F(MemoryCoordinatorImplTest, UpdateCondition) {
base::TimeDelta::FromSeconds(1);
coordinator_->memory_condition_ = MemoryCondition::NORMAL;
coordinator_->last_state_change_ = task_runner_->NowTicks();
- GetMockMemoryMonitor()->SetFreeMemoryUntilCriticalMB(20);
+ GetMockMemoryMonitor()->SetFreeMemoryUntilCriticalMB(0);
condition_observer->UpdateCondition();
EXPECT_EQ(base::MemoryState::THROTTLED,
coordinator_->GetCurrentMemoryState());
// Back to NORMAL condition before |minimum_state_transition_period_| is
// passed. At this point the browser's state shouldn't be changed.
- GetMockMemoryMonitor()->SetFreeMemoryUntilCriticalMB(50);
+ GetMockMemoryMonitor()->SetFreeMemoryUntilCriticalMB(1000);
condition_observer->UpdateCondition();
task_runner_->FastForwardBy(transition_interval / 2);
EXPECT_EQ(MemoryCondition::NORMAL, coordinator_->GetMemoryCondition());
@@ -459,15 +397,10 @@ TEST_F(MemoryCoordinatorImplTest, UpdateCondition) {
}
}
+// TODO(bashi): Move ForceSetMemoryCondition?
TEST_F(MemoryCoordinatorImplTest, ForceSetMemoryCondition) {
auto* condition_observer = coordinator_->condition_observer_.get();
- condition_observer->expected_renderer_size_ = 10;
- condition_observer->new_renderers_until_warning_ = 4;
- condition_observer->new_renderers_until_critical_ = 2;
- condition_observer->new_renderers_back_to_normal_ = 5;
- condition_observer->new_renderers_back_to_warning_ = 3;
- DCHECK(condition_observer->ValidateParameters());
- GetMockMemoryMonitor()->SetFreeMemoryUntilCriticalMB(50);
+ GetMockMemoryMonitor()->SetFreeMemoryUntilCriticalMB(1000);
base::TimeDelta interval = base::TimeDelta::FromSeconds(5);
condition_observer->monitoring_interval_ = interval;
@@ -479,15 +412,15 @@ TEST_F(MemoryCoordinatorImplTest, ForceSetMemoryCondition) {
EXPECT_EQ(MemoryCondition::NORMAL, coordinator_->GetMemoryCondition());
base::TimeDelta force_set_duration = interval * 3;
- coordinator_->ForceSetMemoryCondition(MemoryCondition::WARNING,
+ coordinator_->ForceSetMemoryCondition(MemoryCondition::CRITICAL,
force_set_duration);
- EXPECT_EQ(MemoryCondition::WARNING, coordinator_->GetMemoryCondition());
+ EXPECT_EQ(MemoryCondition::CRITICAL, coordinator_->GetMemoryCondition());
- // The condition should remain SUSPENDED even after some monitoring period are
+ // The condition should remain CRITICAL even after some monitoring period are
// passed.
task_runner_->FastForwardBy(interval * 2);
task_runner_->RunUntilIdle();
- EXPECT_EQ(MemoryCondition::WARNING, coordinator_->GetMemoryCondition());
+ EXPECT_EQ(MemoryCondition::CRITICAL, coordinator_->GetMemoryCondition());
// The condition should be updated after |force_set_duration| is passed.
task_runner_->FastForwardBy(force_set_duration);
@@ -495,10 +428,10 @@ TEST_F(MemoryCoordinatorImplTest, ForceSetMemoryCondition) {
EXPECT_EQ(MemoryCondition::NORMAL, coordinator_->GetMemoryCondition());
// Also make sure that the condition is updated based on free avaiable memory.
- GetMockMemoryMonitor()->SetFreeMemoryUntilCriticalMB(40);
+ GetMockMemoryMonitor()->SetFreeMemoryUntilCriticalMB(0);
task_runner_->FastForwardBy(interval * 2);
task_runner_->RunUntilIdle();
- EXPECT_EQ(MemoryCondition::WARNING, coordinator_->GetMemoryCondition());
+ EXPECT_EQ(MemoryCondition::CRITICAL, coordinator_->GetMemoryCondition());
}
TEST_F(MemoryCoordinatorImplTest, DiscardTab) {
@@ -508,13 +441,7 @@ TEST_F(MemoryCoordinatorImplTest, DiscardTab) {
TEST_F(MemoryCoordinatorImplTest, DiscardTabUnderCritical) {
auto* condition_observer = coordinator_->condition_observer_.get();
- condition_observer->expected_renderer_size_ = 10;
- condition_observer->new_renderers_until_warning_ = 4;
- condition_observer->new_renderers_until_critical_ = 2;
- condition_observer->new_renderers_back_to_normal_ = 5;
- condition_observer->new_renderers_back_to_warning_ = 3;
- DCHECK(condition_observer->ValidateParameters());
- GetMockMemoryMonitor()->SetFreeMemoryUntilCriticalMB(50);
+ GetMockMemoryMonitor()->SetFreeMemoryUntilCriticalMB(1000);
base::TimeDelta interval = base::TimeDelta::FromSeconds(5);
condition_observer->monitoring_interval_ = interval;
@@ -526,83 +453,21 @@ TEST_F(MemoryCoordinatorImplTest, DiscardTabUnderCritical) {
EXPECT_EQ(MemoryCondition::NORMAL, coordinator_->GetMemoryCondition());
EXPECT_EQ(0, delegate->discard_tab_count());
- // Enter WARNING condition. No tab discarding should happen.
- GetMockMemoryMonitor()->SetFreeMemoryUntilCriticalMB(40);
- task_runner_->FastForwardBy(interval + base::TimeDelta::FromSeconds(1));
- EXPECT_EQ(0, delegate->discard_tab_count());
- task_runner_->FastForwardBy(interval);
- EXPECT_EQ(0, delegate->discard_tab_count());
-
// Enter CRITICAL condition. Tab discarding should start.
- GetMockMemoryMonitor()->SetFreeMemoryUntilCriticalMB(20);
+ GetMockMemoryMonitor()->SetFreeMemoryUntilCriticalMB(0);
task_runner_->FastForwardBy(interval);
EXPECT_EQ(1, delegate->discard_tab_count());
task_runner_->FastForwardBy(interval);
EXPECT_EQ(2, delegate->discard_tab_count());
// Back to NORMAL. Tab discarding should stop.
- GetMockMemoryMonitor()->SetFreeMemoryUntilCriticalMB(50);
+ GetMockMemoryMonitor()->SetFreeMemoryUntilCriticalMB(1000);
task_runner_->FastForwardBy(interval);
EXPECT_EQ(2, delegate->discard_tab_count());
task_runner_->FastForwardBy(interval);
EXPECT_EQ(2, delegate->discard_tab_count());
}
-// TODO(bashi): Move policy specific tests into a separate file.
-TEST_F(MemoryCoordinatorImplTest, OnWarningCondition) {
- MockMemoryCoordinatorClient client;
- base::MemoryCoordinatorClientRegistry::GetInstance()->Register(&client);
- auto* child1 = coordinator_->CreateChildMemoryCoordinator(1);
- auto* child2 = coordinator_->CreateChildMemoryCoordinator(2);
- base::TimeDelta interval = base::TimeDelta::FromSeconds(31);
-
- // child1: Foreground, child2: Background
- coordinator_->policy_->OnChildVisibilityChanged(1, true);
- coordinator_->policy_->OnChildVisibilityChanged(2, false);
-
- // Note: we never ask foreground processes (including the browser process) to
- // purge memory on WARNING condition.
-
- // Don't ask the background child to purge until the child remains
- // backgrounded for a certain period of time.
- coordinator_->policy_->OnWarningCondition();
- RunUntilIdle();
- EXPECT_EQ(0, client.purge_memory_calls());
- EXPECT_EQ(0, child1->purge_memory_calls());
- EXPECT_EQ(0, child2->purge_memory_calls());
-
- // After a certain period of time is passed, request the child to purge
- // memory.
- task_runner_->FastForwardBy(interval);
- coordinator_->policy_->OnWarningCondition();
- task_runner_->RunUntilIdle();
- RunUntilIdle();
- EXPECT_EQ(0, client.purge_memory_calls());
- EXPECT_EQ(0, child1->purge_memory_calls());
- EXPECT_EQ(1, child2->purge_memory_calls());
-
- // Don't purge memory more than once when the child stays backgrounded.
- task_runner_->FastForwardBy(interval);
- coordinator_->policy_->OnWarningCondition();
- RunUntilIdle();
- EXPECT_EQ(0, client.purge_memory_calls());
- EXPECT_EQ(0, child1->purge_memory_calls());
- EXPECT_EQ(1, child2->purge_memory_calls());
-
- // The background child goes to foreground, goes to background, then a
- // certain period of time is passed. Another purging request should be sent.
- coordinator_->policy_->OnChildVisibilityChanged(2, true);
- coordinator_->policy_->OnChildVisibilityChanged(2, false);
- task_runner_->FastForwardBy(interval);
- coordinator_->policy_->OnWarningCondition();
- RunUntilIdle();
- EXPECT_EQ(0, client.purge_memory_calls());
- EXPECT_EQ(0, child1->purge_memory_calls());
- EXPECT_EQ(2, child2->purge_memory_calls());
-
- base::MemoryCoordinatorClientRegistry::GetInstance()->Unregister(&client);
-}
-
// TODO(bashi): Move policy specific tests into a separate file.
TEST_F(MemoryCoordinatorImplTest, OnCriticalCondition) {
MockMemoryCoordinatorClient client;
« no previous file with comments | « content/browser/memory/memory_coordinator_impl.cc ('k') | content/browser/memory/memory_monitor_android.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698