| OLD | NEW |
| 1 #! /usr/bin/env python | 1 #! /usr/bin/env python |
| 2 # Copyright 2016 The Chromium Authors. All rights reserved. | 2 # Copyright 2016 The Chromium Authors. All rights reserved. |
| 3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
| 4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
| 5 | 5 |
| 6 """Instructs Chrome to load series of web pages and reports results. | 6 """Instructs Chrome to load series of web pages and reports results. |
| 7 | 7 |
| 8 When running Chrome is sandwiched between preprocessed disk caches and | 8 When running Chrome is sandwiched between preprocessed disk caches and |
| 9 WepPageReplay serving all connections. | 9 WepPageReplay serving all connections. |
| 10 | 10 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 24 from devil.android import device_utils | 24 from devil.android import device_utils |
| 25 | 25 |
| 26 sys.path.append(os.path.join(_SRC_DIR, 'build', 'android')) | 26 sys.path.append(os.path.join(_SRC_DIR, 'build', 'android')) |
| 27 from pylib import constants | 27 from pylib import constants |
| 28 import devil_chromium | 28 import devil_chromium |
| 29 | 29 |
| 30 import device_setup | 30 import device_setup |
| 31 import devtools_monitor | 31 import devtools_monitor |
| 32 import json | 32 import json |
| 33 import page_track | 33 import page_track |
| 34 import pull_sandwich_metrics |
| 34 import tracing | 35 import tracing |
| 35 | 36 |
| 36 | 37 |
| 37 _JOB_SEARCH_PATH = 'sandwich_jobs' | 38 _JOB_SEARCH_PATH = 'sandwich_jobs' |
| 38 | 39 |
| 39 # Directory name under --output to save the cache from the device. | 40 # Directory name under --output to save the cache from the device. |
| 40 _CACHE_DIRECTORY_NAME = 'cache' | 41 _CACHE_DIRECTORY_NAME = 'cache' |
| 41 | 42 |
| 42 # Name of cache subdirectory on the device where the cache index is stored. | 43 # Name of cache subdirectory on the device where the cache index is stored. |
| 43 _INDEX_DIRECTORY_NAME = 'index-dir' | 44 _INDEX_DIRECTORY_NAME = 'index-dir' |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 82 Args: | 83 Args: |
| 83 events: a dict as returned by TracingTrack.ToJsonDict() | 84 events: a dict as returned by TracingTrack.ToJsonDict() |
| 84 directory: directory name contining all traces | 85 directory: directory name contining all traces |
| 85 subdirectory: directory name to create this particular trace in | 86 subdirectory: directory name to create this particular trace in |
| 86 """ | 87 """ |
| 87 target_directory = os.path.join(directory, subdirectory) | 88 target_directory = os.path.join(directory, subdirectory) |
| 88 filename = os.path.join(target_directory, 'trace.json') | 89 filename = os.path.join(target_directory, 'trace.json') |
| 89 try: | 90 try: |
| 90 os.makedirs(target_directory) | 91 os.makedirs(target_directory) |
| 91 with open(filename, 'w') as f: | 92 with open(filename, 'w') as f: |
| 92 json.dump({'traceEvents': events['events'], 'metadata': {}}, f) | 93 json.dump({'traceEvents': events['events'], 'metadata': {}}, f, indent=2) |
| 93 except IOError: | 94 except IOError: |
| 94 logging.warning('Could not save a trace: %s' % filename) | 95 logging.warning('Could not save a trace: %s' % filename) |
| 95 # Swallow the exception. | 96 # Swallow the exception. |
| 96 | 97 |
| 97 | 98 |
| 98 def _UpdateTimestampFromAdbStat(filename, stat): | 99 def _UpdateTimestampFromAdbStat(filename, stat): |
| 99 os.utime(filename, (stat.st_time, stat.st_time)) | 100 os.utime(filename, (stat.st_time, stat.st_time)) |
| 100 | 101 |
| 101 | 102 |
| 102 def _SaveBrowserCache(device, output_directory): | 103 def _SaveBrowserCache(device, output_directory): |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 181 pages_loaded = 0 | 182 pages_loaded = 0 |
| 182 for iteration in xrange(args.repeat): | 183 for iteration in xrange(args.repeat): |
| 183 for url in job_urls: | 184 for url in job_urls: |
| 184 with device_setup.DeviceConnection( | 185 with device_setup.DeviceConnection( |
| 185 device=device, | 186 device=device, |
| 186 additional_flags=additional_flags) as connection: | 187 additional_flags=additional_flags) as connection: |
| 187 if iteration == 0 and pages_loaded == 0 and args.save_cache: | 188 if iteration == 0 and pages_loaded == 0 and args.save_cache: |
| 188 connection.ClearCache() | 189 connection.ClearCache() |
| 189 page_track.PageTrack(connection) | 190 page_track.PageTrack(connection) |
| 190 tracing_track = tracing.TracingTrack(connection, | 191 tracing_track = tracing.TracingTrack(connection, |
| 191 categories='blink,cc,netlog,renderer.scheduler,toplevel,v8') | 192 categories=pull_sandwich_metrics.CATEGORIES) |
| 192 connection.SetUpMonitoring() | 193 connection.SetUpMonitoring() |
| 193 connection.SendAndIgnoreResponse('Page.navigate', {'url': url}) | 194 connection.SendAndIgnoreResponse('Page.navigate', {'url': url}) |
| 194 connection.StartMonitoring() | 195 connection.StartMonitoring() |
| 195 pages_loaded += 1 | 196 pages_loaded += 1 |
| 196 _SaveChromeTrace(tracing_track.ToJsonDict(), args.output, | 197 _SaveChromeTrace(tracing_track.ToJsonDict(), args.output, |
| 197 str(pages_loaded)) | 198 str(pages_loaded)) |
| 198 | 199 |
| 199 if args.save_cache: | 200 if args.save_cache: |
| 200 # Move Chrome to background to allow it to flush the index. | 201 # Move Chrome to background to allow it to flush the index. |
| 201 device.adb.Shell('am start com.google.android.launcher') | 202 device.adb.Shell('am start com.google.android.launcher') |
| 202 time.sleep(_TIME_TO_DEVICE_IDLE_SECONDS) | 203 time.sleep(_TIME_TO_DEVICE_IDLE_SECONDS) |
| 203 device.KillAll(_CHROME_PACKAGE, quiet=True) | 204 device.KillAll(_CHROME_PACKAGE, quiet=True) |
| 204 time.sleep(_TIME_TO_DEVICE_IDLE_SECONDS) | 205 time.sleep(_TIME_TO_DEVICE_IDLE_SECONDS) |
| 205 _SaveBrowserCache(device, args.output) | 206 _SaveBrowserCache(device, args.output) |
| 206 | 207 |
| 207 | 208 |
| 208 if __name__ == '__main__': | 209 if __name__ == '__main__': |
| 209 sys.exit(main()) | 210 sys.exit(main()) |
| OLD | NEW |