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

Unified Diff: webrtc/audio/test/low_bandwidth_audio_test.py

Issue 2783343003: Support multiple connected Android devices in low bandwidth audio test (Closed)
Patch Set: Rebase Created 3 years, 8 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « PRESUBMIT.py ('k') | webrtc/audio/test/unittests/low_bandwidth_audio_test_test.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/audio/test/low_bandwidth_audio_test.py
diff --git a/webrtc/audio/test/low_bandwidth_audio_test.py b/webrtc/audio/test/low_bandwidth_audio_test.py
index 58243b1c9804402849ceb89738943178e4b9a9be..8f4068199be7342e521eeb2e27f5bbe1b4083610 100755
--- a/webrtc/audio/test/low_bandwidth_audio_test.py
+++ b/webrtc/audio/test/low_bandwidth_audio_test.py
@@ -68,16 +68,42 @@ def _DownloadTools():
return pesq_path
-def _GetFile(file_path, out_dir, android=False, adb_path=None):
+def ExtractTestRuns(lines, echo=False):
+ """Extracts information about tests from the output of a test runner.
+
+ Produces tuples (android_device, test_name, reference_file, degraded_file).
+ """
+ for line in lines:
+ if echo:
+ sys.stdout.write(line)
+
+ # Output from Android has a prefix with the device name.
+ android_prefix_re = r'(?:I\b.+\brun_tests_on_device\((.+?)\)\s*)?'
+ test_re = r'^' + android_prefix_re + r'TEST (\w+) ([^ ]+?) ([^ ]+?)\s*$'
+
+ match = re.search(test_re, line)
+ if match:
+ yield match.groups()
+
+
+def _GetFile(file_path, out_dir, move=False,
+ android=False, adb_prefix=('adb',)):
out_file_name = os.path.basename(file_path)
out_file_path = os.path.join(out_dir, out_file_name)
if android:
- # Pull the file from the connected Android device
- adb_command = [adb_path, 'pull', file_path, out_dir]
+ # Pull the file from the connected Android device.
+ adb_command = adb_prefix + ('pull', file_path, out_dir)
subprocess.check_call(_LogCommand(adb_command))
+ if move:
+ # Remove that file.
+ adb_command = adb_prefix + ('shell', 'rm', file_path)
+ subprocess.check_call(_LogCommand(adb_command))
elif os.path.abspath(file_path) != os.path.abspath(out_file_path):
- shutil.copy(file_path, out_file_path)
+ if move:
+ shutil.move(file_path, out_file_path)
+ else:
+ shutil.copy(file_path, out_file_path)
return out_file_path
@@ -101,46 +127,47 @@ def main():
test_process = subprocess.Popen(_LogCommand(test_command),
stdout=subprocess.PIPE)
- for line in iter(test_process.stdout.readline, ''):
- # Echo the output to screen.
- sys.stdout.write(line)
-
- # Extract specific lines that contain information about produced files.
- # Output from Android has a prefix, need to skip it.
- match = re.search(r'^(?:I\b.+\b)?TEST (\w+) ([^ ]+?) ([^ ]+?)\s*$', line)
- if not match:
- continue
- test_name = match.group(1)
- reference_file = _GetFile(match.group(2), out_dir,
- args.android, args.adb_path)
- degraded_file = _GetFile(match.group(3), out_dir,
- args.android, args.adb_path)
-
- # Analyze audio.
- pesq_command = [pesq_path, '+16000',
- os.path.basename(reference_file),
- os.path.basename(degraded_file)]
- # Need to provide paths in the current directory due to a bug in PESQ:
- # On Mac, for some 'path/to/file.wav', if 'file.wav' is longer than
- # 'path/to', PESQ crashes.
- pesq_output = subprocess.check_output(_LogCommand(pesq_command),
- cwd=out_dir)
-
- # Find the scores in stdout of pesq.
- match = re.search(
- r'Prediction \(Raw MOS, MOS-LQO\):\s+=\s+([\d.]+)\s+([\d.]+)',
- pesq_output)
- if match:
- raw_mos, _ = match.groups()
-
- # Output a result for the perf dashboard.
- print 'RESULT pesq_mos: %s= %s score' % (test_name, raw_mos)
- else:
- logging.error('PESQ: %s', pesq_output.splitlines()[-1])
-
- if args.remove:
- os.remove(reference_file)
- os.remove(degraded_file)
+ try:
+ lines = iter(test_process.stdout.readline, '')
+ for result in ExtractTestRuns(lines, echo=True):
+ (android_device, test_name, reference_file, degraded_file) = result
+
+ adb_prefix = (args.adb_path,)
+ if android_device:
+ adb_prefix += ('-s', android_device)
+
+ reference_file = _GetFile(reference_file, out_dir,
+ android=args.android, adb_prefix=adb_prefix)
+ degraded_file = _GetFile(degraded_file, out_dir, move=True,
+ android=args.android, adb_prefix=adb_prefix)
+
+ # Analyze audio.
+ pesq_command = [pesq_path, '+16000',
+ os.path.basename(reference_file),
+ os.path.basename(degraded_file)]
+ # Need to provide paths in the current directory due to a bug in PESQ:
+ # On Mac, for some 'path/to/file.wav', if 'file.wav' is longer than
+ # 'path/to', PESQ crashes.
+ pesq_output = subprocess.check_output(_LogCommand(pesq_command),
+ cwd=out_dir)
+
+ # Find the scores in stdout of pesq.
+ match = re.search(
+ r'Prediction \(Raw MOS, MOS-LQO\):\s+=\s+([\d.]+)\s+([\d.]+)',
+ pesq_output)
+ if match:
+ raw_mos, _ = match.groups()
+
+ # Output a result for the perf dashboard.
+ print 'RESULT pesq_mos: %s= %s score' % (test_name, raw_mos)
+ else:
+ logging.error('PESQ: %s', pesq_output.splitlines()[-1])
+
+ if args.remove:
+ os.remove(reference_file)
+ os.remove(degraded_file)
+ finally:
+ test_process.terminate()
return test_process.wait()
« no previous file with comments | « PRESUBMIT.py ('k') | webrtc/audio/test/unittests/low_bandwidth_audio_test_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698