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

Unified Diff: tools/telemetry/telemetry/internal/platform/power_monitor/cros_power_monitor.py

Issue 1647513002: Delete tools/telemetry. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 11 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/internal/platform/power_monitor/cros_power_monitor.py
diff --git a/tools/telemetry/telemetry/internal/platform/power_monitor/cros_power_monitor.py b/tools/telemetry/telemetry/internal/platform/power_monitor/cros_power_monitor.py
deleted file mode 100644
index 7f922bd56ffa8b2fa25ceaf53fd27cede8aba2d5..0000000000000000000000000000000000000000
--- a/tools/telemetry/telemetry/internal/platform/power_monitor/cros_power_monitor.py
+++ /dev/null
@@ -1,164 +0,0 @@
-# Copyright 2014 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 collections
-import logging
-import re
-
-from telemetry import decorators
-from telemetry.internal.platform.power_monitor import sysfs_power_monitor
-
-
-class CrosPowerMonitor(sysfs_power_monitor.SysfsPowerMonitor):
- """PowerMonitor that relies on 'dump_power_status' to monitor power
- consumption of a single ChromeOS application.
- """
- def __init__(self, platform_backend):
- """Constructor.
-
- Args:
- platform_backend: A LinuxBasedPlatformBackend object.
-
- Attributes:
- _initial_power: The result of 'dump_power_status' before the test.
- _start_time: The epoch time at which the test starts executing.
- """
- super(CrosPowerMonitor, self).__init__(platform_backend)
- self._initial_power = None
- self._start_time = None
-
- @decorators.Cache
- def CanMonitorPower(self):
- return super(CrosPowerMonitor, self).CanMonitorPower()
-
- def StartMonitoringPower(self, browser):
- super(CrosPowerMonitor, self).StartMonitoringPower(browser)
- if self._IsOnBatteryPower():
- sample = self._platform.RunCommand(['dump_power_status;', 'date', '+%s'])
- self._initial_power, self._start_time = CrosPowerMonitor.SplitSample(
- sample)
- else:
- logging.warning('Device not on battery power during power monitoring. '
- 'Results may be incorrect.')
-
- def StopMonitoringPower(self):
- # Don't need to call self._CheckStop here; it's called by the superclass
- cpu_stats = super(CrosPowerMonitor, self).StopMonitoringPower()
- power_stats = {}
- if self._IsOnBatteryPower():
- sample = self._platform.RunCommand(['dump_power_status;', 'date', '+%s'])
- final_power, end_time = CrosPowerMonitor.SplitSample(sample)
- # The length of the test is used to measure energy consumption.
- length_h = (end_time - self._start_time) / 3600.0
- power_stats = CrosPowerMonitor.ParsePower(self._initial_power,
- final_power, length_h)
- else:
- logging.warning('Device not on battery power during power monitoring. '
- 'Results may be incorrect.')
- return CrosPowerMonitor.CombineResults(cpu_stats, power_stats)
-
- @staticmethod
- def SplitSample(sample):
- """Splits a power and time sample into the two separate values.
-
- Args:
- sample: The result of calling 'dump_power_status; date +%s' on the
- device.
-
- Returns:
- A tuple of power sample and epoch time of the sample.
- """
- sample = sample.strip()
- index = sample.rfind('\n')
- power = sample[:index]
- time = sample[index + 1:]
- return power, int(time)
-
- @staticmethod
- def IsOnBatteryPower(status, board):
- """Determines if the devices is being charged.
-
- Args:
- status: The parsed result of 'dump_power_status'
- board: The name of the board running the test.
-
- Returns:
- True if the device is on battery power; False otherwise.
- """
- on_battery = status['line_power_connected'] == '0'
- # Butterfly can incorrectly report AC online for some time after unplug.
- # Check battery discharge state to confirm.
- if board == 'butterfly':
- on_battery |= status['battery_discharging'] == '1'
- return on_battery
-
- def _IsOnBatteryPower(self):
- """Determines if the device is being charged.
-
- Returns:
- True if the device is on battery power; False otherwise.
- """
- status = CrosPowerMonitor.ParsePowerStatus(
- self._platform.RunCommand(['dump_power_status']))
- board_data = self._platform.RunCommand(['cat', '/etc/lsb-release'])
- board = re.search('BOARD=(.*)', board_data).group(1)
- return CrosPowerMonitor.IsOnBatteryPower(status, board)
-
- @staticmethod
- def ParsePowerStatus(sample):
- """Parses 'dump_power_status' command output.
-
- Args:
- sample: The output of 'dump_power_status'
-
- Returns:
- Dictionary containing all fields from 'dump_power_status'
- """
- rv = collections.defaultdict(dict)
- for ln in sample.splitlines():
- words = ln.split()
- assert len(words) == 2
- rv[words[0]] = words[1]
- return dict(rv)
-
- @staticmethod
- def ParsePower(initial_stats, final_stats, length_h):
- """Parse output of 'dump_power_status'
-
- Args:
- initial_stats: The output of 'dump_power_status' before the test.
- final_stats: The output of 'dump_power_status' after the test.
- length_h: The length of the test in hours.
-
- Returns:
- Dictionary in the format returned by StopMonitoringPower().
- """
- initial = CrosPowerMonitor.ParsePowerStatus(initial_stats)
- final = CrosPowerMonitor.ParsePowerStatus(final_stats)
- # The charge value reported by 'dump_power_status' is not precise enough to
- # give meaningful results across shorter tests, so average energy rate and
- # the length of the test are used.
- initial_power_mw = float(initial['battery_energy_rate']) * 10 ** 3
- final_power_mw = float(final['battery_energy_rate']) * 10 ** 3
- average_power_mw = (initial_power_mw + final_power_mw) / 2.0
-
- # Duplicating CrOS battery fields where applicable.
- def CopyFinalState(field, key):
- """Copy fields from battery final state."""
- if field in final:
- battery[key] = float(final[field])
-
- battery = {}
- CopyFinalState('battery_charge_full', 'charge_full')
- CopyFinalState('battery_charge_full_design', 'charge_full_design')
- CopyFinalState('battery_charge', 'charge_now')
- CopyFinalState('battery_current', 'current_now')
- CopyFinalState('battery_energy', 'energy')
- CopyFinalState('battery_energy_rate', 'energy_rate')
- CopyFinalState('battery_voltage', 'voltage_now')
-
- return {'identifier': 'dump_power_status',
- 'power_samples_mw': [initial_power_mw, final_power_mw],
- 'energy_consumption_mwh': average_power_mw * length_h,
- 'component_utilization': {'battery': battery}}

Powered by Google App Engine
This is Rietveld 408576698