1e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch// found in the LICENSE file.
4e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
5e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#ifndef CHROME_BROWSER_CHROMEOS_MEMORY_LOW_MEMORY_OBSERVER_H_
6e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#define CHROME_BROWSER_CHROMEOS_MEMORY_LOW_MEMORY_OBSERVER_H_
7e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
8e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "base/memory/ref_counted.h"
9e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
10e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochnamespace chromeos {
11e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
12e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochclass LowMemoryObserverImpl;
13e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
14e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch////////////////////////////////////////////////////////////////////////////////
15e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch// LowMemoryObserver
16e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch//
17e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch// Class to handle observation of low memory device for changes so that we
18e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch// can get a signal from the kernel about low memory conditions and discard tabs
19e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch// when that happens, instead of waiting for the OOM killer to kill renderers
20e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch// (which is more drastic, but still necessary and possible).
21e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch//
22e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch// This object starts and stops the observation, and can be created or deleted
23e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch// from any thread, but the observation occurs on the FILE thread, and tabs are
24e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch// discarded on the UI thread.
25e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochclass LowMemoryObserver {
26e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch public:
27e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  LowMemoryObserver();
28e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  ~LowMemoryObserver();
29e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
30e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  void Start();
31e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  void Stop();
32e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
33e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch private:
34e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  scoped_refptr<LowMemoryObserverImpl> observer_;
35e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
36e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  DISALLOW_COPY_AND_ASSIGN(LowMemoryObserver);
37e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch};
38e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
39e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch}  // namespace chromeos
40e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
41e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#endif  // CHROME_BROWSER_CHROMEOS_MEMORY_LOW_MEMORY_OBSERVER_H_
42