| 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 badbdb0268c9739da9ba8832da42b4d9c8245ee3..abb6fe9eebf3809ba827b562a2c613061243a2bb 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
|
| @@ -228,12 +228,23 @@ class PowerMetricsPowerMonitor(power_monitor.PowerMonitor):
|
| StoreMetricAverage(m, sample_durations, out_dict)
|
| return out_dict
|
|
|
| + def _KillPowerMetricsProcess(self):
|
| + """Kill a running powermetrics process."""
|
| + try:
|
| + self._powermetrics_process.terminate()
|
| + except OSError:
|
| + # terminate() can fail when Powermetrics does not have the SetUID set.
|
| + self._backend.LaunchApplication(
|
| + '/usr/bin/pkill',
|
| + ['-SIGTERM', os.path.basename(self.binary_path)],
|
| + elevate_privilege=True)
|
| +
|
| def StopMonitoringPower(self):
|
| assert self._powermetrics_process, (
|
| 'StartMonitoringPower() not called.')
|
| # Tell powermetrics to take an immediate sample.
|
| try:
|
| - self._powermetrics_process.terminate()
|
| + self._KillPowerMetricsProcess()
|
| (power_stdout, power_stderr) = self._powermetrics_process.communicate()
|
| returncode = self._powermetrics_process.returncode
|
| assert returncode in [0, -15], (
|
|
|