OLD | NEW |
1 # Copyright 2014 The Chromium Authors. All rights reserved. | 1 # Copyright 2014 The Chromium Authors. All rights reserved. |
2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
4 | 4 |
5 """Provides a variety of device interactions based on adb. | 5 """Provides a variety of device interactions based on adb. |
6 | 6 |
7 Eventually, this will be based on adb_wrapper. | 7 Eventually, this will be based on adb_wrapper. |
8 """ | 8 """ |
9 # pylint: disable=W0613 | 9 # pylint: disable=W0613 |
10 | 10 |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
85 self.old_interface = device | 85 self.old_interface = device |
86 elif not device: | 86 elif not device: |
87 self.adb = adb_wrapper.AdbWrapper('') | 87 self.adb = adb_wrapper.AdbWrapper('') |
88 self.old_interface = pylib.android_commands.AndroidCommands() | 88 self.old_interface = pylib.android_commands.AndroidCommands() |
89 else: | 89 else: |
90 raise ValueError('Unsupported type passed for argument "device"') | 90 raise ValueError('Unsupported type passed for argument "device"') |
91 self._commands_installed = None | 91 self._commands_installed = None |
92 self._default_timeout = default_timeout | 92 self._default_timeout = default_timeout |
93 self._default_retries = default_retries | 93 self._default_retries = default_retries |
94 self._cache = {} | 94 self._cache = {} |
95 assert(hasattr(self, decorators.DEFAULT_TIMEOUT_ATTR)) | 95 assert hasattr(self, decorators.DEFAULT_TIMEOUT_ATTR) |
96 assert(hasattr(self, decorators.DEFAULT_RETRIES_ATTR)) | 96 assert hasattr(self, decorators.DEFAULT_RETRIES_ATTR) |
97 | 97 |
98 @decorators.WithTimeoutAndRetriesFromInstance() | 98 @decorators.WithTimeoutAndRetriesFromInstance() |
99 def IsOnline(self, timeout=None, retries=None): | 99 def IsOnline(self, timeout=None, retries=None): |
100 """Checks whether the device is online. | 100 """Checks whether the device is online. |
101 | 101 |
102 Args: | 102 Args: |
103 timeout: timeout in seconds | 103 timeout: timeout in seconds |
104 retries: number of retries | 104 retries: number of retries |
105 | 105 |
106 Returns: | 106 Returns: |
(...skipping 587 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
694 try: | 694 try: |
695 real_device_path = self.RunShellCommand( | 695 real_device_path = self.RunShellCommand( |
696 ['realpath', device_path], single_line=True, check_return=True) | 696 ['realpath', device_path], single_line=True, check_return=True) |
697 except device_errors.CommandFailedError: | 697 except device_errors.CommandFailedError: |
698 real_device_path = None | 698 real_device_path = None |
699 if not real_device_path: | 699 if not real_device_path: |
700 return [(host_path, device_path)] | 700 return [(host_path, device_path)] |
701 | 701 |
702 # TODO(jbudorick): Move the md5 logic up into DeviceUtils or base | 702 # TODO(jbudorick): Move the md5 logic up into DeviceUtils or base |
703 # this function on mtime. | 703 # this function on mtime. |
704 # pylint: disable=W0212 | 704 # pylint: disable=protected-access |
705 host_hash_tuples, device_hash_tuples = self.old_interface._RunMd5Sum( | 705 host_hash_tuples, device_hash_tuples = self.old_interface._RunMd5Sum( |
706 real_host_path, real_device_path) | 706 real_host_path, real_device_path) |
707 # pylint: enable=W0212 | 707 # pylint: enable=protected-access |
708 | 708 |
709 if os.path.isfile(host_path): | 709 if os.path.isfile(host_path): |
710 if (not device_hash_tuples | 710 if (not device_hash_tuples |
711 or device_hash_tuples[0].hash != host_hash_tuples[0].hash): | 711 or device_hash_tuples[0].hash != host_hash_tuples[0].hash): |
712 return [(host_path, device_path)] | 712 return [(host_path, device_path)] |
713 else: | 713 else: |
714 return [] | 714 return [] |
715 else: | 715 else: |
716 device_tuple_dict = dict((d.path, d.hash) for d in device_hash_tuples) | 716 device_tuple_dict = dict((d.path, d.hash) for d in device_hash_tuples) |
717 to_push = [] | 717 to_push = [] |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
758 COMPRESSION_RATIO = 2.0 # unitless | 758 COMPRESSION_RATIO = 2.0 # unitless |
759 | 759 |
760 adb_call_time = ADB_CALL_PENALTY * adb_calls | 760 adb_call_time = ADB_CALL_PENALTY * adb_calls |
761 adb_push_setup_time = ADB_PUSH_PENALTY * file_count | 761 adb_push_setup_time = ADB_PUSH_PENALTY * file_count |
762 if is_zipping: | 762 if is_zipping: |
763 zip_time = ZIP_PENALTY + byte_count / ZIP_RATE | 763 zip_time = ZIP_PENALTY + byte_count / ZIP_RATE |
764 transfer_time = byte_count / (TRANSFER_RATE * COMPRESSION_RATIO) | 764 transfer_time = byte_count / (TRANSFER_RATE * COMPRESSION_RATIO) |
765 else: | 765 else: |
766 zip_time = 0 | 766 zip_time = 0 |
767 transfer_time = byte_count / TRANSFER_RATE | 767 transfer_time = byte_count / TRANSFER_RATE |
768 return (adb_call_time + adb_push_setup_time + zip_time + transfer_time) | 768 return adb_call_time + adb_push_setup_time + zip_time + transfer_time |
769 | 769 |
770 def _PushChangedFilesIndividually(self, files): | 770 def _PushChangedFilesIndividually(self, files): |
771 for h, d in files: | 771 for h, d in files: |
772 self.adb.Push(h, d) | 772 self.adb.Push(h, d) |
773 | 773 |
774 def _PushChangedFilesZipped(self, files): | 774 def _PushChangedFilesZipped(self, files): |
775 if not files: | 775 if not files: |
776 return | 776 return |
777 | 777 |
778 with tempfile.NamedTemporaryFile(suffix='.zip') as zip_file: | 778 with tempfile.NamedTemporaryFile(suffix='.zip') as zip_file: |
(...skipping 387 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1166 Returns: | 1166 Returns: |
1167 A Parallelizer operating over |devices|. | 1167 A Parallelizer operating over |devices|. |
1168 """ | 1168 """ |
1169 if not devices or len(devices) == 0: | 1169 if not devices or len(devices) == 0: |
1170 devices = pylib.android_commands.GetAttachedDevices() | 1170 devices = pylib.android_commands.GetAttachedDevices() |
1171 parallelizer_type = (parallelizer.Parallelizer if async | 1171 parallelizer_type = (parallelizer.Parallelizer if async |
1172 else parallelizer.SyncParallelizer) | 1172 else parallelizer.SyncParallelizer) |
1173 return parallelizer_type([ | 1173 return parallelizer_type([ |
1174 d if isinstance(d, DeviceUtils) else DeviceUtils(d) | 1174 d if isinstance(d, DeviceUtils) else DeviceUtils(d) |
1175 for d in devices]) | 1175 for d in devices]) |
OLD | NEW |