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

Side by Side Diff: tools/android/loading/device_setup.py

Issue 1684653003: sandwich: Adds web page replay support for HTTP (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Unmaps only forwarder side ports 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 unified diff | Download patch
« no previous file with comments | « no previous file | tools/android/loading/run_sandwich.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright 2016 The Chromium Authors. All rights reserved. 1 # Copyright 2016 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 import contextlib 5 import contextlib
6 import logging 6 import logging
7 import os 7 import os
8 import shutil 8 import shutil
9 import subprocess 9 import subprocess
10 import sys 10 import sys
11 import tempfile 11 import tempfile
12 import time 12 import time
13 13
14 _SRC_DIR = os.path.abspath(os.path.join( 14 _SRC_DIR = os.path.abspath(os.path.join(
15 os.path.dirname(__file__), '..', '..', '..')) 15 os.path.dirname(__file__), '..', '..', '..'))
16 16
17 sys.path.append(os.path.join(_SRC_DIR, 'third_party', 'catapult', 'devil')) 17 sys.path.append(os.path.join(_SRC_DIR, 'third_party', 'catapult', 'devil'))
18 from devil.android import device_utils 18 from devil.android import device_utils
19 from devil.android import forwarder
19 from devil.android.sdk import intent 20 from devil.android.sdk import intent
20 21
21 sys.path.append(os.path.join(_SRC_DIR, 'build', 'android')) 22 sys.path.append(os.path.join(_SRC_DIR, 'build', 'android'))
22 from pylib import constants 23 from pylib import constants
23 from pylib import flag_changer 24 from pylib import flag_changer
24 25
26 sys.path.append(os.path.join(_SRC_DIR, 'tools', 'perf'))
27 from chrome_telemetry_build import chromium_config
28
29 sys.path.append(chromium_config.GetTelemetryDir())
Benoit L 2016/02/10 14:29:43 You can avoid adding tools/perf to the import path
30 from telemetry.internal.util import webpagereplay
31
25 import devtools_monitor 32 import devtools_monitor
26 33
27 DEVTOOLS_PORT = 9222 34 DEVTOOLS_PORT = 9222
28 DEVTOOLS_HOSTNAME = 'localhost' 35 DEVTOOLS_HOSTNAME = 'localhost'
29 DEFAULT_CHROME_PACKAGE = 'chrome' 36 DEFAULT_CHROME_PACKAGE = 'chrome'
30 37
31 38
32 @contextlib.contextmanager 39 @contextlib.contextmanager
33 def TemporaryDirectory(): 40 def TemporaryDirectory():
34 """Returns a freshly-created directory that gets automatically deleted after 41 """Returns a freshly-created directory that gets automatically deleted after
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
97 device.adb.ForwardRemove(local) 104 device.adb.ForwardRemove(local)
98 105
99 106
100 def _SetUpDevice(device, package_info): 107 def _SetUpDevice(device, package_info):
101 """Enables root and closes Chrome on a device.""" 108 """Enables root and closes Chrome on a device."""
102 device.EnableRoot() 109 device.EnableRoot()
103 device.KillAll(package_info.package, quiet=True) 110 device.KillAll(package_info.package, quiet=True)
104 111
105 112
106 @contextlib.contextmanager 113 @contextlib.contextmanager
114 def WprHost(device, wpr_archive_path, record=False):
115 """Launches web page replay host.
116
117 Args:
118 device: Android device.
119 wpr_archive_path: host sided WPR archive's path.
120 record: Enables or disables WPR archive recording.
121
122 Returns:
123 Additional flags list that may be used for chromium to load web page through
124 the running web page replay host.
125 """
126 assert device
127 if wpr_archive_path == None:
128 yield []
129 return
130
131 wpr_server_args = ['--use_closest_match']
132 if record:
133 wpr_server_args.append('--record')
134 if os.path.exists(wpr_archive_path):
135 os.remove(wpr_archive_path)
136 else:
137 assert os.path.exists(wpr_archive_path)
138 wpr_server = webpagereplay.ReplayServer(wpr_archive_path,
139 '127.0.0.1', 0, 0, None, wpr_server_args)
140 ports = wpr_server.StartServer()[:-1]
141 host_http_port = ports[0]
142 host_https_port = ports[1]
143
144 forwarder.Forwarder.Map([(0, host_http_port), (0, host_https_port)], device)
145 device_http_port = forwarder.Forwarder.DevicePortForHostPort(host_http_port)
146 device_https_port = forwarder.Forwarder.DevicePortForHostPort(host_https_port)
147
148 try:
149 yield [
150 '--host-resolver-rules="MAP * 127.0.0.1,EXCLUDE localhost"',
151 '--testing-fixed-http-port={}'.format(device_http_port),
152 '--testing-fixed-https-port={}'.format(device_https_port)]
153 finally:
154 forwarder.Forwarder.UnmapDevicePort(device_http_port, device)
155 forwarder.Forwarder.UnmapDevicePort(device_https_port, device)
156 wpr_server.StopServer()
157
158 @contextlib.contextmanager
107 def DeviceConnection(device, 159 def DeviceConnection(device,
108 package=DEFAULT_CHROME_PACKAGE, 160 package=DEFAULT_CHROME_PACKAGE,
109 hostname=DEVTOOLS_HOSTNAME, 161 hostname=DEVTOOLS_HOSTNAME,
110 port=DEVTOOLS_PORT, 162 port=DEVTOOLS_PORT,
111 host_exe='out/Release/chrome', 163 host_exe='out/Release/chrome',
112 host_profile_dir=None): 164 host_profile_dir=None,
165 additional_flags=[]):
113 """Context for starting recording on a device. 166 """Context for starting recording on a device.
114 167
115 Sets up and restores any device and tracing appropriately 168 Sets up and restores any device and tracing appropriately
116 169
117 Args: 170 Args:
118 device: Android device, or None for a local run (in which case chrome needs 171 device: Android device, or None for a local run (in which case chrome needs
119 to have been started with --remote-debugging-port=XXX). 172 to have been started with --remote-debugging-port=XXX).
120 package: The key for chrome package info. 173 package: The key for chrome package info.
121 port: The port on which to enable remote debugging. 174 port: The port on which to enable remote debugging.
122 host_exe: The binary to execute when running on the host. 175 host_exe: The binary to execute when running on the host.
123 host_profile_dir: The profile dir to use when running on the host (if None, 176 host_profile_dir: The profile dir to use when running on the host (if None,
124 a fresh profile dir will be used). 177 a fresh profile dir will be used).
178 additional_flags: Additional chromium arguments.
125 179
126 Returns: 180 Returns:
127 A context manager type which evaluates to a DevToolsConnection. 181 A context manager type which evaluates to a DevToolsConnection.
128 """ 182 """
129 package_info = constants.PACKAGE_INFO[package] 183 package_info = constants.PACKAGE_INFO[package]
130 command_line_path = '/data/local/chrome-command-line' 184 command_line_path = '/data/local/chrome-command-line'
131 new_flags = ['--disable-fre', 185 new_flags = ['--disable-fre',
132 '--enable-test-events', 186 '--enable-test-events',
133 '--remote-debugging-port=%d' % port] 187 '--remote-debugging-port=%d' % port] + additional_flags
134 if device: 188 if device:
135 _SetUpDevice(device, package_info) 189 _SetUpDevice(device, package_info)
136 with FlagReplacer(device, command_line_path, new_flags): 190 with FlagReplacer(device, command_line_path, new_flags):
137 host_process = None 191 host_process = None
138 if device: 192 if device:
139 start_intent = intent.Intent( 193 start_intent = intent.Intent(
140 package=package_info.package, activity=package_info.activity, 194 package=package_info.package, activity=package_info.activity,
141 data='about:blank') 195 data='about:blank')
142 device.StartActivity(start_intent, blocking=True) 196 device.StartActivity(start_intent, blocking=True)
143 else: 197 else:
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
175 package: the key for chrome package info. 229 package: the key for chrome package info.
176 fn: the function to execute that launches chrome and performs the 230 fn: the function to execute that launches chrome and performs the
177 appropriate instrumentation. The function will receive a 231 appropriate instrumentation. The function will receive a
178 DevToolsConnection as its sole parameter. 232 DevToolsConnection as its sole parameter.
179 233
180 Returns: 234 Returns:
181 As fn() returns. 235 As fn() returns.
182 """ 236 """
183 with DeviceConnection(device, package) as connection: 237 with DeviceConnection(device, package) as connection:
184 return fn(connection) 238 return fn(connection)
OLDNEW
« no previous file with comments | « no previous file | tools/android/loading/run_sandwich.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698