• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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