Chromium Code Reviews| Index: content/browser/memory/memory_coordinator.cc |
| diff --git a/content/browser/memory/memory_coordinator.cc b/content/browser/memory/memory_coordinator.cc |
| index 5bf29c78e1d6afbb11fe113de6507c3193f24188..a0e509b62b1c9eb58f9c99cb2bdfcf6f91ee34f5 100644 |
| --- a/content/browser/memory/memory_coordinator.cc |
| +++ b/content/browser/memory/memory_coordinator.cc |
| @@ -88,10 +88,7 @@ bool MemoryCoordinator::SetChildMemoryState(int render_process_id, |
| if (!iter->second.handle->child().is_bound()) |
| return false; |
| - // We don't suspend foreground renderers. Throttle them instead. |
| - if (memory_state == mojom::MemoryState::SUSPENDED && |
| - iter->second.is_visible) |
| - memory_state = mojom::MemoryState::THROTTLED; |
| + memory_state = OverrideChildState(memory_state, iter->second); |
|
haraken
2016/12/09 03:48:50
OverrideGlobalState ?
I might want to unify terms
bashi
2016/12/09 04:18:45
Done. Maybe "Override" isn't a good verb for this
|
| // A nop doesn't need to be sent, but is considered successful. |
| if (iter->second.memory_state == memory_state) |
| @@ -173,6 +170,23 @@ bool MemoryCoordinator::CanSuspendRenderer(int render_process_id) { |
| return delegate_->CanSuspendBackgroundedRenderer(render_process_id); |
| } |
| +mojom::MemoryState MemoryCoordinator::OverrideChildState( |
| + mojom::MemoryState memory_state, |
| + const ChildInfo& child) { |
| + // We don't suspend foreground renderers. Throttle them instead. |
| + if (child.is_visible && memory_state == mojom::MemoryState::SUSPENDED) |
| + return mojom::MemoryState::THROTTLED; |
| +#if defined(OS_ANDROID) |
| + // On Android, we throttle background renderers immediately. |
| + // TODO(bashi): Create a specialized class of MemoryCoordinator for Android |
| + // and move this ifdef to the class. |
| + if (!child.is_visible && memory_state == mojom::MemoryState::NORMAL) |
| + return mojom::MemoryState::THROTTLED; |
| + // TODO(bashi): Suspend background renderers after a certain period of time. |
| +#endif // defined(OS_ANDROID) |
| + return memory_state; |
| +} |
| + |
| void MemoryCoordinator::SetDelegateForTesting( |
| std::unique_ptr<MemoryCoordinatorDelegate> delegate) { |
| CHECK(!delegate_); |