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

Unified Diff: webrtc/examples/androidtests/video_quality_loopback_test.py

Issue 2825313002: Espresso test for loopback video quality testing (Closed)
Patch Set: Rework colliderUrl as urlParameters 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 | « webrtc/examples/androidtests/src/org/appspot/apprtc/test/ConnectActivityStubbedInputOutputTest.java ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/examples/androidtests/video_quality_loopback_test.py
diff --git a/webrtc/examples/androidtests/video_quality_loopback_test.py b/webrtc/examples/androidtests/video_quality_loopback_test.py
index 7c7ef313f9259de111cdbce488030c272d411d91..a62d31c8b893ef8357e987792515038ee2a3dece 100755
--- a/webrtc/examples/androidtests/video_quality_loopback_test.py
+++ b/webrtc/examples/androidtests/video_quality_loopback_test.py
@@ -19,17 +19,34 @@ It assumes you have a Android device plugged in.
"""
import argparse
+import atexit
import logging
import os
import shutil
import subprocess
import sys
import tempfile
+import time
SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
SRC_DIR = os.path.normpath(os.path.join(SCRIPT_DIR, os.pardir, os.pardir,
os.pardir))
+WEBRTC_DEPS_INSTRUCTIONS = """Please add a solution to your .gclient file like
+this and run gclient sync:
+{
+ "name": "webrtc.DEPS",
+ "url": "https://chromium.googlesource.com/chromium/deps/webrtc/webrtc.DEPS",
+},
+"""
+
+
+class Error(Exception):
+ pass
+
+
+class VideoQualityTestError(Error):
+ pass
def _RunCommand(argv, cwd=SRC_DIR, **kwargs):
@@ -37,6 +54,22 @@ def _RunCommand(argv, cwd=SRC_DIR, **kwargs):
subprocess.check_call(argv, cwd=cwd, **kwargs)
+def _RunCommandWithOutput(argv, cwd=SRC_DIR, **kwargs):
+ logging.info('Running %r', argv)
+ return subprocess.check_output(argv, cwd=cwd, **kwargs)
+
+
+def _RunBackgroundCommand(argv, cwd=SRC_DIR):
+ logging.info('Running %r', argv)
+ process = subprocess.Popen(argv, cwd=cwd)
+ atexit.register(process.terminate)
+ time.sleep(0.5)
+ status = process.poll()
+ if status: # is not None or 0
+ raise subprocess.CalledProcessError(status, argv)
+ return process
+
+
def _ParseArgs():
parser = argparse.ArgumentParser(description='Start loopback video analysis.')
parser.add_argument('build_dir_android',
@@ -45,6 +78,7 @@ def _ParseArgs():
help='The path to the build directory for building locally.')
parser.add_argument('--temp_dir',
help='A temporary directory to put the output.')
+ parser.add_argument('--adb-path', help='Path to adb binary.', default='adb')
args = parser.parse_args()
return args
@@ -58,6 +92,7 @@ def main():
build_dir_android = args.build_dir_android
build_dir_x86 = args.build_dir_x86
temp_dir = args.temp_dir
+ adb_path = args.adb_path
if not temp_dir:
temp_dir = tempfile.mkdtemp()
else:
@@ -76,14 +111,49 @@ def main():
download_script = os.path.join(tools_dir, 'download_tools.py')
_RunCommand([sys.executable, download_script, toolchain_dir])
+ # Select an Android device in case multiple are connected
+ for line in _RunCommandWithOutput([adb_path, 'devices']).splitlines():
+ if line.endswith('\tdevice'):
+ android_device = line.split('\t')[0]
+ break
+ else:
+ raise VideoQualityTestError('Cannot find any connected Android device.')
+
+ # Start AppRTC Server
+ dev_appserver = os.path.join(SRC_DIR, 'out', 'apprtc', 'google_appengine',
+ 'dev_appserver.py')
+ if not os.path.isfile(dev_appserver):
+ raise VideoQualityTestError('Cannot find %s.\n%s' %
+ (dev_appserver, WEBRTC_DEPS_INSTRUCTIONS))
+ appengine_dir = os.path.join(SRC_DIR, 'out', 'apprtc', 'out', 'app_engine')
+ _RunBackgroundCommand(['python', dev_appserver, appengine_dir,
+ '--port=9999', '--admin_port=9998',
+ '--skip_sdk_update_check', '--clear_datastore=yes'])
+
+ # Start Collider
+ collider_path = os.path.join(SRC_DIR, 'out', 'go-workspace', 'bin',
+ 'collidermain')
+ if not os.path.isfile(collider_path):
+ raise VideoQualityTestError('Cannot find %s.\n%s' %
+ (collider_path, WEBRTC_DEPS_INSTRUCTIONS))
+ _RunBackgroundCommand([collider_path, '-tls=false',
+ '-port=8089', '-room-server=http://localhost:9999'])
+
+ # Start adb reverse forwarder
+ reverseforwarder_path = os.path.join(
+ SRC_DIR, 'build', 'android', 'adb_reverse_forwarder.py')
+ _RunBackgroundCommand([reverseforwarder_path, '--device', android_device,
+ '9999', '9999', '8089', '8089'])
+
# Run the Espresso code.
test_script = os.path.join(build_dir_android,
'bin', 'run_AppRTCMobileTestStubbedVideoIO')
- _RunCommand([sys.executable, test_script])
+ _RunCommand([test_script, '--device', android_device])
# Pull the output video.
test_video = os.path.join(temp_dir, 'test_video.y4m')
- _RunCommand(['adb', 'pull', '/sdcard/output.y4m', test_video])
+ _RunCommand([adb_path, '-s', android_device,
+ 'pull', '/sdcard/output.y4m', test_video])
test_video_yuv = os.path.join(temp_dir, 'test_video.yuv')
@@ -103,8 +173,7 @@ def main():
ConvertVideo(reference_video, reference_video_yuv)
# Run compare script.
- compare_script = os.path.join(SRC_DIR, 'webrtc', 'tools',
- 'compare_videos.py')
+ compare_script = os.path.join(SRC_DIR, 'webrtc', 'tools', 'compare_videos.py')
zxing_path = os.path.join(toolchain_dir, 'linux', 'zxing')
# The frame_analyzer binary should be built for local computer and not for
« no previous file with comments | « webrtc/examples/androidtests/src/org/appspot/apprtc/test/ConnectActivityStubbedInputOutputTest.java ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698