blob: ebd61d6f5e5d728e683dfd25b1f8dcaa72f3abc1 [file] [log] [blame]
# Copyright (c) 2012 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
class ThermalThrottle(object):
"""Class to detect and track thermal throttling
Usage:
Wait for IsThrottled() to be False before running test
After running test call HasBeenThrottled() to find out if the
test run was affected by thermal throttling.
Currently assumes an OMap device.
"""
def __init__(self, adb):
self._adb = adb
self._throttled = False
def HasBeenThrottled(self):
""" True if there has been any throttling since the last call to
HasBeenThrottled or IsThrottled
"""
return self._ReadLog()
def IsThrottled(self):
"""True if currently throttled"""
self._ReadLog()
return self._throttled
def _ReadLog(self):
has_been_throttled = False
serial_number = self._adb.Adb().GetSerialNumber()
log = self._adb.RunShellCommand('dmesg -c')
degree_symbol = unichr(0x00B0)
for line in log:
if 'omap_thermal_throttle' in line:
if not self._throttled:
logging.warning('>>> Device %s Thermally Throttled', serial_number)
self._throttled = True
has_been_throttled = True
if 'omap_thermal_unthrottle' in line:
if self._throttled:
logging.warning('>>> Device %s Thermally Unthrottled', serial_number)
self._throttled = False
has_been_throttled = True
if 'throttle_delayed_work_fn' in line:
temp = float([s for s in line.split() if s.isdigit()][0]) / 1000.0
logging.info(u' Device %s Thermally Thottled at %3.1f%sC',
serial_number, temp, degree_symbol)
# Print temperature of CPU SoC.
omap_temp_file = '/sys/devices/platform/omap/omap_temp_sensor.0/temperature'
if self._adb.FileExistsOnDevice(omap_temp_file):
tempdata = self._adb.GetFileContents(omap_temp_file)
temp = float(tempdata[0]) / 1000.0
logging.info(u'Current OMAP Temperature of %s = %3.1f%sC',
serial_number, temp, degree_symbol)
# Print temperature of battery, to give a system temperature
dumpsys_log = self._adb.RunShellCommand('dumpsys battery')
for line in dumpsys_log:
if 'temperature' in line:
btemp = float([s for s in line.split() if s.isdigit()][0]) / 10.0
logging.info(u'Current battery temperature of %s = %3.1f%sC',
serial_number, btemp, degree_symbol)
return has_been_throttled