Index: tools/telemetry/telemetry/core/platform/power_monitor/powermetrics_power_monitor_unittest.py |
diff --git a/tools/telemetry/telemetry/core/platform/power_monitor/powermetrics_power_monitor_unittest.py b/tools/telemetry/telemetry/core/platform/power_monitor/powermetrics_power_monitor_unittest.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..b1ab68d8dbaf076b8e0ea6baa1186e5f643a226f |
--- /dev/null |
+++ b/tools/telemetry/telemetry/core/platform/power_monitor/powermetrics_power_monitor_unittest.py |
@@ -0,0 +1,56 @@ |
+# 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 logging |
+import os |
+import unittest |
+ |
+from telemetry import test |
+from telemetry.core import util |
+from telemetry.core.platform import mac_platform_backend |
+from telemetry.core.platform.power_monitor import powermetrics_power_monitor |
+ |
+ |
+class PowerMetricsPowerMonitorTest(unittest.TestCase): |
+ @test.Enabled('mac') |
+ def testCanMonitorPowerUsage(self): |
+ backend = mac_platform_backend.MacPlatformBackend() |
+ power_monitor = powermetrics_power_monitor.PowerMetricsPowerMonitor(backend) |
+ mavericks_or_later = ( |
+ backend.GetOSVersionName() >= mac_platform_backend.MAVERICKS) |
+ # Should always be able to monitor power usage on OS Version >= 10.9 . |
+ self.assertEqual(power_monitor.CanMonitorPowerAsync(), mavericks_or_later, |
+ "Error checking powermetrics availability: '%s'" % '|'.join(os.uname())) |
+ |
+ @test.Enabled('mac') |
+ def testParsePowerMetricsOutput(self): |
+ def getOutput(output_file): |
+ test_data_path = os.path.join(util.GetUnittestDataDir(), |
+ output_file) |
+ process_output = open(test_data_path, 'r').read() |
+ return (powermetrics_power_monitor.PowerMetricsPowerMonitor. |
+ ParsePowerMetricsOutput(process_output)) |
+ |
+ power_monitor = powermetrics_power_monitor.PowerMetricsPowerMonitor( |
+ mac_platform_backend.MacPlatformBackend()) |
+ if not power_monitor.CanMonitorPowerAsync(): |
+ logging.warning('Test not supported on this platform.') |
+ return |
+ |
+ # Supported hardware reports power samples and energy consumption. |
+ result = getOutput('powermetrics_output.output') |
+ |
+ self.assertTrue(len(result['power_samples_mw']) > 1) |
+ self.assertTrue(result['energy_consumption_mwh'] > 0) |
+ |
+ # Verify that all component entries exist in output. |
+ component_utilization = result['component_utilization'] |
+ for k in ['whole_package', 'gpu'] + ['cpu%d' % x for x in range(8)]: |
+ self.assertTrue(component_utilization[k]['average_frequency_mhz'] > 0) |
+ self.assertTrue(component_utilization[k]['idle_percent'] > 0) |
+ |
+ # Unsupported hardware doesn't. |
+ result = getOutput('powermetrics_output_unsupported_hardware.output') |
+ self.assertNotIn('power_samples_mw', result) |
+ self.assertNotIn('energy_consumption_mwh', result) |