Chromium Code Reviews| Index: components/arc/metrics/oom_kills_monitor.cc |
| diff --git a/components/arc/metrics/oom_kills_monitor.cc b/components/arc/metrics/oom_kills_monitor.cc |
| index 3dc4de62ae9e4f2c07cf35a23871c1267ed2ee41..60e4062d1c31b29cdbe59eaa71b176841dad5ada 100644 |
| --- a/components/arc/metrics/oom_kills_monitor.cc |
| +++ b/components/arc/metrics/oom_kills_monitor.cc |
| @@ -33,27 +33,11 @@ using base::StringPiece; |
| using base::SequencedWorkerPool; |
| using base::TimeDelta; |
| -OomKillsMonitor::OomKillsMonitor() |
| - : worker_pool_( |
| - new SequencedWorkerPool(1, "oom_kills_monitor")) {} |
| - |
| -OomKillsMonitor::~OomKillsMonitor() { |
| - Stop(); |
| -} |
| - |
| -void OomKillsMonitor::Start() { |
| - auto task_runner = worker_pool_->GetTaskRunnerWithShutdownBehavior( |
| - SequencedWorkerPool::CONTINUE_ON_SHUTDOWN); |
| - task_runner->PostTask( |
| - FROM_HERE, base::Bind(&OomKillsMonitor::Run, worker_pool_)); |
| -} |
| - |
| -void OomKillsMonitor::Stop() { |
| - worker_pool_->Shutdown(); |
| -} |
| - |
| namespace { |
| +base::LazyInstance<OomKillsMonitor>::Leaky g_instance = |
| + LAZY_INSTANCE_INITIALIZER; |
| + |
| int64_t GetTimestamp(const StringPiece& line) { |
| std::vector<StringPiece> fields = base::SplitStringPiece( |
| line, ",", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL); |
| @@ -154,9 +138,28 @@ void LogLowMemoryKill(const StringPiece& line) { |
| } // namespace |
| +OomKillsMonitor::OomKillsMonitorHandle::OomKillsMonitorHandle( |
| + OomKillsMonitor* outer) : outer_(outer) { DCHECK(outer_); } |
| + |
| +OomKillsMonitor::OomKillsMonitorHandle::~OomKillsMonitorHandle() { |
| + outer_->is_shutting_down_.Set(); |
| +} |
| + |
| +OomKillsMonitor::OomKillsMonitor() |
| + : worker_thread_("oom_kills_monitor") {} |
| + |
| // static |
| -void OomKillsMonitor::Run( |
| - scoped_refptr<base::SequencedWorkerPool> worker_pool) { |
| +void OomKillsMonitor::StartMonitoring() { |
| + OomKillsMonitor* instance = g_instance.Pointer(); |
| + |
| + DCHECK(!instance->IsRunning()); |
| + |
| + base::Thread::Options thread_options; |
| + thread_options.joinable = false; |
| + instance->StartWithOptions(thread_options); |
| +} |
|
Luis Héctor Chávez
2016/08/01 15:48:14
return OomKillsMonitorHandle(instance); ?
gab
2016/08/04 22:42:36
Yea I was trying to do this on my Windows machine.
|
| + |
| +void OomKillsMonitor::Run() { |
| base::ScopedFILE kmsg_handle( |
| base::OpenFile(base::FilePath("/dev/kmsg"), "r")); |
| if (!kmsg_handle) { |
| @@ -171,7 +174,7 @@ void OomKillsMonitor::Run( |
| char buf[kMaxBufSize]; |
| while (fgets(buf, kMaxBufSize, kmsg_handle.get())) { |
| - if (worker_pool->IsShutdownInProgress()) { |
| + if (is_shutting_down_.IsSet()) { |
| DVLOG(1) << "Chrome is shutting down, exit now."; |
| break; |
| } |