Index: athena/resource_manager/resource_manager_impl.cc |
diff --git a/athena/resource_manager/resource_manager_impl.cc b/athena/resource_manager/resource_manager_impl.cc |
index 4036ebc20a74f9495e47aa1ea066618d30a03146..ec6d1c1cb1702bddc8c922aa9c3210ac136e9489 100644 |
--- a/athena/resource_manager/resource_manager_impl.cc |
+++ b/athena/resource_manager/resource_manager_impl.cc |
@@ -176,8 +176,10 @@ void ResourceManagerImpl::OnOverviewModeEnter() { |
void ResourceManagerImpl::OnOverviewModeExit() { |
in_overview_mode_ = false; |
- // Reorder the activities. |
+ // Reorder the activities and manage the resources again since an order change |
+ // might have caused a visibility change. |
UpdateActivityOrder(); |
+ ManageResource(); |
} |
void ResourceManagerImpl::OnSplitViewModeEnter() { |
@@ -247,7 +249,7 @@ void ResourceManagerImpl::ManageResource() { |
max_running_activities = 5; |
break; |
case MEMORY_PRESSURE_CRITICAL: |
- max_running_activities = 0; |
+ max_running_activities = 1 + (in_splitview_mode_ ? 1 : 0); |
break; |
case MEMORY_PRESSURE_MODERATE: |
max_running_activities = 7; |
@@ -265,7 +267,7 @@ void ResourceManagerImpl::ManageResource() { |
// pressure gets critical we only hold as many as are really visible. |
size_t max_activities = kMaxVisibleActivities; |
if (current_memory_pressure_ == MEMORY_PRESSURE_CRITICAL) |
- max_activities = 1 + (in_splitview_mode_ ? 1 : 0); |
+ max_activities = max_running_activities; |
// Restart and / or bail if the order of activities changes due to our calls. |
activity_order_changed_ = false; |
@@ -287,11 +289,13 @@ void ResourceManagerImpl::ManageResource() { |
Activity::ACTIVITY_INVISIBLE; |
// Only change the state when it changes. Note that when the memory |
// pressure is critical, only the primary activities (1 or 2) are made |
- // visible. Furthermore, in relaxed mode we only want to make visible. |
+ // visible. Furthermore, in relaxed mode we only want to turn visible, |
+ // never invisible. |
if (visiblity_state != state && |
(current_memory_pressure_ != MEMORY_PRESSURE_LOW || |
- visiblity_state == Activity::ACTIVITY_VISIBLE)) |
+ visiblity_state == Activity::ACTIVITY_VISIBLE)) { |
activity->SetCurrentState(visiblity_state); |
+ } |
} |
// See which index we should handle next. |