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

Unified Diff: tools/telemetry/telemetry/core/platform/linux_platform_backend.py

Issue 20766003: [Telemetry] Add the ability to flush the system file cache to platform. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Simpler Android support Created 7 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: tools/telemetry/telemetry/core/platform/linux_platform_backend.py
diff --git a/tools/telemetry/telemetry/core/platform/linux_platform_backend.py b/tools/telemetry/telemetry/core/platform/linux_platform_backend.py
index 86206cb9b8c4593eaf32fdd5de9f5d5770710391..42d6e947a84ecaa6944a35572381e9caeef88979 100644
--- a/tools/telemetry/telemetry/core/platform/linux_platform_backend.py
+++ b/tools/telemetry/telemetry/core/platform/linux_platform_backend.py
@@ -2,12 +2,10 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
-try:
- import resource # pylint: disable=F0401
-except ImportError:
- resource = None # Not available on all platforms
+import subprocess
from telemetry.core.platform import posix_platform_backend
+from telemetry.core.platform import proc_util
class LinuxPlatformBackend(posix_platform_backend.PosixPlatformBackend):
@@ -27,40 +25,26 @@ class LinuxPlatformBackend(posix_platform_backend.PosixPlatformBackend):
def HasBeenThermallyThrottled(self):
raise NotImplementedError()
- def _GetProcFileDict(self, filename):
- retval = {}
- for line in self._GetFileContents(filename).splitlines():
- key, value = line.split(':')
- retval[key.strip()] = value.strip()
- return retval
-
- def _ConvertKbToByte(self, value):
- return int(value.replace('kB','')) * 1024
-
def GetSystemCommitCharge(self):
- meminfo = self._GetProcFileDict('/proc/meminfo')
- return (self._ConvertKbToByte(meminfo['MemTotal'])
- - self._ConvertKbToByte(meminfo['MemFree'])
- - self._ConvertKbToByte(meminfo['Buffers'])
- - self._ConvertKbToByte(meminfo['Cached']))
+ meminfo_contents = self._GetFileContents('/proc/meminfo')
+ return proc_util.GetSystemCommitCharge(meminfo_contents)
def GetMemoryStats(self, pid):
- status = self._GetProcFileDict('/proc/%s/status' % pid)
+ status = self._GetFileContents('/proc/%s/status' % pid)
stats = self._GetFileContents('/proc/%s/stat' % pid).split()
-
- if not status or not stats or 'Z' in status['State']:
- return {}
- return {'VM': int(stats[22]),
- 'VMPeak': self._ConvertKbToByte(status['VmPeak']),
- 'WorkingSetSize': int(stats[23]) * resource.getpagesize(),
- 'WorkingSetSizePeak': self._ConvertKbToByte(status['VmHWM'])}
+ return proc_util.GetMemoryStats(status, stats)
def GetIOStats(self, pid):
- io = self._GetProcFileDict('/proc/%s/io' % pid)
- return {'ReadOperationCount': int(io['syscr']),
- 'WriteOperationCount': int(io['syscw']),
- 'ReadTransferCount': int(io['rchar']),
- 'WriteTransferCount': int(io['wchar'])}
+ io_contents = self._GetFileContents('/proc/%s/io' % pid)
+ return proc_util.GetIOStats(io_contents)
def GetOSName(self):
return 'linux'
+
+ def CanFlushIndividualFilesFromSystemCache(self):
+ return True
+
+ def FlushEntireSystemCache(self):
+ p = subprocess.Popen(['/sbin/sysctl', '-w', 'vm.drop_caches=3'])
+ p.wait()
+ assert p.returncode == 0, 'Failed to flush system cache'

Powered by Google App Engine
This is Rietveld 408576698