| 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);
|
|
|