| Index: tools/telemetry/telemetry/internal/platform/linux_platform_backend.py
|
| diff --git a/tools/telemetry/telemetry/internal/platform/linux_platform_backend.py b/tools/telemetry/telemetry/internal/platform/linux_platform_backend.py
|
| deleted file mode 100644
|
| index 9ec293a3299b20c40b71baf3e3bc4135e9638383..0000000000000000000000000000000000000000
|
| --- a/tools/telemetry/telemetry/internal/platform/linux_platform_backend.py
|
| +++ /dev/null
|
| @@ -1,172 +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.
|
| -
|
| -import logging
|
| -import os
|
| -import platform
|
| -import subprocess
|
| -import sys
|
| -
|
| -from catapult_base import cloud_storage # pylint: disable=import-error
|
| -
|
| -from telemetry.internal.util import binary_manager
|
| -from telemetry.core import os_version
|
| -from telemetry.core import util
|
| -from telemetry import decorators
|
| -from telemetry.internal.platform import linux_based_platform_backend
|
| -from telemetry.internal.platform import posix_platform_backend
|
| -from telemetry.internal.platform.power_monitor import msr_power_monitor
|
| -
|
| -
|
| -_POSSIBLE_PERFHOST_APPLICATIONS = [
|
| - 'perfhost_precise',
|
| - 'perfhost_trusty',
|
| -]
|
| -
|
| -
|
| -class LinuxPlatformBackend(
|
| - posix_platform_backend.PosixPlatformBackend,
|
| - linux_based_platform_backend.LinuxBasedPlatformBackend):
|
| - def __init__(self):
|
| - super(LinuxPlatformBackend, self).__init__()
|
| - self._power_monitor = msr_power_monitor.MsrPowerMonitorLinux(self)
|
| -
|
| - @classmethod
|
| - def IsPlatformBackendForHost(cls):
|
| - return sys.platform.startswith('linux') and not util.IsRunningOnCrosDevice()
|
| -
|
| - def IsThermallyThrottled(self):
|
| - raise NotImplementedError()
|
| -
|
| - def HasBeenThermallyThrottled(self):
|
| - raise NotImplementedError()
|
| -
|
| - @decorators.Cache
|
| - def GetArchName(self):
|
| - return platform.machine()
|
| -
|
| - def GetOSName(self):
|
| - return 'linux'
|
| -
|
| - @decorators.Cache
|
| - def GetOSVersionName(self):
|
| - if not os.path.exists('/etc/lsb-release'):
|
| - raise NotImplementedError('Unknown Linux OS version')
|
| -
|
| - codename = None
|
| - version = None
|
| - for line in self.GetFileContents('/etc/lsb-release').splitlines():
|
| - key, _, value = line.partition('=')
|
| - if key == 'DISTRIB_CODENAME':
|
| - codename = value.strip()
|
| - elif key == 'DISTRIB_RELEASE':
|
| - try:
|
| - version = float(value)
|
| - except ValueError:
|
| - version = 0
|
| - if codename and version:
|
| - break
|
| - return os_version.OSVersion(codename, version)
|
| -
|
| - 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'
|
| -
|
| - def CanLaunchApplication(self, application):
|
| - if application == 'ipfw' and not self._IsIpfwKernelModuleInstalled():
|
| - return False
|
| - return super(LinuxPlatformBackend, self).CanLaunchApplication(application)
|
| -
|
| - def InstallApplication(self, application):
|
| - if application == 'ipfw':
|
| - self._InstallIpfw()
|
| - elif application == 'avconv':
|
| - self._InstallBinary(application, fallback_package='libav-tools')
|
| - elif application in _POSSIBLE_PERFHOST_APPLICATIONS:
|
| - self._InstallBinary(application)
|
| - else:
|
| - raise NotImplementedError(
|
| - 'Please teach Telemetry how to install ' + application)
|
| -
|
| - def CanMonitorPower(self):
|
| - return self._power_monitor.CanMonitorPower()
|
| -
|
| - def CanMeasurePerApplicationPower(self):
|
| - return self._power_monitor.CanMeasurePerApplicationPower()
|
| -
|
| - def StartMonitoringPower(self, browser):
|
| - self._power_monitor.StartMonitoringPower(browser)
|
| -
|
| - def StopMonitoringPower(self):
|
| - return self._power_monitor.StopMonitoringPower()
|
| -
|
| - def ReadMsr(self, msr_number, start=0, length=64):
|
| - cmd = ['rdmsr', '-d', str(msr_number)]
|
| - (out, err) = subprocess.Popen(cmd,
|
| - stdout=subprocess.PIPE,
|
| - stderr=subprocess.PIPE).communicate()
|
| - if err:
|
| - raise OSError(err)
|
| - try:
|
| - result = int(out)
|
| - except ValueError:
|
| - raise OSError('Cannot interpret rdmsr output: %s' % out)
|
| - return result >> start & ((1 << length) - 1)
|
| -
|
| - def _IsIpfwKernelModuleInstalled(self):
|
| - return 'ipfw_mod' in subprocess.Popen(
|
| - ['lsmod'], stdout=subprocess.PIPE).communicate()[0]
|
| -
|
| - def _InstallIpfw(self):
|
| - ipfw_bin = binary_manager.FindPath(
|
| - 'ipfw', self.GetArchName(), self.GetOSName())
|
| - ipfw_mod = binary_manager.FindPath(
|
| - 'ipfw_mod.ko', self.GetArchName(), self.GetOSName())
|
| -
|
| - try:
|
| - changed = cloud_storage.GetIfChanged(
|
| - ipfw_bin, cloud_storage.INTERNAL_BUCKET)
|
| - changed |= cloud_storage.GetIfChanged(
|
| - ipfw_mod, cloud_storage.INTERNAL_BUCKET)
|
| - except cloud_storage.CloudStorageError, e:
|
| - logging.error(str(e))
|
| - logging.error('You may proceed by manually building and installing'
|
| - 'dummynet for your kernel. See: '
|
| - 'http://info.iet.unipi.it/~luigi/dummynet/')
|
| - sys.exit(1)
|
| -
|
| - if changed or not self.CanLaunchApplication('ipfw'):
|
| - if not self._IsIpfwKernelModuleInstalled():
|
| - subprocess.check_call(['/usr/bin/sudo', 'insmod', ipfw_mod])
|
| - os.chmod(ipfw_bin, 0755)
|
| - subprocess.check_call(
|
| - ['/usr/bin/sudo', 'cp', ipfw_bin, '/usr/local/sbin'])
|
| -
|
| - assert self.CanLaunchApplication('ipfw'), 'Failed to install ipfw. ' \
|
| - 'ipfw provided binaries are not supported for linux kernel < 3.13. ' \
|
| - 'You may proceed by manually building and installing dummynet for ' \
|
| - 'your kernel. See: http://info.iet.unipi.it/~luigi/dummynet/'
|
| -
|
| - def _InstallBinary(self, bin_name, fallback_package=None):
|
| - bin_path = binary_manager.FetchPath(
|
| - bin_name, self.GetArchName(), self.GetOSName())
|
| - if not bin_path:
|
| - raise Exception('Could not find the binary package %s' % bin_name)
|
| - os.environ['PATH'] += os.pathsep + os.path.dirname(bin_path)
|
| -
|
| - try:
|
| - cloud_storage.GetIfChanged(bin_path, cloud_storage.INTERNAL_BUCKET)
|
| - os.chmod(bin_path, 0755)
|
| - except cloud_storage.CloudStorageError, e:
|
| - logging.error(str(e))
|
| - if fallback_package:
|
| - raise Exception('You may proceed by manually installing %s via:\n'
|
| - 'sudo apt-get install %s' %
|
| - (bin_name, fallback_package))
|
| -
|
| - assert self.CanLaunchApplication(bin_name), 'Failed to install ' + bin_name
|
|
|