| OLD | NEW |
| 1 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 # Copyright (c) 2012 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 an interface to communicate with the device via the adb command. | 5 """Provides an interface to communicate with the device via the adb command. |
| 6 | 6 |
| 7 Assumes adb binary is currently on system path. | 7 Assumes adb binary is currently on system path. |
| 8 """ | 8 """ |
| 9 | 9 |
| 10 import collections | 10 import collections |
| (...skipping 760 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 771 assert build_type | 771 assert build_type |
| 772 return build_type | 772 return build_type |
| 773 | 773 |
| 774 def StartMonitoringLogcat(self, clear=True, timeout=10, logfile=None, | 774 def StartMonitoringLogcat(self, clear=True, timeout=10, logfile=None, |
| 775 filters=None): | 775 filters=None): |
| 776 """Starts monitoring the output of logcat, for use with WaitForLogMatch. | 776 """Starts monitoring the output of logcat, for use with WaitForLogMatch. |
| 777 | 777 |
| 778 Args: | 778 Args: |
| 779 clear: If True the existing logcat output will be cleared, to avoiding | 779 clear: If True the existing logcat output will be cleared, to avoiding |
| 780 matching historical output lurking in the log. | 780 matching historical output lurking in the log. |
| 781 timeout: How long WaitForLogMatch will wait for the given match | 781 timeout: Deprecated, will be removed soon. |
| 782 filters: A list of logcat filters to be used. | 782 filters: A list of logcat filters to be used. |
| 783 """ | 783 """ |
| 784 if clear: | 784 if clear: |
| 785 self.RunShellCommand('logcat -c') | 785 self.RunShellCommand('logcat -c') |
| 786 args = [] | 786 args = [] |
| 787 if self._adb._target_arg: | 787 if self._adb._target_arg: |
| 788 args += shlex.split(self._adb._target_arg) | 788 args += shlex.split(self._adb._target_arg) |
| 789 args += ['logcat', '-v', 'threadtime'] | 789 args += ['logcat', '-v', 'threadtime'] |
| 790 if filters: | 790 if filters: |
| 791 args.extend(filters) | 791 args.extend(filters) |
| (...skipping 24 matching lines...) Expand all Loading... |
| 816 | 816 |
| 817 def WaitForLogMatch(self, success_re, error_re, clear=False, timeout=10): | 817 def WaitForLogMatch(self, success_re, error_re, clear=False, timeout=10): |
| 818 """Blocks until a matching line is logged or a timeout occurs. | 818 """Blocks until a matching line is logged or a timeout occurs. |
| 819 | 819 |
| 820 Args: | 820 Args: |
| 821 success_re: A compiled re to search each line for. | 821 success_re: A compiled re to search each line for. |
| 822 error_re: A compiled re which, if found, terminates the search for | 822 error_re: A compiled re which, if found, terminates the search for |
| 823 |success_re|. If None is given, no error condition will be detected. | 823 |success_re|. If None is given, no error condition will be detected. |
| 824 clear: If True the existing logcat output will be cleared, defaults to | 824 clear: If True the existing logcat output will be cleared, defaults to |
| 825 false. | 825 false. |
| 826 timeout: Timeout in seconds to wait for a log match. |
| 826 | 827 |
| 827 Raises: | 828 Raises: |
| 828 pexpect.TIMEOUT upon the timeout specified by StartMonitoringLogcat(). | 829 pexpect.TIMEOUT after |timeout| seconds without a match for |success_re| |
| 830 or |error_re|. |
| 829 | 831 |
| 830 Returns: | 832 Returns: |
| 831 The re match object if |success_re| is matched first or None if |error_re| | 833 The re match object if |success_re| is matched first or None if |error_re| |
| 832 is matched first. | 834 is matched first. |
| 833 """ | 835 """ |
| 834 logging.info('<<< Waiting for logcat:' + str(success_re.pattern)) | 836 logging.info('<<< Waiting for logcat:' + str(success_re.pattern)) |
| 835 t0 = time.time() | 837 t0 = time.time() |
| 836 while True: | 838 while True: |
| 837 if not self._logcat: | 839 if not self._logcat: |
| 838 self.StartMonitoringLogcat(clear, timeout=timeout) | 840 self.StartMonitoringLogcat(clear, timeout=timeout) |
| 839 try: | 841 try: |
| 840 while True: | 842 while True: |
| 841 # Note this will block for upto the timeout _per log line_, so we need | 843 # Note this will block for upto the timeout _per log line_, so we need |
| 842 # to calculate the overall timeout remaining since t0. | 844 # to calculate the overall timeout remaining since t0. |
| 843 time_remaining = t0 + self._logcat.timeout - time.time() | 845 time_remaining = t0 + timeout - time.time() |
| 844 if time_remaining < 0: raise pexpect.TIMEOUT(self._logcat) | 846 if time_remaining < 0: raise pexpect.TIMEOUT(self._logcat) |
| 845 self._logcat.expect(PEXPECT_LINE_RE, timeout=time_remaining) | 847 self._logcat.expect(PEXPECT_LINE_RE, timeout=time_remaining) |
| 846 line = self._logcat.match.group(1) | 848 line = self._logcat.match.group(1) |
| 847 if error_re: | 849 if error_re: |
| 848 error_match = error_re.search(line) | 850 error_match = error_re.search(line) |
| 849 if error_match: | 851 if error_match: |
| 850 return None | 852 return None |
| 851 success_match = success_re.search(line) | 853 success_match = success_re.search(line) |
| 852 if success_match: | 854 if success_match: |
| 853 return success_match | 855 return success_match |
| (...skipping 292 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1146 """ | 1148 """ |
| 1147 def __init__(self, output): | 1149 def __init__(self, output): |
| 1148 self._output = output | 1150 self._output = output |
| 1149 | 1151 |
| 1150 def write(self, data): | 1152 def write(self, data): |
| 1151 data = data.replace('\r\r\n', '\n') | 1153 data = data.replace('\r\r\n', '\n') |
| 1152 self._output.write(data) | 1154 self._output.write(data) |
| 1153 | 1155 |
| 1154 def flush(self): | 1156 def flush(self): |
| 1155 self._output.flush() | 1157 self._output.flush() |
| OLD | NEW |