Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(142)

Unified Diff: client/cros/power_status.py

Issue 6800002: power_Draw/Idle/LoadTest: Support temperature sensing for x86 (Closed) Base URL: ssh://git@gitrw.chromium.org:9222/autotest.git
Patch Set: Added temp logging during each query Created 9 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | client/site_tests/power_Draw/power_Draw.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: client/cros/power_status.py
diff --git a/client/cros/power_status.py b/client/cros/power_status.py
index 17a2358c357c8a8a341ee8104bd2a3238fe75cfd..4510ae3b33eb227a89e36e1d0cc84fde425eecb7 100644
--- a/client/cros/power_status.py
+++ b/client/cros/power_status.py
@@ -41,6 +41,70 @@ class DevStat(object):
setattr(self, field, val)
+class ThermalStat(DevStat):
+ """
+ Thermal status.
+
+ Fields:
+ (All temperatures are in millidegrees Celsius.)
+
+ str enabled: Whether thermal zone is enabled
+ int temp: Current temperature
+ str type: Thermal zone type
+ int num_trip_points: Number of thermal trip points that activate
+ cooling devices
+ int num_points_tripped: Temperature is above this many trip points
+ str trip_point_N_type: Trip point #N's type
+ int trip_point_N_temp: Trip point #N's temperature value
+ int cdevX_trip_point: Trip point o cooling device #X (index)
+ """
+
+ MAX_TRIP_POINTS = 20
+
+ thermal_fields = {
+ 'enabled': ['enabled', str],
+ 'temp': ['temp', int],
+ 'type': ['type', str],
+ 'num_points_tripped': ['', '']
+ }
+ def __init__(self, path=None):
+ # Browse the thermal folder for trip point fields.
+ self.num_trip_points = 0
+
+ thermal_fields = glob.glob(path + '/*')
+ for file in thermal_fields:
+ field = file[len(path + '/'):]
+ if field.find('trip_point') != -1:
+ if field.find('temp'):
+ field_type = int
+ else:
+ field_type = str
+ self.thermal_fields[field] = [field, field_type]
+
+ # Count the number of trip points.
+ if field.find('_type') != -1:
+ self.num_trip_points += 1
+
+ super(ThermalStat, self).__init__(self.thermal_fields, path)
+ self.update()
+
+ def update(self):
+ if not os.path.exists(self.path):
+ return
+
+ self.read_all_vals()
+ self.num_points_tripped = 0
+
+ for field in self.thermal_fields:
+ if field.find('trip_point_') != -1 and field.find('_temp') != -1 \
+ and self.temp > self.read_val(field, int):
+ self.num_points_tripped += 1
+ logging.info('Temperature trip point #' + \
+ field[len('trip_point_'):field.rfind('_temp')] + \
+ ' tripped.')
+
+
+
class BatteryStat(DevStat):
"""
Battery status.
@@ -135,15 +199,18 @@ class SysStat(object):
Fields:
battery: A list of BatteryStat objects.
- linepower: A list of LineStat opbjects.
+ linepower: A list of LineStat objects.
"""
def __init__(self):
power_supply_path = '/sys/class/power_supply/*'
self.battery = None
self.linepower = None
+ self.thermal = None
battery_path = None
linepower_path = None
+ thermal_path = '/sys/class/thermal/thermal_zone*'
+
power_supplies = glob.glob(power_supply_path)
for path in power_supplies:
type_path = os.path.join(path,'type')
@@ -159,7 +226,11 @@ class SysStat(object):
self.linepower_path = linepower_path
else:
raise error.TestError('Battery or Linepower path not found')
+ self.thermal_path = glob.glob(thermal_path)[0]
+ self.min_temp = 999999999
+ self.max_temp = -999999999
+ self.temp_log = {}
def refresh(self):
"""
@@ -168,6 +239,16 @@ class SysStat(object):
"""
self.battery = [ BatteryStat(self.battery_path) ]
self.linepower = [ LineStat(self.linepower_path) ]
+ self.thermal = [ ThermalStat(self.thermal_path) ]
+
+ try:
+ if self.thermal[0].temp < self.min_temp * 1000:
+ self.min_temp = float(self.thermal[0].temp) / 1000
+ if self.thermal[0].temp > self.max_temp * 1000:
+ self.max_temp = float(self.thermal[0].temp) / 1000
+ logging.info('Temperature reading: ' + self.thermal[0].temp)
+ except:
+ logging.error('Could not read temperature, skipping.')
def get_status():
« no previous file with comments | « no previous file | client/site_tests/power_Draw/power_Draw.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698