| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/chromeos/low_memory_observer.h" | 5 #include "chrome/browser/chromeos/low_memory_observer.h" |
| 6 | 6 |
| 7 #include <fcntl.h> | 7 #include <fcntl.h> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/chromeos/chromeos_version.h" | 10 #include "base/chromeos/chromeos_version.h" |
| (...skipping 30 matching lines...) Expand all Loading... |
| 41 // kLowMemoryCheckTimeoutMs milliseconds and then start watching again to see | 41 // kLowMemoryCheckTimeoutMs milliseconds and then start watching again to see |
| 42 // if we're still in a low memory state. This is to keep from discarding all | 42 // if we're still in a low memory state. This is to keep from discarding all |
| 43 // tabs the first time we enter the state, because it takes time for the | 43 // tabs the first time we enter the state, because it takes time for the |
| 44 // tabs to deallocate their memory. A timer isn't the perfect solution, but | 44 // tabs to deallocate their memory. A timer isn't the perfect solution, but |
| 45 // without any reliable indicator that a tab has had all its parts deallocated, | 45 // without any reliable indicator that a tab has had all its parts deallocated, |
| 46 // it's the next best thing. | 46 // it's the next best thing. |
| 47 class LowMemoryObserverImpl | 47 class LowMemoryObserverImpl |
| 48 : public base::RefCountedThreadSafe<LowMemoryObserverImpl> { | 48 : public base::RefCountedThreadSafe<LowMemoryObserverImpl> { |
| 49 public: | 49 public: |
| 50 LowMemoryObserverImpl() : watcher_delegate_(this), file_descriptor_(-1) {} | 50 LowMemoryObserverImpl() : watcher_delegate_(this), file_descriptor_(-1) {} |
| 51 ~LowMemoryObserverImpl() { | |
| 52 StopObservingOnFileThread(); | |
| 53 } | |
| 54 | 51 |
| 55 // Start watching the low memory file for readability. | 52 // Start watching the low memory file for readability. |
| 56 // Calls to StartObserving should always be matched with calls to | 53 // Calls to StartObserving should always be matched with calls to |
| 57 // StopObserving. This method should only be called from the FILE thread. | 54 // StopObserving. This method should only be called from the FILE thread. |
| 58 void StartObservingOnFileThread(); | 55 void StartObservingOnFileThread(); |
| 59 | 56 |
| 60 // Stop watching the low memory file for readability. | 57 // Stop watching the low memory file for readability. |
| 61 // May be safely called if StartObserving has not been called. | 58 // May be safely called if StartObserving has not been called. |
| 62 // This method should only be called from the FILE thread. | 59 // This method should only be called from the FILE thread. |
| 63 void StopObservingOnFileThread(); | 60 void StopObservingOnFileThread(); |
| 64 | 61 |
| 65 private: | 62 private: |
| 63 friend class base::RefCountedThreadSafe<LowMemoryObserverImpl>; |
| 64 |
| 65 ~LowMemoryObserverImpl() { |
| 66 StopObservingOnFileThread(); |
| 67 } |
| 68 |
| 66 // Start a timer to resume watching the low memory file descriptor. | 69 // Start a timer to resume watching the low memory file descriptor. |
| 67 void ScheduleNextObservation(); | 70 void ScheduleNextObservation(); |
| 68 | 71 |
| 69 // Actually start watching the file descriptor. | 72 // Actually start watching the file descriptor. |
| 70 void StartWatchingDescriptor(); | 73 void StartWatchingDescriptor(); |
| 71 | 74 |
| 72 // Delegate to receive events from WatchFileDescriptor. | 75 // Delegate to receive events from WatchFileDescriptor. |
| 73 class FileWatcherDelegate : public MessageLoopForIO::Watcher { | 76 class FileWatcherDelegate : public MessageLoopForIO::Watcher { |
| 74 public: | 77 public: |
| 75 explicit FileWatcherDelegate(LowMemoryObserverImpl* owner) | 78 explicit FileWatcherDelegate(LowMemoryObserverImpl* owner) |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 181 base::Bind(&LowMemoryObserverImpl::StopObservingOnFileThread, | 184 base::Bind(&LowMemoryObserverImpl::StopObservingOnFileThread, |
| 182 observer_.get())); | 185 observer_.get())); |
| 183 } | 186 } |
| 184 | 187 |
| 185 // static | 188 // static |
| 186 void LowMemoryObserver::SetLowMemoryMargin(int64 margin_mb) { | 189 void LowMemoryObserver::SetLowMemoryMargin(int64 margin_mb) { |
| 187 content::ZygoteHost::GetInstance()->AdjustLowMemoryMargin(margin_mb); | 190 content::ZygoteHost::GetInstance()->AdjustLowMemoryMargin(margin_mb); |
| 188 } | 191 } |
| 189 | 192 |
| 190 } // namespace chromeos | 193 } // namespace chromeos |
| OLD | NEW |