| Index: chrome/browser/chromeos/arc/arc_low_memory_killer_monitor.cc
|
| diff --git a/chrome/browser/chromeos/arc/arc_low_memory_killer_monitor.cc b/chrome/browser/chromeos/arc/arc_low_memory_killer_monitor.cc
|
| deleted file mode 100644
|
| index 4976cf085255b745811628f2f831ce7ed3d924b9..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/chromeos/arc/arc_low_memory_killer_monitor.cc
|
| +++ /dev/null
|
| @@ -1,113 +0,0 @@
|
| -// Copyright 2016 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "chrome/browser/chromeos/arc/arc_low_memory_killer_monitor.h"
|
| -
|
| -#include <errno.h>
|
| -#include <fcntl.h>
|
| -#include <stdio.h>
|
| -
|
| -#include <vector>
|
| -
|
| -#include "base/bind.h"
|
| -#include "base/files/file_util.h"
|
| -#include "base/location.h"
|
| -#include "base/logging.h"
|
| -#include "base/metrics/histogram_macros.h"
|
| -#include "base/posix/safe_strerror.h"
|
| -#include "base/sequenced_task_runner.h"
|
| -#include "base/strings/string_number_conversions.h"
|
| -#include "base/strings/string_split.h"
|
| -#include "base/time/time.h"
|
| -#include "third_party/re2/src/re2/re2.h"
|
| -
|
| -namespace arc {
|
| -
|
| -using base::SequencedWorkerPool;
|
| -using base::StringPiece;
|
| -using base::TimeDelta;
|
| -
|
| -#define MAX_LOWMEMORYKILL_TIME_SECS 30
|
| -#define UMA_HISTOGRAM_LOWMEMORYKILL_TIMES(name, sample) \
|
| - UMA_HISTOGRAM_CUSTOM_TIMES( \
|
| - name, sample, base::TimeDelta::FromMilliseconds(1), \
|
| - base::TimeDelta::FromSeconds(MAX_LOWMEMORYKILL_TIME_SECS), 50)
|
| -
|
| -ArcLowMemoryKillerMonitor::ArcLowMemoryKillerMonitor()
|
| - : worker_pool_(
|
| - new SequencedWorkerPool(1, "arc_low_memory_killer_monitor")) {}
|
| -
|
| -ArcLowMemoryKillerMonitor::~ArcLowMemoryKillerMonitor() {
|
| - Stop();
|
| -}
|
| -
|
| -void ArcLowMemoryKillerMonitor::Start() {
|
| - auto task_runner = worker_pool_->GetTaskRunnerWithShutdownBehavior(
|
| - SequencedWorkerPool::CONTINUE_ON_SHUTDOWN);
|
| - task_runner->PostTask(
|
| - FROM_HERE, base::Bind(&ArcLowMemoryKillerMonitor::Run, worker_pool_));
|
| -}
|
| -
|
| -void ArcLowMemoryKillerMonitor::Stop() {
|
| - worker_pool_->Shutdown();
|
| -}
|
| -
|
| -// static
|
| -void ArcLowMemoryKillerMonitor::Run(
|
| - scoped_refptr<base::SequencedWorkerPool> worker_pool) {
|
| - static const int kMaxBufSize = 512;
|
| -
|
| - FILE* kmsg_handle = base::OpenFile(base::FilePath("/dev/kmsg"), "r");
|
| - if (!kmsg_handle) {
|
| - LOG(WARNING) << "Open /dev/kmsg failed: " << base::safe_strerror(errno);
|
| - return;
|
| - }
|
| - // Skip kernel messages prior to the instantiation of this object to avoid
|
| - // double reporting.
|
| - fseek(kmsg_handle, 0, SEEK_END);
|
| -
|
| - char buf[kMaxBufSize];
|
| - int freed_size;
|
| - int64_t timestamp, last_timestamp = -1;
|
| - const TimeDelta kMaxTimeDelta =
|
| - TimeDelta::FromSeconds(MAX_LOWMEMORYKILL_TIME_SECS);
|
| -
|
| - while (fgets(buf, kMaxBufSize, kmsg_handle)) {
|
| - if (worker_pool->IsShutdownInProgress()) {
|
| - DVLOG(1) << "Chrome is shutting down, exit now.";
|
| - break;
|
| - }
|
| - if (RE2::PartialMatch(buf, "lowmemorykiller: .* to free (\\d+)kB",
|
| - &freed_size)) {
|
| - std::vector<StringPiece> fields = SplitStringPiece(
|
| - buf, ",", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
|
| -
|
| - // The time to last kill event. Could be |kMaxTimeDelta| in case of the
|
| - // first kill event.
|
| - TimeDelta time_delta(kMaxTimeDelta);
|
| - // Timestamp is the third field in a line of /dev/kmsg.
|
| - //
|
| - // Sample log line:
|
| - // 6,2302,533604004,-;lowmemorykiller: Killing 'externalstorage' (21742),
|
| - // adj 1000,\x0a to free 27320kB on behalf of 'kswapd0' (47) because\x0a
|
| - // cache 181920kB is below limit 184320kB for oom_score_adj 1000\x0a
|
| - // Free memory is 1228kB above reserved
|
| - if (fields.size() >= 3) {
|
| - base::StringToInt64(fields[2], ×tamp);
|
| - if (last_timestamp > 0) {
|
| - time_delta = TimeDelta::FromMicroseconds(timestamp - last_timestamp);
|
| - }
|
| - last_timestamp = timestamp;
|
| -
|
| - UMA_HISTOGRAM_MEMORY_KB("ArcRuntime.LowMemoryKiller.FreedSize",
|
| - freed_size);
|
| - UMA_HISTOGRAM_LOWMEMORYKILL_TIMES(
|
| - "ArcRuntime.LowMemoryKiller.TimeDelta", time_delta);
|
| - }
|
| - }
|
| - }
|
| - base::CloseFile(kmsg_handle);
|
| -}
|
| -
|
| -} // namespace arc
|
|
|