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

Side by Side Diff: chrome/browser/memory/tab_manager.h

Issue 1895773002: Move responsiblity of tab suspending from renderer to TabManager (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix time Created 4 years, 8 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 CHROME_BROWSER_MEMORY_TAB_MANAGER_H_ 5 #ifndef CHROME_BROWSER_MEMORY_TAB_MANAGER_H_
6 #define CHROME_BROWSER_MEMORY_TAB_MANAGER_H_ 6 #define CHROME_BROWSER_MEMORY_TAB_MANAGER_H_
7 7
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <memory> 10 #include <memory>
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
47 #endif 47 #endif
48 48
49 // The TabManager periodically updates (see 49 // The TabManager periodically updates (see
50 // |kAdjustmentIntervalSeconds| in the source) the status of renderers 50 // |kAdjustmentIntervalSeconds| in the source) the status of renderers
51 // which are then used by the algorithm embedded here for priority in being 51 // which are then used by the algorithm embedded here for priority in being
52 // killed upon OOM conditions. 52 // killed upon OOM conditions.
53 // 53 //
54 // The algorithm used favors killing tabs that are not selected, not pinned, 54 // The algorithm used favors killing tabs that are not selected, not pinned,
55 // and have been idle for longest, in that order of priority. 55 // and have been idle for longest, in that order of priority.
56 // 56 //
57 // On Chrome OS (via the delegate), the kernel (via /proc/<pid>/oom_score_adj) 57 // On Chrome OS (via the delegate), the kernel (via /proc/<pid>/oom_score_adj)
Georges Khalil 2016/04/19 13:55:19 Add a mention here about what we do on Android.
58 // will be informed of each renderer's score, which is based on the status, so 58 // will be informed of each renderer's score, which is based on the status, so
59 // in case Chrome is not able to relieve the pressure quickly enough and the 59 // in case Chrome is not able to relieve the pressure quickly enough and the
60 // kernel is forced to kill processes, it will be able to do so using the same 60 // kernel is forced to kill processes, it will be able to do so using the same
61 // algorithm as the one used here. 61 // algorithm as the one used here.
62 // 62 //
63 // Note that the browser tests are only active for platforms that use 63 // Note that the browser tests are only active for platforms that use
64 // TabManager (CrOS only for now) and need to be adjusted accordingly if 64 // TabManager (CrOS only for now) and need to be adjusted accordingly if
65 // support for new platforms is added. 65 // support for new platforms is added.
66 class TabManager : public TabStripModelObserver { 66 class TabManager : public TabStripModelObserver {
67 public: 67 public:
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
138 // NOTE: This value needs to be big enough to allow a process to get over the 138 // NOTE: This value needs to be big enough to allow a process to get over the
139 // hump in responding to memory pressure, so there aren't multiple processes 139 // hump in responding to memory pressure, so there aren't multiple processes
140 // fighting for CPU and worse, temporary memory, while trying to free things 140 // fighting for CPU and worse, temporary memory, while trying to free things
141 // up. Similarly, it shouldn't be too large otherwise it will take too long 141 // up. Similarly, it shouldn't be too large otherwise it will take too long
142 // for the entire system to respond. Ideally, there would be a callback from a 142 // for the entire system to respond. Ideally, there would be a callback from a
143 // child process indicating that the message has been handled. In the meantime 143 // child process indicating that the message has been handled. In the meantime
144 // this is chosen to be sufficient to allow a worst-case V8+Oilpan GC to run, 144 // this is chosen to be sufficient to allow a worst-case V8+Oilpan GC to run,
145 // with a little slop. 145 // with a little slop.
146 enum : int { kRendererNotificationDelayInSeconds = 2 }; 146 enum : int { kRendererNotificationDelayInSeconds = 2 };
147 147
148 enum : int { kSuspendTimersWhenBackgroundedDelayInSeconds = 5 * 60 };
149
148 using MemoryPressureLevel = base::MemoryPressureListener::MemoryPressureLevel; 150 using MemoryPressureLevel = base::MemoryPressureListener::MemoryPressureLevel;
149 151
150 // A callback that returns the current memory pressure level. 152 // A callback that returns the current memory pressure level.
151 using MemoryPressureLevelCallback = base::Callback<MemoryPressureLevel()>; 153 using MemoryPressureLevelCallback = base::Callback<MemoryPressureLevel()>;
152 154
153 // Callback that notifies a |renderer| of the memory pressure at a given 155 // Callback that notifies a |renderer| of the memory pressure at a given
154 // |level|. Provides a testing seam. 156 // |level|. Provides a testing seam.
155 using RendererNotificationCallback = base::Callback< 157 using RendererNotificationCallback = base::Callback<
156 void(const content::RenderProcessHost* /* renderer */, 158 void(const content::RenderProcessHost* /* renderer */,
157 MemoryPressureLevel /* level */)>; 159 MemoryPressureLevel /* level */)>;
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after
323 325
324 // Weak pointer factory used for posting delayed tasks to task_runner_. 326 // Weak pointer factory used for posting delayed tasks to task_runner_.
325 base::WeakPtrFactory<TabManager> weak_ptr_factory_; 327 base::WeakPtrFactory<TabManager> weak_ptr_factory_;
326 328
327 DISALLOW_COPY_AND_ASSIGN(TabManager); 329 DISALLOW_COPY_AND_ASSIGN(TabManager);
328 }; 330 };
329 331
330 } // namespace memory 332 } // namespace memory
331 333
332 #endif // CHROME_BROWSER_MEMORY_TAB_MANAGER_H_ 334 #endif // CHROME_BROWSER_MEMORY_TAB_MANAGER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698