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..7b237061f667d5655fd40357085b00f895e2920b 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) {} |
Luis Héctor Chávez
2016/07/29 21:48:45
DCHECK(outer_);
gab
2016/08/01 15:15:02
Done.
|
+ |
+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); |
+} |
+ |
+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; |
} |