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.DEFAULT_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. |
41 categories: List of tracing event categories to record. | 42 categories: List of tracing event categories to record. |
| 43 timeout: Websocket timeout. |
42 | 44 |
43 Returns: | 45 Returns: |
44 loading_trace.LoadingTrace. | 46 loading_trace.LoadingTrace. |
45 """ | 47 """ |
46 page = page_track.PageTrack(connection) | 48 page = page_track.PageTrack(connection) |
47 request = request_track.RequestTrack(connection) | 49 request = request_track.RequestTrack(connection) |
48 trace = tracing.TracingTrack(connection, categories=categories) | 50 trace = tracing.TracingTrack(connection, categories=categories) |
49 connection.SetUpMonitoring() | 51 connection.SetUpMonitoring() |
50 if clear_cache: | 52 if clear_cache: |
51 connection.ClearCache() | 53 connection.ClearCache() |
52 connection.SendAndIgnoreResponse('Page.navigate', {'url': url}) | 54 connection.SendAndIgnoreResponse('Page.navigate', {'url': url}) |
53 connection.StartMonitoring() | 55 connection.StartMonitoring(timeout=timeout) |
54 metadata = {'date': datetime.datetime.utcnow().isoformat(), | 56 metadata = {'date': datetime.datetime.utcnow().isoformat(), |
55 'seconds_since_epoch': time.time()} | 57 'seconds_since_epoch': time.time()} |
56 return loading_trace.LoadingTrace(url, metadata, page, request, trace) | 58 return loading_trace.LoadingTrace(url, metadata, page, request, trace) |
57 | 59 |
58 def RecordAndDumpTrace(device, url, output_filename): | 60 def RecordAndDumpTrace(device, url, output_filename): |
59 with file(output_filename, 'w') as output,\ | 61 with file(output_filename, 'w') as output,\ |
60 device_setup.DeviceConnection(device) as connection: | 62 device_setup.DeviceConnection(device) as connection: |
61 trace = MonitorUrl(connection, url) | 63 trace = MonitorUrl(connection, url) |
62 json.dump(trace.ToJsonDict(), output) | 64 json.dump(trace.ToJsonDict(), output) |
63 | 65 |
64 | 66 |
65 def main(): | 67 def main(): |
66 logging.basicConfig(level=logging.INFO) | 68 logging.basicConfig(level=logging.INFO) |
67 devil_chromium.Initialize() | 69 devil_chromium.Initialize() |
68 | 70 |
69 parser = argparse.ArgumentParser() | 71 parser = argparse.ArgumentParser() |
70 parser.add_argument('--url', required=True) | 72 parser.add_argument('--url', required=True) |
71 parser.add_argument('--output', required=True) | 73 parser.add_argument('--output', required=True) |
72 args = parser.parse_args() | 74 args = parser.parse_args() |
73 url = args.url | 75 url = args.url |
74 if not url.startswith('http'): | 76 if not url.startswith('http'): |
75 url = 'http://' + url | 77 url = 'http://' + url |
76 device = device_utils.DeviceUtils.HealthyDevices()[0] | 78 device = device_utils.DeviceUtils.HealthyDevices()[0] |
77 RecordAndDumpTrace(device, url, args.output) | 79 RecordAndDumpTrace(device, url, args.output) |
78 | 80 |
79 | 81 |
80 if __name__ == '__main__': | 82 if __name__ == '__main__': |
81 main() | 83 main() |
OLD | NEW |