| OLD | NEW |
| 1 #! /usr/bin/python | 1 #! /usr/bin/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 """Loading trace recorder.""" | 6 """Loading trace recorder.""" |
| 7 | 7 |
| 8 import argparse | 8 import argparse |
| 9 import datetime | 9 import datetime |
| 10 import json | 10 import json |
| (...skipping 13 matching lines...) Expand all Loading... |
| 24 | 24 |
| 25 import device_setup | 25 import device_setup |
| 26 import devtools_monitor | 26 import devtools_monitor |
| 27 import loading_trace | 27 import loading_trace |
| 28 import page_track | 28 import page_track |
| 29 import request_track | 29 import request_track |
| 30 import tracing | 30 import tracing |
| 31 | 31 |
| 32 | 32 |
| 33 def MonitorUrl(connection, url, clear_cache=False, | 33 def MonitorUrl(connection, url, clear_cache=False, |
| 34 categories=tracing.DEFAULT_CATEGORIES): | 34 categories=tracing.DEFAULT_CATEGORIES, |
| 35 timeout=devtools_monitor.WEBSOCKET_TIMEOUT): |
| 35 """Monitor a URL via a trace recorder. | 36 """Monitor a URL via a trace recorder. |
| 36 | 37 |
| 37 Args: | 38 Args: |
| 38 connection: A device_monitor.DevToolsConnection instance. | 39 connection: A devtools_monitor.DevToolsConnection instance. |
| 39 url: url to navigate to as string. | 40 url: url to navigate to as string. |
| 40 clear_cache: boolean indicating if cache should be cleared before loading. | 41 clear_cache: boolean indicating if cache should be cleared before loading. |
| 42 timeout: Websocket timeout. |
| 41 | 43 |
| 42 Returns: | 44 Returns: |
| 43 loading_trace.LoadingTrace. | 45 loading_trace.LoadingTrace. |
| 44 """ | 46 """ |
| 45 page = page_track.PageTrack(connection) | 47 page = page_track.PageTrack(connection) |
| 46 request = request_track.RequestTrack(connection) | 48 request = request_track.RequestTrack(connection) |
| 47 trace = tracing.TracingTrack(connection, categories=categories) | 49 trace = tracing.TracingTrack(connection, categories=categories) |
| 48 connection.SetUpMonitoring() | 50 connection.SetUpMonitoring() |
| 49 if clear_cache: | 51 if clear_cache: |
| 50 connection.ClearCache() | 52 connection.ClearCache() |
| 51 connection.SendAndIgnoreResponse('Page.navigate', {'url': url}) | 53 connection.SendAndIgnoreResponse('Page.navigate', {'url': url}) |
| 52 connection.StartMonitoring() | 54 connection.StartMonitoring(timeout=timeout) |
| 53 metadata = {'date': datetime.datetime.utcnow().isoformat(), | 55 metadata = {'date': datetime.datetime.utcnow().isoformat(), |
| 54 'seconds_since_epoch': time.time()} | 56 'seconds_since_epoch': time.time()} |
| 55 return loading_trace.LoadingTrace(url, metadata, page, request, trace) | 57 return loading_trace.LoadingTrace(url, metadata, page, request, trace) |
| 56 | 58 |
| 57 def RecordAndDumpTrace(device, url, output_filename): | 59 def RecordAndDumpTrace(device, url, output_filename): |
| 58 with file(output_filename, 'w') as output,\ | 60 with file(output_filename, 'w') as output,\ |
| 59 device_setup.DeviceConnection(device) as connection: | 61 device_setup.DeviceConnection(device) as connection: |
| 60 trace = MonitorUrl(connection, url) | 62 trace = MonitorUrl(connection, url) |
| 61 json.dump(trace.ToJsonDict(), output) | 63 json.dump(trace.ToJsonDict(), output) |
| 62 | 64 |
| 63 | 65 |
| 64 def main(): | 66 def main(): |
| 65 logging.basicConfig(level=logging.INFO) | 67 logging.basicConfig(level=logging.INFO) |
| 66 devil_chromium.Initialize() | 68 devil_chromium.Initialize() |
| 67 | 69 |
| 68 parser = argparse.ArgumentParser() | 70 parser = argparse.ArgumentParser() |
| 69 parser.add_argument('--url', required=True) | 71 parser.add_argument('--url', required=True) |
| 70 parser.add_argument('--output', required=True) | 72 parser.add_argument('--output', required=True) |
| 71 args = parser.parse_args() | 73 args = parser.parse_args() |
| 72 url = args.url | 74 url = args.url |
| 73 if not url.startswith('http'): | 75 if not url.startswith('http'): |
| 74 url = 'http://' + url | 76 url = 'http://' + url |
| 75 device = device_utils.DeviceUtils.HealthyDevices()[0] | 77 device = device_utils.DeviceUtils.HealthyDevices()[0] |
| 76 RecordAndDumpTrace(device, url, args.output) | 78 RecordAndDumpTrace(device, url, args.output) |
| 77 | 79 |
| 78 | 80 |
| 79 if __name__ == '__main__': | 81 if __name__ == '__main__': |
| 80 main() | 82 main() |
| OLD | NEW |