benchmarking/utils/software_power.py (43 lines of code) (raw):
from __future__ import absolute_import, division, print_function, unicode_literals
import time
from utils.custom_logger import getLogger
class PowerUtil:
def __init__(self, platform, duration):
self.platform = platform
self.data = []
self.duration = duration
def collect(self):
self.data.append(self.platform.currentPower())
self.platform.usb_controller.disconnect(self.platform.platform_hash)
getLogger().info("Sleeping for {}".format(self.duration))
time.sleep(self.duration)
self.platform.usb_controller.connect(self.platform.platform_hash)
time.sleep(2) # device needs a second to connect
self.data.append(self.platform.currentPower())
getLogger().info("Done collecting {}".format(self.data))
result = {}
result["software_power"] = _composeStructuredData(
self.data,
self.platform.powerInfo["metric"],
self.platform.powerInfo["unit"],
)
return result
def _composeStructuredData(data, metric, unit):
# TODO(axit): Fix the structure based on how we want to display battery data
def _index(percentile):
return int(percentile / 100.0 * len(data)) - 1
return {
"values": data,
"type": "NET",
"metric": metric,
"unit": unit,
"summary": {
"p0": data[0],
"p10": data[_index(10)],
"p50": data[_index(50)],
"p90": data[_index(90)],
"p100": data[_index(100)],
"mean": 0,
"stdev": 0,
"MAD": 0,
},
}