| Index: content/browser/memory/memory_coordinator_impl.h
|
| diff --git a/content/browser/memory/memory_coordinator_impl.h b/content/browser/memory/memory_coordinator_impl.h
|
| index 6659c1d0c49211f06529b6599403a7690efec7a1..c7c5052999fec55c8e9dba163f97f0a37d8b86ef 100644
|
| --- a/content/browser/memory/memory_coordinator_impl.h
|
| +++ b/content/browser/memory/memory_coordinator_impl.h
|
| @@ -150,6 +150,7 @@ class CONTENT_EXPORT MemoryCoordinatorImpl : public base::MemoryCoordinator,
|
|
|
| MemoryState memory_state;
|
| bool is_visible = false;
|
| + base::TimeTicks can_purge_after;
|
| std::unique_ptr<MemoryCoordinatorHandleImpl> handle;
|
| };
|
|
|
| @@ -174,6 +175,8 @@ class CONTENT_EXPORT MemoryCoordinatorImpl : public base::MemoryCoordinator,
|
| FRIEND_TEST_ALL_PREFIXES(MemoryCoordinatorImplTest, SetMemoryStateForTesting);
|
| FRIEND_TEST_ALL_PREFIXES(MemoryCoordinatorImplTest, ForceSetMemoryCondition);
|
| FRIEND_TEST_ALL_PREFIXES(MemoryCoordinatorImplTest, DiscardTabUnderCritical);
|
| + FRIEND_TEST_ALL_PREFIXES(MemoryCoordinatorImplTest, OnWarningCondition);
|
| + FRIEND_TEST_ALL_PREFIXES(MemoryCoordinatorImplTest, OnCriticalCondition);
|
|
|
| friend struct MemoryCoordinatorSingletonTraits;
|
| friend class MemoryCoordinatorHandleImpl;
|
| @@ -202,6 +205,24 @@ class CONTENT_EXPORT MemoryCoordinatorImpl : public base::MemoryCoordinator,
|
| // Notifies a state change to child processes.
|
| void NotifyStateToChildren(MemoryState state);
|
|
|
| + // Called periodically while the memory condition is WARNING.
|
| + void OnWarningCondition();
|
| +
|
| + // Called periodically while the memory condition is CRITICAL.
|
| + void OnCriticalCondition();
|
| +
|
| + enum class PurgeTarget {
|
| + BACKGROUNDED,
|
| + ALL,
|
| + };
|
| +
|
| + // Tries to find a candidate child process for purging memory and asks the
|
| + // child to purge memory.
|
| + bool TryToPurgeMemoryFromChildren(PurgeTarget target);
|
| +
|
| + // Tries to purge memory from the browser process.
|
| + bool TryToPurgeMemoryFromBrowser();
|
| +
|
| scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
|
| std::unique_ptr<MemoryCoordinatorDelegate> delegate_;
|
| std::unique_ptr<MemoryMonitor> memory_monitor_;
|
| @@ -226,6 +247,10 @@ class CONTENT_EXPORT MemoryCoordinatorImpl : public base::MemoryCoordinator,
|
| // multiple tasks in the same time frame.
|
| base::CancelableClosure delayed_browser_memory_state_setter_;
|
|
|
| + // If this isn't null, purging memory from the browser process is suppressed
|
| + // until this ticks is passed.
|
| + base::TimeTicks can_purge_after_;
|
| +
|
| // Tracks child processes. An entry is added when a renderer connects to
|
| // MemoryCoordinator and removed automatically when an underlying binding is
|
| // disconnected.
|
|
|