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

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

Issue 1432093002: Improve readability of power monitoring code and add additional (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix issue 556653 Created 5 years, 1 month 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/monsoon_power_monitor.py
diff --git a/tools/telemetry/telemetry/internal/platform/power_monitor/monsoon_power_monitor.py b/tools/telemetry/telemetry/internal/platform/power_monitor/monsoon_power_monitor.py
index a9537e0fc4ddedd9b18c91c30727081a60b16e9d..abbd9f4de158b0d1ce5e19b0c30fa6dd6b442f82 100644
--- a/tools/telemetry/telemetry/internal/platform/power_monitor/monsoon_power_monitor.py
+++ b/tools/telemetry/telemetry/internal/platform/power_monitor/monsoon_power_monitor.py
@@ -3,12 +3,13 @@
# found in the LICENSE file.
import json
+import logging
import multiprocessing
import tempfile
import time
from telemetry.core import exceptions
-from telemetry.internal.platform import power_monitor
+from telemetry.internal.platform.power_monitor import android_power_monitor_base
from telemetry.internal.platform.profiler import monsoon
@@ -42,7 +43,8 @@ def _MonitorPower(device, is_collecting, output):
}
json.dump(result, output)
-class MonsoonPowerMonitor(power_monitor.PowerMonitor):
+
+class MonsoonPowerMonitor(android_power_monitor_base.AndroidPowerMonitorBase):
def __init__(self, _, platform_backend):
super(MonsoonPowerMonitor, self).__init__()
self._powermonitor_process = None
@@ -64,8 +66,7 @@ class MonsoonPowerMonitor(power_monitor.PowerMonitor):
return self._monsoon is not None
def StartMonitoringPower(self, browser):
- assert not self._powermonitor_process, (
- 'Must call StopMonitoringPower().')
+ self._CheckStart()
self._powermonitor_output_file = tempfile.TemporaryFile()
self._is_collecting = multiprocessing.Event()
self._powermonitor_process = multiprocessing.Process(
@@ -81,8 +82,7 @@ class MonsoonPowerMonitor(power_monitor.PowerMonitor):
raise exceptions.ProfilingException('Failed to start data collection.')
def StopMonitoringPower(self):
- assert self._powermonitor_process, (
- 'StartMonitoringPower() not called.')
+ self._CheckStop()
try:
# Tell powermonitor to take an immediate sample and join.
self._is_collecting.clear()
@@ -104,20 +104,17 @@ class MonsoonPowerMonitor(power_monitor.PowerMonitor):
Returns:
Dictionary in the format returned by StopMonitoringPower().
"""
- power_samples = []
- total_energy_consumption_mwh = 0
-
result = json.loads(powermonitor_output)
if result['samples']:
- timedelta_h = result['duration_s'] / len(result['samples']) / 3600
- for (current_a, voltage_v) in result['samples']:
- energy_consumption_mw = current_a * voltage_v * 10**3
- total_energy_consumption_mwh += energy_consumption_mw * timedelta_h
- power_samples.append(energy_consumption_mw)
-
- out_dict = {}
- out_dict['identifier'] = 'monsoon'
- out_dict['power_samples_mw'] = power_samples
- out_dict['monsoon_energy_consumption_mwh'] = total_energy_consumption_mwh
+ timedelta_h = (result['duration_s'] / len(result['samples'])) / 3600.0
+ power_samples = [current_a * voltage_v * 10**3
+ for (current_a, voltage_v) in result['samples']]
+ total_energy_consumption_mwh = sum(power_samples) * timedelta_h
+ else:
+ logging.warning('Sample information not available.')
+ power_samples = []
+ total_energy_consumption_mwh = 0
- return out_dict
+ return {'identifier':'monsoon',
+ 'power_samples_mw':power_samples,
+ 'monsoon_energy_consumption_mwh':total_energy_consumption_mwh}

Powered by Google App Engine
This is Rietveld 408576698