Index: tools/telemetry/telemetry/core/platform/proc_supporting_platform_backend.py |
diff --git a/tools/telemetry/telemetry/core/platform/proc_supporting_platform_backend.py b/tools/telemetry/telemetry/core/platform/proc_supporting_platform_backend.py |
deleted file mode 100644 |
index 8633b4301eda2b1c5ccbd0d879d1f6cbe9f6244e..0000000000000000000000000000000000000000 |
--- a/tools/telemetry/telemetry/core/platform/proc_supporting_platform_backend.py |
+++ /dev/null |
@@ -1,125 +0,0 @@ |
-# Copyright 2013 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. |
- |
-try: |
- import resource # pylint: disable=F0401 |
-except ImportError: |
- resource = None # Not available on all platforms |
- |
-from telemetry import decorators |
-from telemetry.core import exceptions |
-from telemetry.core.platform import platform_backend |
- |
- |
-class ProcSupportingPlatformBackend(platform_backend.PlatformBackend): |
- |
- """Represents a platform that supports /proc. |
- |
- Subclasses must implement _GetFileContents and _GetPsOutput.""" |
- |
- def GetSystemCommitCharge(self): |
- meminfo_contents = self._GetFileContents('/proc/meminfo') |
- meminfo = self._GetProcFileDict(meminfo_contents) |
- if not meminfo: |
- return None |
- return (self._ConvertKbToByte(meminfo['MemTotal']) |
- - self._ConvertKbToByte(meminfo['MemFree']) |
- - self._ConvertKbToByte(meminfo['Buffers']) |
- - self._ConvertKbToByte(meminfo['Cached'])) |
- |
- @decorators.Cache |
- def GetSystemTotalPhysicalMemory(self): |
- meminfo_contents = self._GetFileContents('/proc/meminfo') |
- meminfo = self._GetProcFileDict(meminfo_contents) |
- if not meminfo: |
- return None |
- return self._ConvertKbToByte(meminfo['MemTotal']) |
- |
- def GetCpuStats(self, pid): |
- stats = self._GetProcFileForPid(pid, 'stat') |
- if not stats: |
- return {} |
- stats = stats.split() |
- utime = float(stats[13]) |
- stime = float(stats[14]) |
- cpu_process_jiffies = utime + stime |
- return {'CpuProcessTime': cpu_process_jiffies} |
- |
- def GetCpuTimestamp(self): |
- timer_list = self._GetFileContents('/proc/timer_list') |
- total_jiffies = float(self._GetProcJiffies(timer_list)) |
- return {'TotalTime': total_jiffies} |
- |
- def GetMemoryStats(self, pid): |
- status_contents = self._GetProcFileForPid(pid, 'status') |
- stats = self._GetProcFileForPid(pid, 'stat').split() |
- status = self._GetProcFileDict(status_contents) |
- if not status or not stats or 'Z' in status['State']: |
- return {} |
- vm = int(stats[22]) |
- vm_peak = (self._ConvertKbToByte(status['VmPeak']) |
- if 'VmPeak' in status else vm) |
- wss = int(stats[23]) * resource.getpagesize() |
- wss_peak = (self._ConvertKbToByte(status['VmHWM']) |
- if 'VmHWM' in status else wss) |
- |
- private_dirty_bytes = 0 |
- for line in self._GetProcFileForPid(pid, 'smaps').splitlines(): |
- if line.startswith('Private_Dirty:'): |
- private_dirty_bytes += self._ConvertKbToByte(line.split(':')[1].strip()) |
- |
- return {'VM': vm, |
- 'VMPeak': vm_peak, |
- 'PrivateDirty': private_dirty_bytes, |
- 'WorkingSetSize': wss, |
- 'WorkingSetSizePeak': wss_peak} |
- |
- def GetIOStats(self, pid): |
- io_contents = self._GetProcFileForPid(pid, 'io') |
- io = self._GetProcFileDict(io_contents) |
- return {'ReadOperationCount': int(io['syscr']), |
- 'WriteOperationCount': int(io['syscw']), |
- 'ReadTransferCount': int(io['rchar']), |
- 'WriteTransferCount': int(io['wchar'])} |
- |
- def _GetFileContents(self, filename): |
- raise NotImplementedError() |
- |
- def _GetPsOutput(self, columns, pid=None): |
- raise NotImplementedError() |
- |
- def _IsPidAlive(self, pid): |
- assert pid, 'pid is required' |
- return bool(self._GetPsOutput(['pid'], pid) == str(pid)) |
- |
- def _GetProcFileForPid(self, pid, filename): |
- try: |
- return self._GetFileContents('/proc/%s/%s' % (pid, filename)) |
- except IOError: |
- if not self._IsPidAlive(pid): |
- raise exceptions.ProcessGoneException() |
- raise |
- |
- def _ConvertKbToByte(self, value): |
- return int(value.replace('kB','')) * 1024 |
- |
- def _GetProcFileDict(self, contents): |
- retval = {} |
- for line in contents.splitlines(): |
- key, value = line.split(':') |
- retval[key.strip()] = value.strip() |
- return retval |
- |
- def _GetProcJiffies(self, timer_list): |
- """Parse '/proc/timer_list' output and returns the first jiffies attribute. |
- |
- Multi-CPU machines will have multiple 'jiffies:' lines, all of which will be |
- essentially the same. Return the first one.""" |
- if isinstance(timer_list, str): |
- timer_list = timer_list.splitlines() |
- for line in timer_list: |
- if line.startswith('jiffies:'): |
- _, value = line.split(':') |
- return value |
- raise Exception('Unable to find jiffies from /proc/timer_list') |