| Index: chrome/browser/chromeos/memory/oom_priority_manager.h
 | 
| diff --git a/chrome/browser/chromeos/memory/oom_priority_manager.h b/chrome/browser/chromeos/memory/oom_priority_manager.h
 | 
| deleted file mode 100644
 | 
| index fbb44306f5f76917df66c751230cac1f06c03c8d..0000000000000000000000000000000000000000
 | 
| --- a/chrome/browser/chromeos/memory/oom_priority_manager.h
 | 
| +++ /dev/null
 | 
| @@ -1,197 +0,0 @@
 | 
| -// Copyright (c) 2012 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_CHROMEOS_MEMORY_OOM_PRIORITY_MANAGER_H_
 | 
| -#define CHROME_BROWSER_CHROMEOS_MEMORY_OOM_PRIORITY_MANAGER_H_
 | 
| -
 | 
| -#include <utility>
 | 
| -#include <vector>
 | 
| -
 | 
| -#include "base/compiler_specific.h"
 | 
| -#include "base/containers/hash_tables.h"
 | 
| -#include "base/gtest_prod_util.h"
 | 
| -#include "base/memory/memory_pressure_listener.h"
 | 
| -#include "base/memory/scoped_ptr.h"
 | 
| -#include "base/process/process.h"
 | 
| -#include "base/strings/string16.h"
 | 
| -#include "base/synchronization/lock.h"
 | 
| -#include "base/time/time.h"
 | 
| -#include "base/timer/timer.h"
 | 
| -#include "content/public/browser/notification_observer.h"
 | 
| -#include "content/public/browser/notification_registrar.h"
 | 
| -
 | 
| -class GURL;
 | 
| -
 | 
| -namespace chromeos {
 | 
| -
 | 
| -class LowMemoryObserver;
 | 
| -
 | 
| -// 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_score_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 selected, not pinned,
 | 
| -// and have been idle for longest, in that order of priority.
 | 
| -class OomPriorityManager : public content::NotificationObserver {
 | 
| - public:
 | 
| -  OomPriorityManager();
 | 
| -  ~OomPriorityManager() override;
 | 
| -
 | 
| -  // Number of discard events since Chrome started.
 | 
| -  int discard_count() const { return discard_count_; }
 | 
| -
 | 
| -  // See member comment.
 | 
| -  bool recent_tab_discard() const { return recent_tab_discard_; }
 | 
| -
 | 
| -  void Start();
 | 
| -  void Stop();
 | 
| -
 | 
| -  // Returns list of tab titles sorted from most interesting (don't kill)
 | 
| -  // to least interesting (OK to kill).
 | 
| -  std::vector<base::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.
 | 
| -  // Returns true if it successfully found a tab and discarded it.
 | 
| -  bool DiscardTab();
 | 
| -
 | 
| -  // Log memory statistics for the running processes, then discards a tab.
 | 
| -  // Tab discard happens sometime later, as collecting the statistics touches
 | 
| -  // multiple threads and takes time.
 | 
| -  void LogMemoryAndDiscardTab();
 | 
| -
 | 
| -  // Log memory statistics for the running processes, then call the callback.
 | 
| -  void LogMemory(const std::string& title, const base::Closure& callback);
 | 
| -
 | 
| - private:
 | 
| -  FRIEND_TEST_ALL_PREFIXES(OomPriorityManagerTest, Comparator);
 | 
| -  FRIEND_TEST_ALL_PREFIXES(OomPriorityManagerTest, IsReloadableUI);
 | 
| -  FRIEND_TEST_ALL_PREFIXES(OomPriorityManagerTest, GetProcessHandles);
 | 
| -
 | 
| -  struct TabStats {
 | 
| -    TabStats();
 | 
| -    ~TabStats();
 | 
| -    bool is_app;  // browser window is an app
 | 
| -    bool is_reloadable_ui;  // Reloadable web UI page, like NTP or Settings.
 | 
| -    bool is_playing_audio;
 | 
| -    bool is_pinned;
 | 
| -    bool is_selected;  // selected in the currently active browser window
 | 
| -    bool is_discarded;
 | 
| -    base::TimeTicks last_active;
 | 
| -    base::ProcessHandle renderer_handle;
 | 
| -    int child_process_host_id;
 | 
| -    base::string16 title;
 | 
| -    int64 tab_contents_id;  // unique ID per WebContents
 | 
| -  };
 | 
| -  typedef std::vector<TabStats> TabStatsList;
 | 
| -
 | 
| -  static void PurgeMemoryAndDiscardTabs();
 | 
| -
 | 
| -  // Returns true if the |url| represents an internal Chrome web UI page that
 | 
| -  // can be easily reloaded and hence makes a good choice to discard.
 | 
| -  static bool IsReloadableUI(const GURL& url);
 | 
| -
 | 
| -  // Discards a tab with the given unique ID.  Returns true if discard occurred.
 | 
| -  bool DiscardTabById(int64 target_web_contents_id);
 | 
| -
 | 
| -  // Records UMA histogram statistics for a tab discard. We record statistics
 | 
| -  // for user triggered discards via chrome://discards/ because that allows us
 | 
| -  // to manually test the system.
 | 
| -  void RecordDiscardStatistics();
 | 
| -
 | 
| -  // Record whether we ran out of memory during a recent time interval.
 | 
| -  // This allows us to normalize low memory statistics versus usage.
 | 
| -  void RecordRecentTabDiscard();
 | 
| -
 | 
| -  // Purges data structures in the browser that can be easily recomputed.
 | 
| -  void PurgeBrowserMemory();
 | 
| -
 | 
| -  // Returns the number of tabs open in all browser instances.
 | 
| -  int GetTabCount() const;
 | 
| -
 | 
| -  TabStatsList GetTabStatsOnUIThread();
 | 
| -
 | 
| -  // Called when the timer fires, sets oom_adjust_score for all renderers.
 | 
| -  void AdjustOomPriorities();
 | 
| -
 | 
| -  // Pair to hold child process host id and ProcessHandle
 | 
| -  typedef std::pair<int, base::ProcessHandle> ProcessInfo;
 | 
| -
 | 
| -  // Returns a list of child process host ids and ProcessHandles from
 | 
| -  // |stats_list| with unique pids. If multiple tabs use the same process,
 | 
| -  // returns the first child process host id and corresponding pid. This implies
 | 
| -  // that the processes are selected based on their "most important" tab.
 | 
| -  static std::vector<ProcessInfo> GetChildProcessInfos(
 | 
| -      const TabStatsList& stats_list);
 | 
| -
 | 
| -  // Called by AdjustOomPriorities.
 | 
| -  void AdjustOomPrioritiesOnFileThread(TabStatsList stats_list);
 | 
| -
 | 
| -  // Posts AdjustFocusedTabScore task to the file thread.
 | 
| -  void OnFocusTabScoreAdjustmentTimeout();
 | 
| -
 | 
| -  // Sets the score of the focused tab to the least value.
 | 
| -  void AdjustFocusedTabScoreOnFileThread();
 | 
| -
 | 
| -  static bool CompareTabStats(TabStats first, TabStats second);
 | 
| -
 | 
| -  void Observe(int type,
 | 
| -               const content::NotificationSource& source,
 | 
| -               const content::NotificationDetails& details) override;
 | 
| -
 | 
| -  // Called by the memory pressure listener when the memory pressure rises.
 | 
| -  void OnMemoryPressure(
 | 
| -      base::MemoryPressureListener::MemoryPressureLevel memory_pressure_level);
 | 
| -
 | 
| -  base::RepeatingTimer<OomPriorityManager> timer_;
 | 
| -  base::OneShotTimer<OomPriorityManager> focus_tab_score_adjust_timer_;
 | 
| -  base::RepeatingTimer<OomPriorityManager> recent_tab_discard_timer_;
 | 
| -  content::NotificationRegistrar registrar_;
 | 
| -
 | 
| -  // This lock is for |oom_score_map_| and |focused_tab_process_info_|.
 | 
| -  base::Lock oom_score_lock_;
 | 
| -  // Map maintaining the child process host id - oom_score mapping.
 | 
| -  typedef base::hash_map<int, int> ProcessScoreMap;
 | 
| -  ProcessScoreMap oom_score_map_;
 | 
| -  // Holds the focused tab's child process host id.
 | 
| -  ProcessInfo focused_tab_process_info_;
 | 
| -
 | 
| -  // The old observer for the kernel low memory signal. This is null if
 | 
| -  // the new MemoryPressureListener is used.
 | 
| -  // TODO(skuhne): Remove this when the enhanced memory observer is turned on
 | 
| -  // by default.
 | 
| -  scoped_ptr<LowMemoryObserver> low_memory_observer_;
 | 
| -
 | 
| -  // A listener to global memory pressure events. This will be used if the
 | 
| -  // memory pressure system was instantiated - otherwise the LowMemoryObserver
 | 
| -  // will be used.
 | 
| -  scoped_ptr<base::MemoryPressureListener> memory_pressure_listener_;
 | 
| -
 | 
| -  // Wall-clock time when the priority manager started running.
 | 
| -  base::TimeTicks start_time_;
 | 
| -
 | 
| -  // Wall-clock time of last tab discard during this browsing session, or 0 if
 | 
| -  // no discard has happened yet.
 | 
| -  base::TimeTicks last_discard_time_;
 | 
| -
 | 
| -  // Wall-clock time of last priority adjustment, used to correct the above
 | 
| -  // times for discontinuities caused by suspend/resume.
 | 
| -  base::TimeTicks last_adjust_time_;
 | 
| -
 | 
| -  // Number of times we have discarded a tab, for statistics.
 | 
| -  int discard_count_;
 | 
| -
 | 
| -  // Whether a tab discard event has occurred during the last time interval,
 | 
| -  // used for statistics normalized by usage.
 | 
| -  bool recent_tab_discard_;
 | 
| -
 | 
| -  DISALLOW_COPY_AND_ASSIGN(OomPriorityManager);
 | 
| -};
 | 
| -
 | 
| -}  // namespace chromeos
 | 
| -
 | 
| -#endif  // CHROME_BROWSER_CHROMEOS_MEMORY_OOM_PRIORITY_MANAGER_H_
 | 
| 
 |