summaryrefslogtreecommitdiffstats
path: root/testing/mozbase/mozpower/mozpower/macintelpower.py
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--testing/mozbase/mozpower/mozpower/macintelpower.py92
1 files changed, 92 insertions, 0 deletions
diff --git a/testing/mozbase/mozpower/mozpower/macintelpower.py b/testing/mozbase/mozpower/mozpower/macintelpower.py
new file mode 100644
index 0000000000..18629b4a9a
--- /dev/null
+++ b/testing/mozbase/mozpower/mozpower/macintelpower.py
@@ -0,0 +1,92 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+import time
+
+from .intel_power_gadget import IntelPowerGadget, IPGResultsHandler
+from .powerbase import PowerBase
+
+
+class MacIntelPower(PowerBase):
+ """MacIntelPower is the OS and CPU dependent class for
+ power measurement gathering on Mac Intel-based hardware.
+
+ ::
+
+ from mozpower.macintelpower import MacIntelPower
+
+ # duration and output_file_path are used in IntelPowerGadget
+ mip = MacIntelPower(ipg_measure_duration=600, output_file_path='power-testing')
+
+ mip.initialize_power_measurements()
+ # Run test...
+ mip.finalize_power_measurements(test_name='raptor-test-name')
+
+ perfherder_data = mip.get_perfherder_data()
+ """
+
+ def __init__(self, logger_name="mozpower", **kwargs):
+ """Initializes the MacIntelPower object.
+
+ :param str logger_name: logging logger name. Defaults to 'mozpower'.
+ :param dict kwargs: optional keyword arguments passed to IntelPowerGadget.
+ """
+ PowerBase.__init__(self, logger_name=logger_name, os="darwin", cpu="intel")
+ self.ipg = IntelPowerGadget(self.ipg_path, **kwargs)
+ self.ipg_results_handler = None
+ self.start_time = None
+ self.end_time = None
+ self.perfherder_data = {}
+
+ def initialize_power_measurements(self):
+ """Starts power measurement gathering through IntelPowerGadget."""
+ self._logger.info("Initializing power measurements...")
+
+ # Start measuring
+ self.ipg.start_ipg()
+
+ # Record start time to get an approximation of run time
+ self.start_time = time.time()
+
+ def finalize_power_measurements(
+ self, test_name="power-testing", output_dir_path="", **kwargs
+ ):
+ """Stops power measurement gathering through IntelPowerGadget, cleans the data,
+ and produces partial perfherder formatted data that is stored in perfherder_data.
+
+ :param str test_name: name of the test that was run.
+ :param str output_dir_path: directory to store output files.
+ :param dict kwargs: contains optional arguments to stop_ipg.
+ """
+ self._logger.info("Finalizing power measurements...")
+ self.end_time = time.time()
+
+ # Wait until Intel Power Gadget is done, then clean the data
+ # and then format it
+ self.ipg.stop_ipg(**kwargs)
+
+ # Handle the results and format them to a partial perfherder format
+ if not output_dir_path:
+ output_dir_path = self.ipg.output_dir_path
+
+ self.ipg_results_handler = IPGResultsHandler(
+ self.ipg.output_files,
+ output_dir_path,
+ ipg_measure_duration=self.ipg.ipg_measure_duration,
+ sampling_rate=self.ipg.sampling_rate,
+ logger_name=self.logger_name,
+ )
+
+ self.ipg_results_handler.clean_ipg_data()
+ self.perfherder_data = (
+ self.ipg_results_handler.format_ipg_data_to_partial_perfherder(
+ self.end_time - self.start_time, test_name
+ )
+ )
+
+ def get_perfherder_data(self):
+ """Returns the perfherder data output that was produced.
+
+ :returns: dict
+ """
+ return self.perfherder_data