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

Unified Diff: chrome/browser/oom_priority_manager.h

Issue 7983042: CrOS: Add Discard Tab command link to about:discards (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: revert tab_strip_model.h Created 9 years, 3 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/browser_about_handler.cc ('k') | chrome/browser/oom_priority_manager.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/oom_priority_manager.h
diff --git a/chrome/browser/oom_priority_manager.h b/chrome/browser/oom_priority_manager.h
index 7cb131ee5363e3cf8aca6e92151e4c612cbd3ead..c3146c156ee53c5e97d1923f7a2972e13499073c 100644
--- a/chrome/browser/oom_priority_manager.h
+++ b/chrome/browser/oom_priority_manager.h
@@ -17,6 +17,8 @@
#include "content/common/notification_observer.h"
#include "content/common/notification_registrar.h"
+class TabContents;
+
namespace browser {
// The OomPriorityManager periodically checks (see
@@ -26,11 +28,8 @@ namespace browser {
// 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.
+// The algorithm used favors killing tabs that are not selected, not pinned,
+// and have been idle for longest, in that order of priority.
class OomPriorityManager : public NotificationObserver {
public:
OomPriorityManager();
@@ -43,35 +42,38 @@ class OomPriorityManager : public NotificationObserver {
// to least interesting (OK to kill).
std::vector<string16> GetTabTitles();
+ // Discards a tab to free the memory occupied by its renderer.
+ // Tab still exists in the tab-strip; clicking on it will reload it.
+ void DiscardTab();
+
private:
- struct RendererStats {
- RendererStats();
- ~RendererStats();
+ struct TabStats {
+ TabStats();
+ ~TabStats();
bool is_pinned;
bool is_selected;
base::TimeTicks last_selected;
- size_t memory_used;
base::ProcessHandle renderer_handle;
string16 title;
+ int64 tab_contents_id; // unique ID per TabContents
};
- typedef std::vector<RendererStats> StatsList;
- typedef base::hash_map<base::ProcessHandle, int> ProcessScoreMap;
+ typedef std::vector<TabStats> TabStatsList;
- // Posts DoAdjustOomPriorities task to the file thread. Called when
- // the timer fires.
+ TabStatsList GetTabStatsOnUIThread();
+
+ // Called when the timer fires, sets oom_adjust_score for all renderers.
void AdjustOomPriorities();
+ // Called by AdjustOomPriorities.
+ void AdjustOomPrioritiesOnFileThread(TabStatsList stats_list);
+
// Posts AdjustFocusedTabScore task to the file thread.
void OnFocusTabScoreAdjustmentTimeout();
- // Called by AdjustOomPriorities. Runs on the file thread.
- void DoAdjustOomPriorities();
+ // Sets the score of the focused tab to the least value.
+ void AdjustFocusedTabScoreOnFileThread();
- // Called when a tab comes into focus. Runs on the file thread.
- // Sets the score of only the currently focused tab to the least value.
- void AdjustFocusedTabScore();
-
- static bool CompareRendererStats(RendererStats first, RendererStats second);
+ static bool CompareTabStats(TabStats first, TabStats second);
virtual void Observe(int type,
const NotificationSource& source,
@@ -79,14 +81,13 @@ class OomPriorityManager : public NotificationObserver {
base::RepeatingTimer<OomPriorityManager> timer_;
base::OneShotTimer<OomPriorityManager> focus_tab_score_adjust_timer_;
- // renderer_stats_ is used on both UI and file threads.
- base::Lock renderer_stats_lock_;
- StatsList renderer_stats_;
+ NotificationRegistrar registrar_;
+
// This lock is for pid_to_oom_score_ and focus_tab_pid_.
base::Lock pid_to_oom_score_lock_;
// map maintaining the process - oom_score mapping.
+ typedef base::hash_map<base::ProcessHandle, int> ProcessScoreMap;
ProcessScoreMap pid_to_oom_score_;
- NotificationRegistrar registrar_;
base::ProcessHandle focused_tab_pid_;
DISALLOW_COPY_AND_ASSIGN(OomPriorityManager);
« no previous file with comments | « chrome/browser/browser_about_handler.cc ('k') | chrome/browser/oom_priority_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698