1# Copyright (c) 2010 The Chromium OS Authors. All rights reserved. 2# Use of this source code is governed by a BSD-style license that can be 3# found in the LICENSE file. 4 5from autotest_lib.client.bin import test 6from autotest_lib.client.common_lib import error 7from autotest_lib.client.cros import power_suspend 8 9 10# In cases like crosbug.com/p/26289, we want results, but also want 11# to make sure we are suspending quickly enough. Retry with this amount 12# of extra suspend time to make sure we can get some results, even 13# if we throw a warning. 14EXTRA_TIME = 10 15 16 17class power_Resume(test.test): 18 """class for power_Resume test.""" 19 version = 1 20 preserve_srcdir = True 21 22 def initialize(self): 23 self._suspender = power_suspend.Suspender(self.resultsdir, 24 throw=True, device_times=True) 25 26 27 def run_once(self, max_devs_returned=10, seconds=0, 28 ignore_kernel_warns=False): 29 try: 30 self._suspend_once(max_devs_returned, seconds, ignore_kernel_warns) 31 except error.TestWarn: 32 self._suspend_once(max_devs_returned, seconds + EXTRA_TIME, 33 ignore_kernel_warns) 34 raise 35 36 37 def _suspend_once(self, max_devs_returned, seconds, ignore_kernel_warns): 38 (results, device_times) = \ 39 self._suspender.suspend(seconds, 40 ignore_kernel_warns=ignore_kernel_warns) 41 42 # return as keyvals the slowest n devices 43 slowest_devs = sorted( 44 device_times, 45 key=device_times.get, 46 reverse=True)[:max_devs_returned] 47 for dev in slowest_devs: 48 results[dev] = device_times[dev] 49 50 self.output_perf_value(description='system_suspend', 51 value=results['seconds_system_suspend'], 52 units='sec', higher_is_better=False) 53 self.output_perf_value(description='system_resume', 54 value=results['seconds_system_resume'], 55 units='sec', higher_is_better=False) 56 self.write_perf_keyval(results) 57