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

Unified Diff: tools/telemetry/telemetry/core/platform/power_monitor/powermetrics_power_monitor.py

Issue 330543008: [Telemetry] Have powermetrics summarize power usage rather than doing it by ourselves (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix review comments Created 6 years, 6 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/telemetry/telemetry/core/platform/power_monitor/powermetrics_power_monitor.py
diff --git a/tools/telemetry/telemetry/core/platform/power_monitor/powermetrics_power_monitor.py b/tools/telemetry/telemetry/core/platform/power_monitor/powermetrics_power_monitor.py
index 365013eb4c794c7efa81dee2154f472ccbbcf8e0..c2f141b543174c95750a19fe25b7cbd8ffaf4b5c 100644
--- a/tools/telemetry/telemetry/core/platform/power_monitor/powermetrics_power_monitor.py
+++ b/tools/telemetry/telemetry/core/platform/power_monitor/powermetrics_power_monitor.py
@@ -7,7 +7,6 @@ import logging
import os
import plistlib
import shutil
-import signal
import tempfile
import xml.parsers.expat
@@ -42,7 +41,9 @@ class PowerMetricsPowerMonitor(power_monitor.PowerMonitor):
self._output_filename = os.path.join(self._output_directory,
'powermetrics.output')
args = ['-f', 'plist',
- '-u', self._output_filename]
+ '-u', self._output_filename,
+ '-i0',
+ '--show-usage-summary']
self._powermetrics_process = self._backend.LaunchApplication(
self.binary_path, args, elevate_privilege=True)
@@ -130,6 +131,7 @@ class PowerMetricsPowerMonitor(power_monitor.PowerMonitor):
# powermetrics outputs multiple plists separated by null terminators.
raw_plists = powermetrics_output.split('\0')
raw_plists = [x for x in raw_plists if len(x) > 0]
+ assert(len(raw_plists) == 1)
# -------- Examine contents of first plist for systems specs. --------
plist = PowerMetricsPowerMonitor._ParsePlistString(raw_plists[0])
@@ -171,28 +173,29 @@ class PowerMetricsPowerMonitor(power_monitor.PowerMonitor):
cpu_num += 1
# -------- Parse Data Out of Plists --------
- for raw_plist in raw_plists:
- plist = PowerMetricsPowerMonitor._ParsePlistString(raw_plist)
- if not plist:
- continue
+ plist = PowerMetricsPowerMonitor._ParsePlistString(raw_plists[0])
+ if not plist:
+ logging.error("Error parsing plist.")
+ return
- # Duration of this sample.
- sample_duration_ms = int(plist['elapsed_ns']) / 10**6
- sample_durations.append(sample_duration_ms)
+ # Duration of this sample.
+ sample_duration_ms = int(plist['elapsed_ns']) / 10**6
+ sample_durations.append(sample_duration_ms)
- if 'processor' not in plist:
- continue
- processor = plist['processor']
+ if 'processor' not in plist:
+ logging.error("'processor' field not found in plist.")
+ return
+ processor = plist['processor']
- energy_consumption_mw = int(processor.get('package_watts', 0)) * 10**3
+ energy_consumption_mw = int(processor.get('package_watts', 0)) * 10**3
- total_energy_consumption_mwh += (energy_consumption_mw *
- (sample_duration_ms / 3600000.))
+ total_energy_consumption_mwh += (energy_consumption_mw *
+ (sample_duration_ms / 3600000.))
- power_samples.append(energy_consumption_mw)
+ power_samples.append(energy_consumption_mw)
- for m in metrics:
- m.samples.append(DataWithMetricKeyPath(m, plist))
+ for m in metrics:
+ m.samples.append(DataWithMetricKeyPath(m, plist))
# -------- Collect and Process Data --------
out_dict = {}
@@ -238,8 +241,7 @@ class PowerMetricsPowerMonitor(power_monitor.PowerMonitor):
"StartMonitoringPower() not called.")
# Tell powermetrics to take an immediate sample.
try:
- self._powermetrics_process.send_signal(signal.SIGINFO)
- self._powermetrics_process.send_signal(signal.SIGTERM)
+ self._powermetrics_process.terminate()
(power_stdout, power_stderr) = self._powermetrics_process.communicate()
returncode = self._powermetrics_process.returncode
assert returncode in [0, -15], (
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698