Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(957)

Unified Diff: components/arc/metrics/oom_kills_monitor.cc

Issue 2197753002: Move OomKillsMonitor from a single-threaded SequencedWorkerPool to a non-joinable thread. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@a0_b1_nonjoinable_thread
Patch Set: review:lhchavez #13 Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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;
}
« components/arc/metrics/oom_kills_monitor.h ('K') | « components/arc/metrics/oom_kills_monitor.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698