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

Unified Diff: tools/android/loading/run_sandwich.py

Issue 1707363002: sandwich: Implements network condition on WPR server and browser. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@i00
Patch Set: Rebase Created 4 years, 10 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
Index: tools/android/loading/run_sandwich.py
diff --git a/tools/android/loading/run_sandwich.py b/tools/android/loading/run_sandwich.py
index def42141111b767523f6efa62183ff072414fc91..0572d5b2e9bb91ea349f787ba283a1bdb54cd1e3 100755
--- a/tools/android/loading/run_sandwich.py
+++ b/tools/android/loading/run_sandwich.py
@@ -33,6 +33,7 @@ sys.path.append(os.path.join(_SRC_DIR, 'build', 'android'))
from pylib import constants
import devil_chromium
+import chrome_setup
import device_setup
import devtools_monitor
import options
@@ -65,6 +66,10 @@ _TIME_TO_DEVICE_IDLE_SECONDS = 2
def _RemoteCacheDirectory():
return '/data/data/{}/cache/Cache'.format(OPTIONS.chrome_package_name)
+# Devtools timeout of 1 minute to avoid websocket timeout on slow
+# network condition.
+_DEVTOOLS_TIMEOUT = 60
+
def _ReadUrlsFromJobDescription(job_name):
"""Retrieves the list of URLs associated with the job name."""
@@ -258,14 +263,9 @@ def _CleanPreviousTraces(output_directories_path):
shutil.rmtree(directory_path)
-def main():
- logging.basicConfig(level=logging.INFO)
- devil_chromium.Initialize()
-
- # Don't give the argument yet. All we are interested in for now is accessing
- # the default values of OPTIONS.
- OPTIONS.ParseArgs([])
-
+def _ArgumentParser():
+ """Build a command line argument's parser.
+ """
parser = argparse.ArgumentParser()
parser.add_argument('--job', required=True,
help='JSON file with job description.')
@@ -287,7 +287,25 @@ def main():
help='Disable WPR default script injection such as ' +
'overriding javascript\'s Math.random() and Date() ' +
'with deterministic implementations.')
- args = parser.parse_args()
+ parser.add_argument('--network-condition', default=None,
+ choices=sorted(chrome_setup.NETWORK_CONDITIONS.keys()),
+ help='Set a network profile.')
+ parser.add_argument('--network-emulator', default='browser',
+ choices=['browser', 'wpr'],
+ help='Set which component is emulating the network condition.' +
+ ' (Default to browser)')
+ return parser
+
+
+def main():
+ logging.basicConfig(level=logging.INFO)
+ devil_chromium.Initialize()
+
+ # Don't give the argument yet. All we are interested in for now is accessing
+ # the default values of OPTIONS.
+ OPTIONS.ParseArgs([])
+
+ args = _ArgumentParser().parse_args()
if not os.path.isdir(args.output):
try:
@@ -307,22 +325,41 @@ def main():
device = device_utils.DeviceUtils.HealthyDevices()[0]
local_cache_archive_path = os.path.join(args.output, 'cache.zip')
local_cache_directory_path = None
+ wpr_network_condition_name = None
+ browser_network_condition_name = None
+ if args.network_emulator == 'wpr':
+ wpr_network_condition_name = args.network_condition
+ elif args.network_emulator == 'browser':
+ browser_network_condition_name = args.network_condition
+ else:
+ assert False
if args.cache_op == 'push':
assert os.path.isfile(local_cache_archive_path)
local_cache_directory_path = tempfile.mkdtemp(suffix='.cache')
_UnzipDirectoryContent(local_cache_archive_path, local_cache_directory_path)
- with device_setup.WprHost(device, args.wpr_archive, args.wpr_record,
- args.disable_wpr_script_injection) as additional_flags:
+ with device_setup.WprHost(device, args.wpr_archive,
+ record=args.wpr_record,
+ network_condition_name=wpr_network_condition_name,
+ disable_script_injection=args.disable_wpr_script_injection
+ ) as additional_flags:
def _RunNavigation(url, clear_cache, trace_id):
with device_setup.DeviceConnection(
device=device,
additional_flags=additional_flags) as connection:
+ additional_metadata = {}
+ if browser_network_condition_name:
+ additional_metadata = chrome_setup.SetUpEmulationAndReturnMetadata(
+ connection=connection,
+ emulated_device_name=None,
+ emulated_network_name=browser_network_condition_name)
loading_trace = trace_recorder.MonitorUrl(
connection, url,
clear_cache=clear_cache,
- categories=pull_sandwich_metrics.CATEGORIES)
+ categories=pull_sandwich_metrics.CATEGORIES,
+ timeout=_DEVTOOLS_TIMEOUT)
+ loading_trace.metadata.update(additional_metadata)
if trace_id != None:
loading_trace_path = os.path.join(
args.output, str(trace_id), 'trace.json')

Powered by Google App Engine
This is Rietveld 408576698