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