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

Side by Side Diff: adb/contrib/high.py

Issue 3000103002: python-adb: Optionally skip sd_card checking when booting up. (Closed)
Patch Set: Created 3 years, 4 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 unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # coding=utf-8 1 # coding=utf-8
2 # Copyright 2015 Google Inc. All rights reserved. 2 # Copyright 2015 Google Inc. All rights reserved.
3 # 3 #
4 # Licensed under the Apache License, Version 2.0 (the "License"); 4 # Licensed under the Apache License, Version 2.0 (the "License");
5 # you may not use this file except in compliance with the License. 5 # you may not use this file except in compliance with the License.
6 # You may obtain a copy of the License at 6 # You may obtain a copy of the License at
7 # 7 #
8 # http://www.apache.org/licenses/LICENSE-2.0 8 # http://www.apache.org/licenses/LICENSE-2.0
9 # 9 #
10 # Unless required by applicable law or agreed to in writing, software 10 # Unless required by applicable law or agreed to in writing, software
(...skipping 813 matching lines...) Expand 10 before | Expand all | Expand 10 after
824 if not exit_code: 824 if not exit_code:
825 return True 825 return True
826 _LOG.info('%s: %s', cmd, out) 826 _LOG.info('%s: %s', cmd, out)
827 return False 827 return False
828 828
829 def GetApplicationPath(self, package): 829 def GetApplicationPath(self, package):
830 # TODO(maruel): Test. 830 # TODO(maruel): Test.
831 out, _ = self.Shell('pm path %s' % pipes.quote(package)) 831 out, _ = self.Shell('pm path %s' % pipes.quote(package))
832 return out.strip().split(':', 1)[1] if out else out 832 return out.strip().split(':', 1)[1] if out else out
833 833
834 def IsFullyBooted(self): 834 def IsFullyBooted(self, skip_sd_card=False):
835 """Checks whether the device is fully booted. 835 """Checks whether the device is fully booted.
836 836
837 Args:
838 - skip_sd_card: Skips checking if the external storage is ready if True.
839 Some devices lack an internal sd card and permanently
840 fail this check.
837 Returns: 841 Returns:
838 tuple(booted, status) 842 tuple(booted, status)
839 - booted: True if device is fully booted, false otherwise. 843 - booted: True if device is fully booted, false otherwise.
840 - status: If not booted, string describing why. 844 - status: If not booted, string describing why.
841 """ 845 """
842 if not self.cache.external_storage_path: 846 if not skip_sd_card:
843 return False, 'external storage not ready' 847 if not self.cache.external_storage_path:
844 if self.Stat(self.cache.external_storage_path)[0] is None: 848 return False, 'external storage not ready'
845 return False, 'external storage not ready' 849 if self.Stat(self.cache.external_storage_path)[0] is None:
850 return False, 'external storage not ready'
846 851
847 # Check if the boot animation has stopped. 852 # Check if the boot animation has stopped.
848 prop = self.GetProp('init.svc.bootanim') 853 prop = self.GetProp('init.svc.bootanim')
849 if prop is None: 854 if prop is None:
850 return False, 'could not get init.svc.bootanim property' 855 return False, 'could not get init.svc.bootanim property'
851 elif prop != 'stopped': 856 elif prop != 'stopped':
852 return False, 'boot animation still running' 857 return False, 'boot animation still running'
853 858
854 # pm can be very slow at times. Use a longer timeout to prevent 859 # pm can be very slow at times. Use a longer timeout to prevent
855 # confusing a long-running command with an interrupted connection. 860 # confusing a long-running command with an interrupted connection.
856 out, exit_code = self.Shell('pm path', timeout_ms=30000) 861 out, exit_code = self.Shell('pm path', timeout_ms=30000)
857 if out != 'Error: no package specified\n': 862 if out != 'Error: no package specified\n':
858 # Accepts an empty string too, which has been observed only on Android 4.4 863 # Accepts an empty string too, which has been observed only on Android 4.4
859 # (Kitkat) but not on later versions. 864 # (Kitkat) but not on later versions.
860 if out not in ( 865 if out not in (
861 'Error: Could not access the Package Manager. Is the system ' 866 'Error: Could not access the Package Manager. Is the system '
862 'running?\n', 867 'running?\n',
863 ''): 868 ''):
864 logging.warning( 869 logging.warning(
865 'Unexpected reply from pm path (%d): %r', exit_code, out) 870 'Unexpected reply from pm path (%d): %r', exit_code, out)
866 return False, 'pm not ready' 871 return False, 'pm not ready'
867 872
868 # All checks passed. 873 # All checks passed.
869 return True, None 874 return True, None
870 875
871 def WaitUntilFullyBooted(self, timeout=300): 876 def WaitUntilFullyBooted(self, timeout=300, **kwargs):
872 """Waits for the device to be fully started up with network connectivity. 877 """Waits for the device to be fully started up with network connectivity.
873 878
874 Arguments: 879 Arguments:
875 - timeout: minimum amount of time to wait for for the device to come up 880 - timeout: minimum amount of time to wait for for the device to come up
876 online. It may extend to up to lock_timeout_ms more. 881 online. It may extend to up to lock_timeout_ms more.
877 """ 882 """
878 start = time.time() 883 start = time.time()
879 while True: 884 while True:
880 is_booted, status = self.IsFullyBooted() 885 is_booted, status = self.IsFullyBooted(**kwargs)
881 if is_booted: 886 if is_booted:
882 return True 887 return True
883 if (time.time() - start) > timeout: 888 if (time.time() - start) > timeout:
884 _LOG.warning( 889 _LOG.warning(
885 '%s.WaitUntilFullyBooted() timed out due to %s', 890 '%s.WaitUntilFullyBooted() timed out due to %s',
886 self.port_path, status) 891 self.port_path, status)
887 return False 892 return False
888 time.sleep(1) 893 time.sleep(1)
889 894
890 def PushKeys(self): 895 def PushKeys(self):
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
981 return out 986 return out
982 987
983 @classmethod 988 @classmethod
984 def _Connect(cls, constructor, **kwargs): 989 def _Connect(cls, constructor, **kwargs):
985 """Called by either ConnectDevice or Connect.""" 990 """Called by either ConnectDevice or Connect."""
986 if not kwargs.get('rsa_keys'): 991 if not kwargs.get('rsa_keys'):
987 with _ADB_KEYS_LOCK: 992 with _ADB_KEYS_LOCK:
988 kwargs['rsa_keys'] = _ADB_KEYS[:] 993 kwargs['rsa_keys'] = _ADB_KEYS[:]
989 device = constructor(**kwargs) 994 device = constructor(**kwargs)
990 return HighDevice(device, _InitCache(device)) 995 return HighDevice(device, _InitCache(device))
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698