summaryrefslogtreecommitdiffstats
path: root/build/android
diff options
context:
space:
mode:
authorrnephew <rnephew@chromium.org>2015-11-02 12:50:49 -0800
committerCommit bot <commit-bot@chromium.org>2015-11-02 20:51:35 +0000
commit07b89816e19ddc23e0de9cff0e402fd3e39bc58b (patch)
tree94c3e9eba8b28b1d89db389cf328309fe55dc167 /build/android
parentefab199bff6dbb40e60761bed6ef0e274096f6d9 (diff)
downloadchromium_src-07b89816e19ddc23e0de9cff0e402fd3e39bc58b.zip
chromium_src-07b89816e19ddc23e0de9cff0e402fd3e39bc58b.tar.gz
chromium_src-07b89816e19ddc23e0de9cff0e402fd3e39bc58b.tar.bz2
[Android] Add ability to ensure screen is on before running tests.
BUG=546837 Review URL: https://codereview.chromium.org/1406273006 Cr-Commit-Position: refs/heads/master@{#357424}
Diffstat (limited to 'build/android')
-rw-r--r--build/android/devil/android/device_utils.py49
-rwxr-xr-xbuild/android/devil/android/device_utils_test.py96
-rw-r--r--build/android/pylib/perf/test_runner.py1
3 files changed, 140 insertions, 6 deletions
diff --git a/build/android/devil/android/device_utils.py b/build/android/devil/android/device_utils.py
index b169240..66485c5 100644
--- a/build/android/devil/android/device_utils.py
+++ b/build/android/devil/android/device_utils.py
@@ -2081,3 +2081,52 @@ class DeviceUtils(object):
logging.warning('Possible problem when granting permissions. Blacklist '
'may need to be updated.')
logging.warning(output)
+
+ @decorators.WithTimeoutAndRetriesFromInstance()
+ def IsScreenOn(self, timeout=None, retries=None):
+ """Determines if screen is on.
+
+ Dumpsys input_method exposes screen on/off state. Below is an explination of
+ the states.
+
+ Pre-L:
+ On: mScreenOn=true
+ Off: mScreenOn=false
+ L+:
+ On: mInteractive=true
+ Off: mInteractive=false
+
+ Returns:
+ True if screen is on, false if it is off.
+
+ Raises:
+ device_errors.CommandFailedError: If screen state cannot be found.
+ """
+ if self.build_version_sdk < version_codes.LOLLIPOP:
+ input_check = 'mScreenOn'
+ check_value = 'mScreenOn=true'
+ else:
+ input_check = 'mInteractive'
+ check_value = 'mInteractive=true'
+ dumpsys_out = self._RunPipedShellCommand(
+ 'dumpsys input_method | grep %s' % input_check)
+ if not dumpsys_out:
+ raise device_errors.CommandFailedError(
+ 'Unable to detect screen state', str(self))
+ return check_value in dumpsys_out[0]
+
+ @decorators.WithTimeoutAndRetriesFromInstance()
+ def SetScreen(self, on, timeout=None, retries=None):
+ """Turns screen on and off.
+
+ Args:
+ on: bool to decide state to switch to. True = on False = off.
+ """
+ def screen_test():
+ return self.IsScreenOn() == on
+
+ if screen_test():
+ logging.info('Screen already in expected state.')
+ return
+ self.RunShellCommand('input keyevent 26')
+ timeout_retry.WaitFor(screen_test, wait_period=1)
diff --git a/build/android/devil/android/device_utils_test.py b/build/android/devil/android/device_utils_test.py
index 99d3c83..09c527e 100755
--- a/build/android/devil/android/device_utils_test.py
+++ b/build/android/devil/android/device_utils_test.py
@@ -2098,13 +2098,13 @@ class DeviceUtilsGrantPermissionsTest(DeviceUtilsTest):
def testGrantPermissions_underM(self):
with self.patch_call(self.call.device.build_version_sdk,
- return_value=20):
+ return_value=version_codes.LOLLIPOP):
self.device.GrantPermissions('package', ['p1'])
def testGrantPermissions_one(self):
permissions_cmd = 'pm grant package p1'
with self.patch_call(self.call.device.build_version_sdk,
- return_value=23):
+ return_value=version_codes.MARSHMALLOW):
with self.assertCalls(
(self.call.device.RunShellCommand(permissions_cmd), [])):
self.device.GrantPermissions('package', ['p1'])
@@ -2112,7 +2112,7 @@ class DeviceUtilsGrantPermissionsTest(DeviceUtilsTest):
def testGrantPermissions_multiple(self):
permissions_cmd = 'pm grant package p1;pm grant package p2'
with self.patch_call(self.call.device.build_version_sdk,
- return_value=23):
+ return_value=version_codes.MARSHMALLOW):
with self.assertCalls(
(self.call.device.RunShellCommand(permissions_cmd), [])):
self.device.GrantPermissions('package', ['p1', 'p2'])
@@ -2122,19 +2122,103 @@ class DeviceUtilsGrantPermissionsTest(DeviceUtilsTest):
'pm grant package android.permission.WRITE_EXTERNAL_STORAGE;'
'pm grant package android.permission.READ_EXTERNAL_STORAGE')
with self.patch_call(self.call.device.build_version_sdk,
- return_value=23):
+ return_value=version_codes.MARSHMALLOW):
with self.assertCalls(
(self.call.device.RunShellCommand(permissions_cmd), [])):
self.device.GrantPermissions(
'package', ['android.permission.WRITE_EXTERNAL_STORAGE'])
def testGrantPermissions_BlackList(self):
- with self.patch_call(
- self.call.device.build_version_sdk, return_value=23):
+ with self.patch_call(self.call.device.build_version_sdk,
+ return_value=version_codes.MARSHMALLOW):
self.device.GrantPermissions(
'package', ['android.permission.ACCESS_MOCK_LOCATION'])
+class DeviecUtilsIsScreenOn(DeviceUtilsTest):
+
+ _L_SCREEN_ON = ['test=test mInteractive=true']
+ _K_SCREEN_ON = ['test=test mScreenOn=true']
+ _L_SCREEN_OFF = ['mInteractive=false']
+ _K_SCREEN_OFF = ['mScreenOn=false']
+
+ def testIsScreenOn_onPreL(self):
+ with self.patch_call(self.call.device.build_version_sdk,
+ return_value=version_codes.KITKAT):
+ with self.assertCalls(
+ (self.call.device._RunPipedShellCommand(
+ 'dumpsys input_method | grep mScreenOn'), self._K_SCREEN_ON)):
+ self.assertTrue(self.device.IsScreenOn())
+
+ def testIsScreenOn_onL(self):
+ with self.patch_call(self.call.device.build_version_sdk,
+ return_value=version_codes.LOLLIPOP):
+ with self.assertCalls(
+ (self.call.device._RunPipedShellCommand(
+ 'dumpsys input_method | grep mInteractive'), self._L_SCREEN_ON)):
+ self.assertTrue(self.device.IsScreenOn())
+
+ def testIsScreenOn_offPreL(self):
+ with self.patch_call(self.call.device.build_version_sdk,
+ return_value=version_codes.KITKAT):
+ with self.assertCalls(
+ (self.call.device._RunPipedShellCommand(
+ 'dumpsys input_method | grep mScreenOn'), self._K_SCREEN_OFF)):
+ self.assertFalse(self.device.IsScreenOn())
+
+ def testIsScreenOn_offL(self):
+ with self.patch_call(self.call.device.build_version_sdk,
+ return_value=version_codes.LOLLIPOP):
+ with self.assertCalls(
+ (self.call.device._RunPipedShellCommand(
+ 'dumpsys input_method | grep mInteractive'), self._L_SCREEN_OFF)):
+ self.assertFalse(self.device.IsScreenOn())
+
+ def testIsScreenOn_noOutput(self):
+ with self.patch_call(self.call.device.build_version_sdk,
+ return_value=version_codes.LOLLIPOP):
+ with self.assertCalls(
+ (self.call.device._RunPipedShellCommand(
+ 'dumpsys input_method | grep mInteractive'), [])):
+ with self.assertRaises(device_errors.CommandFailedError):
+ self.device.IsScreenOn()
+
+
+class DeviecUtilsSetScreen(DeviceUtilsTest):
+
+ @mock.patch('time.sleep', mock.Mock())
+ def testSetScren_alreadySet(self):
+ with self.assertCalls(
+ (self.call.device.IsScreenOn(), False)):
+ self.device.SetScreen(False)
+
+ @mock.patch('time.sleep', mock.Mock())
+ def testSetScreen_on(self):
+ with self.assertCalls(
+ (self.call.device.IsScreenOn(), False),
+ (self.call.device.RunShellCommand('input keyevent 26'), []),
+ (self.call.device.IsScreenOn(), True)):
+ self.device.SetScreen(True)
+
+
+ @mock.patch('time.sleep', mock.Mock())
+ def testSetScreen_off(self):
+ with self.assertCalls(
+ (self.call.device.IsScreenOn(), True),
+ (self.call.device.RunShellCommand('input keyevent 26'), []),
+ (self.call.device.IsScreenOn(), False)):
+ self.device.SetScreen(False)
+
+ @mock.patch('time.sleep', mock.Mock())
+ def testSetScreen_slow(self):
+ with self.assertCalls(
+ (self.call.device.IsScreenOn(), True),
+ (self.call.device.RunShellCommand('input keyevent 26'), []),
+ (self.call.device.IsScreenOn(), True),
+ (self.call.device.IsScreenOn(), True),
+ (self.call.device.IsScreenOn(), False)):
+ self.device.SetScreen(False)
+
if __name__ == '__main__':
logging.getLogger().setLevel(logging.DEBUG)
unittest.main(verbosity=2)
diff --git a/build/android/pylib/perf/test_runner.py b/build/android/pylib/perf/test_runner.py
index 6beb117..a580fd4 100644
--- a/build/android/pylib/perf/test_runner.py
+++ b/build/android/pylib/perf/test_runner.py
@@ -350,6 +350,7 @@ class TestRunner(base_test_runner.BaseTestRunner):
if self._options.min_battery_level:
self._device_battery.ChargeDeviceToLevel(
self._options.min_battery_level)
+ self.device.SetScreen(True)
logging.info('%s : %s', test_name, cmd)
start_time = time.time()