OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef CONTENT_BROWSER_MEMORY_MEMORY_COORDINATOR_IMPL_H_ | 5 #ifndef CONTENT_BROWSER_MEMORY_MEMORY_COORDINATOR_IMPL_H_ |
6 #define CONTENT_BROWSER_MEMORY_MEMORY_COORDINATOR_IMPL_H_ | 6 #define CONTENT_BROWSER_MEMORY_MEMORY_COORDINATOR_IMPL_H_ |
7 | 7 |
8 #include "base/callback.h" | 8 #include "base/callback.h" |
9 #include "base/memory/memory_coordinator_client.h" | 9 #include "base/memory/memory_coordinator_client.h" |
10 #include "base/memory/memory_pressure_monitor.h" | 10 #include "base/memory/memory_pressure_monitor.h" |
(...skipping 10 matching lines...) Expand all Loading... |
21 namespace content { | 21 namespace content { |
22 | 22 |
23 // NOTE: Memory coordinator is under development and not fully working. | 23 // NOTE: Memory coordinator is under development and not fully working. |
24 // TODO(bashi): Add content::MemoryCoordinator which is a pure virtual | 24 // TODO(bashi): Add content::MemoryCoordinator which is a pure virtual |
25 // interface to expose APIs outside content/. | 25 // interface to expose APIs outside content/. |
26 | 26 |
27 class MemoryCoordinatorHandleImpl; | 27 class MemoryCoordinatorHandleImpl; |
28 class MemoryCoordinatorImplTest; | 28 class MemoryCoordinatorImplTest; |
29 class MemoryMonitor; | 29 class MemoryMonitor; |
30 class MemoryStateUpdater; | 30 class MemoryStateUpdater; |
| 31 class RenderProcessHost; |
31 struct MemoryCoordinatorSingletonTraits; | 32 struct MemoryCoordinatorSingletonTraits; |
32 | 33 |
33 // MemoryCoordinatorImpl is an implementation of MemoryCoordinator. | 34 // MemoryCoordinatorImpl is an implementation of MemoryCoordinator. |
34 // The current implementation uses MemoryStateUpdater to update the global | 35 // The current implementation uses MemoryStateUpdater to update the global |
35 // memory state. See comments in MemoryStateUpdater for details. | 36 // memory state. See comments in MemoryStateUpdater for details. |
36 class CONTENT_EXPORT MemoryCoordinatorImpl : public NotificationObserver, | 37 class CONTENT_EXPORT MemoryCoordinatorImpl : public NotificationObserver, |
37 public base::NonThreadSafe { | 38 public base::NonThreadSafe { |
38 public: | 39 public: |
39 using MemoryState = base::MemoryState; | 40 using MemoryState = base::MemoryState; |
40 | 41 |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
89 // remains the same until |duration| is passed or another call of this method. | 90 // remains the same until |duration| is passed or another call of this method. |
90 void ForceSetGlobalState(base::MemoryState new_state, | 91 void ForceSetGlobalState(base::MemoryState new_state, |
91 base::TimeDelta duration); | 92 base::TimeDelta duration); |
92 | 93 |
93 // Changes the global state and notifies state changes to clients (lives in | 94 // Changes the global state and notifies state changes to clients (lives in |
94 // the browser) and child processes (renderers) if needed. Returns true when | 95 // the browser) and child processes (renderers) if needed. Returns true when |
95 // the state is actually changed. | 96 // the state is actually changed. |
96 bool ChangeStateIfNeeded(MemoryState prev_state, MemoryState next_state); | 97 bool ChangeStateIfNeeded(MemoryState prev_state, MemoryState next_state); |
97 | 98 |
98 protected: | 99 protected: |
| 100 // Returns the RenderProcessHost which is correspond to the given id. |
| 101 // Returns nullptr if there is no corresponding RenderProcessHost. |
| 102 // This is a virtual method so that we can write tests without having |
| 103 // actual RenderProcessHost. |
| 104 virtual RenderProcessHost* GetRenderProcessHost(int render_process_id); |
| 105 |
| 106 // Sets a delegate for testing. |
| 107 void SetDelegateForTesting( |
| 108 std::unique_ptr<MemoryCoordinatorDelegate> delegate); |
| 109 |
99 // Adds the given ChildMemoryCoordinator as a child of this coordinator. | 110 // Adds the given ChildMemoryCoordinator as a child of this coordinator. |
100 void AddChildForTesting(int dummy_render_process_id, | 111 void AddChildForTesting(int dummy_render_process_id, |
101 mojom::ChildMemoryCoordinatorPtr child); | 112 mojom::ChildMemoryCoordinatorPtr child); |
102 | 113 |
103 // Callback invoked by mojo when the child connection goes down. Exposed | 114 // Callback invoked by mojo when the child connection goes down. Exposed |
104 // for testing. | 115 // for testing. |
105 void OnConnectionError(int render_process_id); | 116 void OnConnectionError(int render_process_id); |
106 | 117 |
107 // Returns true when a given renderer can be suspended. | 118 // Returns true when a given renderer can be suspended. |
108 bool CanSuspendRenderer(int render_process_id); | 119 bool CanSuspendRenderer(int render_process_id); |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
141 friend class MemoryCoordinatorHandleImpl; | 152 friend class MemoryCoordinatorHandleImpl; |
142 | 153 |
143 // Called when ChildMemoryCoordinator calls AddChild(). | 154 // Called when ChildMemoryCoordinator calls AddChild(). |
144 void OnChildAdded(int render_process_id); | 155 void OnChildAdded(int render_process_id); |
145 | 156 |
146 // Called by SetChildMemoryState() to determine a child memory state based on | 157 // Called by SetChildMemoryState() to determine a child memory state based on |
147 // the current status of the child process. | 158 // the current status of the child process. |
148 MemoryState OverrideGlobalState(MemoryState memroy_state, | 159 MemoryState OverrideGlobalState(MemoryState memroy_state, |
149 const ChildInfo& child); | 160 const ChildInfo& child); |
150 | 161 |
151 void SetDelegateForTesting( | |
152 std::unique_ptr<MemoryCoordinatorDelegate> delegate); | |
153 | |
154 // Helper function of CreateHandle and AddChildForTesting. | 162 // Helper function of CreateHandle and AddChildForTesting. |
155 void CreateChildInfoMapEntry( | 163 void CreateChildInfoMapEntry( |
156 int render_process_id, | 164 int render_process_id, |
157 std::unique_ptr<MemoryCoordinatorHandleImpl> handle); | 165 std::unique_ptr<MemoryCoordinatorHandleImpl> handle); |
158 | 166 |
159 // Notifies a state change to in-process clients. | 167 // Notifies a state change to in-process clients. |
160 void NotifyStateToClients(); | 168 void NotifyStateToClients(); |
161 | 169 |
162 // Notifies a state change to child processes. | 170 // Notifies a state change to child processes. |
163 void NotifyStateToChildren(); | 171 void NotifyStateToChildren(); |
(...skipping 15 matching lines...) Expand all Loading... |
179 // MemoryCoordinator and removed automatically when an underlying binding is | 187 // MemoryCoordinator and removed automatically when an underlying binding is |
180 // disconnected. | 188 // disconnected. |
181 ChildInfoMap children_; | 189 ChildInfoMap children_; |
182 | 190 |
183 DISALLOW_COPY_AND_ASSIGN(MemoryCoordinatorImpl); | 191 DISALLOW_COPY_AND_ASSIGN(MemoryCoordinatorImpl); |
184 }; | 192 }; |
185 | 193 |
186 } // namespace content | 194 } // namespace content |
187 | 195 |
188 #endif // CONTENT_BROWSER_MEMORY_MEMORY_COORDINATOR_IMPL_H_ | 196 #endif // CONTENT_BROWSER_MEMORY_MEMORY_COORDINATOR_IMPL_H_ |
OLD | NEW |