Chromium Code Reviews| Index: tools/android/loading/run_sandwich.py |
| diff --git a/tools/android/loading/run_sandwich.py b/tools/android/loading/run_sandwich.py |
| index ef7fca8b2391036f73a2abc4c11b678ab8c38582..783692e46cb71872ebc0b5e33348c766e53ef458 100755 |
| --- a/tools/android/loading/run_sandwich.py |
| +++ b/tools/android/loading/run_sandwich.py |
| @@ -35,12 +35,16 @@ import devil_chromium |
| import device_setup |
| import devtools_monitor |
| -import json |
| +import options |
| import page_track |
| import pull_sandwich_metrics |
| +import trace_recorder |
| import tracing |
| +# Use options layer to access contants. |
|
Benoit L
2016/02/22 10:26:13
nit: s/contants/constants/
gabadie
2016/02/22 11:05:06
Done.
|
| +OPTIONS = options.OPTIONS |
| + |
| _JOB_SEARCH_PATH = 'sandwich_jobs' |
| # Directory name under --output to save the cache from the device. |
| @@ -53,16 +57,13 @@ _INDEX_DIRECTORY_NAME = 'index-dir' |
| # in the cache directory under _INDEX_DIRECTORY_NAME. |
| _REAL_INDEX_FILE_NAME = 'the-real-index' |
| -# Name of the chrome package. |
| -_CHROME_PACKAGE = ( |
| - constants.PACKAGE_INFO[device_setup.DEFAULT_CHROME_PACKAGE].package) |
| - |
| # An estimate of time to wait for the device to become idle after expensive |
| # operations, such as opening the launcher activity. |
| _TIME_TO_DEVICE_IDLE_SECONDS = 2 |
| -# Cache directory's path on the device. |
| -_REMOTE_CACHE_DIRECTORY = '/data/data/' + _CHROME_PACKAGE + '/cache/Cache' |
| + |
| +def _RemoteCacheDirectory(): |
| + return '/data/data/{}/cache/Cache'.format(OPTIONS.chrome_package_name) |
| def _ReadUrlsFromJobDescription(job_name): |
| @@ -86,23 +87,6 @@ def _ReadUrlsFromJobDescription(job_name): |
| raise Exception('Job description does not define a list named "urls"') |
| -def _SaveChromeTrace(events, target_directory): |
| - """Saves the trace events, ignores IO errors. |
| - |
| - Args: |
| - events: a dict as returned by TracingTrack.ToJsonDict() |
| - target_directory: Directory path where trace is created. |
| - """ |
| - filename = os.path.join(target_directory, 'trace.json') |
| - try: |
| - os.makedirs(target_directory) |
| - with open(filename, 'w') as f: |
| - json.dump({'traceEvents': events['events'], 'metadata': {}}, f, indent=2) |
| - except IOError: |
| - logging.warning('Could not save a trace: %s' % filename) |
| - # Swallow the exception. |
| - |
| - |
| def _UpdateTimestampFromAdbStat(filename, stat): |
| os.utime(filename, (stat.st_time, stat.st_time)) |
| @@ -128,13 +112,13 @@ def _PullBrowserCache(device): |
| Temporary directory containing all the browser cache. |
| """ |
| save_target = tempfile.mkdtemp(suffix='.cache') |
| - for filename, stat in device.adb.Ls(_REMOTE_CACHE_DIRECTORY): |
| + for filename, stat in device.adb.Ls(_RemoteCacheDirectory()): |
| if filename == '..': |
| continue |
| if filename == '.': |
| cache_directory_stat = stat |
| continue |
| - original_file = os.path.join(_REMOTE_CACHE_DIRECTORY, filename) |
| + original_file = os.path.join(_RemoteCacheDirectory(), filename) |
| saved_file = os.path.join(save_target, filename) |
| device.adb.Pull(original_file, saved_file) |
| _UpdateTimestampFromAdbStat(saved_file, stat) |
| @@ -166,16 +150,16 @@ def _PushBrowserCache(device, local_cache_path): |
| local_cache_path: The directory's path containing the cache locally. |
| """ |
| # Clear previous cache. |
| - _AdbShell(device.adb, ['rm', '-rf', _REMOTE_CACHE_DIRECTORY]) |
| - _AdbShell(device.adb, ['mkdir', _REMOTE_CACHE_DIRECTORY]) |
| + _AdbShell(device.adb, ['rm', '-rf', _RemoteCacheDirectory()]) |
| + _AdbShell(device.adb, ['mkdir', _RemoteCacheDirectory()]) |
| # Push cache content. |
| - device.adb.Push(local_cache_path, _REMOTE_CACHE_DIRECTORY) |
| + device.adb.Push(local_cache_path, _RemoteCacheDirectory()) |
| # Walk through the local cache to update mtime on the device. |
| def MirrorMtime(local_path): |
| cache_relative_path = os.path.relpath(local_path, start=local_cache_path) |
| - remote_path = os.path.join(_REMOTE_CACHE_DIRECTORY, cache_relative_path) |
| + remote_path = os.path.join(_RemoteCacheDirectory(), cache_relative_path) |
| _AdbUtime(device.adb, remote_path, os.stat(local_path).st_mtime) |
| for local_directory_path, dirnames, filenames in os.walk( |
| @@ -278,6 +262,10 @@ 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([]) |
| + |
| parser = argparse.ArgumentParser() |
| parser.add_argument('--job', required=True, |
| help='JSON file with job description.') |
| @@ -331,17 +319,15 @@ def main(): |
| with device_setup.DeviceConnection( |
| device=device, |
| additional_flags=additional_flags) as connection: |
| - if clear_cache: |
| - connection.ClearCache() |
| - page_track.PageTrack(connection) |
| - tracing_track = tracing.TracingTrack(connection, |
| + loading_trace = trace_recorder.MonitorUrl( |
| + connection, url, |
| + clear_cache=clear_cache, |
| categories=pull_sandwich_metrics.CATEGORIES) |
| - connection.SetUpMonitoring() |
| - connection.SendAndIgnoreResponse('Page.navigate', {'url': url}) |
| - connection.StartMonitoring() |
| if trace_id != None: |
| - trace_target_directory = os.path.join(args.output, str(trace_id)) |
| - _SaveChromeTrace(tracing_track.ToJsonDict(), trace_target_directory) |
| + loading_trace_path = os.path.join( |
| + args.output, str(trace_id), 'trace.json') |
| + os.makedirs(os.path.dirname(loading_trace_path)) |
| + loading_trace.SaveToJsonFile(loading_trace_path) |
| for _ in xrange(args.repeat): |
| for url in job_urls: |
| @@ -349,7 +335,7 @@ def main(): |
| if args.cache_op == 'clear': |
| clear_cache = True |
| elif args.cache_op == 'push': |
| - device.KillAll(_CHROME_PACKAGE, quiet=True) |
| + device.KillAll(OPTIONS.chrome_package_name, quiet=True) |
| _PushBrowserCache(device, local_cache_directory_path) |
| elif args.cache_op == 'reload': |
| _RunNavigation(url, clear_cache=True, trace_id=None) |
| @@ -366,7 +352,7 @@ def main(): |
| # Move Chrome to background to allow it to flush the index. |
| device.adb.Shell('am start com.google.android.launcher') |
| time.sleep(_TIME_TO_DEVICE_IDLE_SECONDS) |
| - device.KillAll(_CHROME_PACKAGE, quiet=True) |
| + device.KillAll(OPTIONS.chrome_package_name, quiet=True) |
| time.sleep(_TIME_TO_DEVICE_IDLE_SECONDS) |
| cache_directory_path = _PullBrowserCache(device) |