Index: chrome/browser/oom_priority_manager.h |
diff --git a/chrome/browser/oom_priority_manager.h b/chrome/browser/oom_priority_manager.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..00734066dfcc6aa67366f931f6008ed11939f4ca |
--- /dev/null |
+++ b/chrome/browser/oom_priority_manager.h |
@@ -0,0 +1,48 @@ |
+// Copyright (c) 2010 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef CHROME_BROWSER_OOM_PRIORITY_MANAGER_H_ |
+#define CHROME_BROWSER_OOM_PRIORITY_MANAGER_H_ |
+ |
+#include "base/timer.h" |
+ |
+namespace browser { |
+ |
+// The OomPriorityManager periodically checks (see |
+// ADJUSTMENT_INTERVAL_SECONDS in the source) the status of renderers |
+// and adjusts the out of memory (OOM) adjustment value (in |
+// /proc/<pid>/oom_adj) of the renderers so that they match the |
+// algorithm embedded here for priority in being killed upon OOM |
+// conditions. |
+// |
+// The algorithm used favors killing tabs that are not pinned, have |
+// been idle for longest, and take up the most memory, in that order |
+// of priority. We round the idle times to the nearest few minutes |
+// (see BUCKET_INTERVAL_MINUTES in the source) so that we can bucket |
+// them, as no two tabs will have exactly the same idle time. |
+class OomPriorityManager { |
+ public: |
+ OomPriorityManager(); |
+ ~OomPriorityManager(); |
+ |
+ private: |
+ void StartTimer(); |
+ void StopTimer(); |
+ |
+ // Starts DoAdjustOomPriorities on the file threadead. Called when the |
+ // timer fires. |
+ void AdjustOomPriorities(); |
+ |
+ // Called by AdjustOomPriorities. Runs on the file thread. |
+ void DoAdjustOomPriorities(); |
+ |
+ base::RepeatingTimer<OomPriorityManager> timer_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(OomPriorityManager); |
+}; |
+} // namespace browser |
+ |
+DISABLE_RUNNABLE_METHOD_REFCOUNT(browser::OomPriorityManager); |
+ |
+#endif // CHROME_BROWSER_OOM_PRIORITY_MANAGER_H_ |