OLD | NEW |
1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
2 # Copyright 2016 the V8 project authors. All rights reserved. | 2 # Copyright 2016 the V8 project 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 Usage: callstats.py [-h] <command> ... | 6 Usage: callstats.py [-h] <command> ... |
7 | 7 |
8 Optional arguments: | 8 Optional arguments: |
9 -h, --help show this help message and exit | 9 -h, --help show this help message and exit |
10 | 10 |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
77 | 77 |
78 def stop_replay_server(server): | 78 def stop_replay_server(server): |
79 print("SHUTTING DOWN REPLAY SERVER %s" % server['process'].pid) | 79 print("SHUTTING DOWN REPLAY SERVER %s" % server['process'].pid) |
80 server['process'].terminate() | 80 server['process'].terminate() |
81 os.remove(server['injection']) | 81 os.remove(server['injection']) |
82 | 82 |
83 | 83 |
84 def generate_injection(f, sites, refreshes=0): | 84 def generate_injection(f, sites, refreshes=0): |
85 print >> f, """\ | 85 print >> f, """\ |
86 (function() { | 86 (function() { |
87 var sites = | |
88 """, json.dumps(sites), """; | |
89 var s = window.sessionStorage.getItem("refreshCounter"); | 87 var s = window.sessionStorage.getItem("refreshCounter"); |
90 var refreshTotal = """, refreshes, """; | 88 var refreshTotal = """, refreshes, """; |
91 var refreshCounter = s ? parseInt(s) : refreshTotal; | 89 var refreshCounter = s ? parseInt(s) : refreshTotal; |
92 var refreshId = refreshTotal - refreshCounter; | 90 var refreshId = refreshTotal - refreshCounter; |
93 if (refreshCounter > 0) { | 91 if (refreshCounter > 0) { |
94 window.sessionStorage.setItem("refreshCounter", refreshCounter-1); | 92 window.sessionStorage.setItem("refreshCounter", refreshCounter-1); |
95 } | 93 } |
96 function match(url, item) { | 94 function match(url, item) { |
97 if ('regexp' in item) { return url.match(item.regexp) !== null }; | 95 if ('regexp' in item) { return url.match(item.regexp) !== null }; |
98 var url_wanted = item.url; | 96 var url_wanted = item.url; |
99 /* Allow automatic redirections from http to https. */ | 97 /* Allow automatic redirections from http to https. */ |
100 if (url_wanted.startsWith("http://") && url.startsWith("https://")) { | 98 if (url_wanted.startsWith("http://") && url.startsWith("https://")) { |
101 url_wanted = "https://" + url_wanted.substr(7); | 99 url_wanted = "https://" + url_wanted.substr(7); |
102 } | 100 } |
103 return url.startsWith(url_wanted); | 101 return url.startsWith(url_wanted); |
104 } | 102 }; |
105 function runCustomScript(site) { | |
106 if (site.script === undefined) return; | |
107 /* Combine a script from the given array. */ | |
108 if (typeof site.script !== "string") { | |
109 site.script = site.script.join(' '); | |
110 } | |
111 eval(site.script); | |
112 } | |
113 function onLoad(url) { | 103 function onLoad(url) { |
114 for (var item of sites) { | 104 for (var item of sites) { |
115 if (!match(url, item)) continue; | 105 if (!match(url, item)) continue; |
116 var timeout = 'timeline' in item ? 2000 * item.timeline | 106 var timeout = 'timeline' in item ? 2000 * item.timeline |
117 : 'timeout' in item ? 1000 * (item.timeout - 3) | 107 : 'timeout' in item ? 1000 * (item.timeout - 3) |
118 : 10000; | 108 : 10000; |
119 console.log("Setting time out of " + timeout + " for: " + url); | 109 console.log("Setting time out of " + timeout + " for: " + url); |
120 window.setTimeout(function() { | 110 window.setTimeout(function() { |
121 console.log("Time is out for: " + url); | 111 console.log("Time is out for: " + url); |
122 var msg = "STATS: (" + refreshId + ") " + url; | 112 var msg = "STATS: (" + refreshId + ") " + url; |
123 %GetAndResetRuntimeCallStats(1, msg); | 113 %GetAndResetRuntimeCallStats(1, msg); |
124 if (refreshCounter > 0) { | 114 if (refreshCounter > 0) { |
125 console.log( | 115 console.log( |
126 "Refresh counter is " + refreshCounter + ", refreshing: " + url); | 116 "Refresh counter is " + refreshCounter + ", refreshing: " + url); |
127 window.location.reload(); | 117 window.location.reload(); |
128 } | 118 } |
129 }, timeout); | 119 }, timeout); |
130 runCustomScript(item); | |
131 return; | 120 return; |
132 } | 121 } |
133 console.log("Ignoring: " + url); | 122 console.log("Ignoring: " + url); |
134 }; | 123 }; |
135 /* Avoid re-triggering the runtime stats for html imports */ | 124 var sites = |
136 if (document.currentScript.ownerDocument === document) { | 125 """, json.dumps(sites), """; |
137 onLoad(window.location.href); | 126 onLoad(window.location.href); |
138 } | |
139 })();""" | 127 })();""" |
140 | 128 |
141 def get_chrome_flags(js_flags, user_data_dir): | 129 def get_chrome_flags(js_flags, user_data_dir): |
142 return [ | 130 return [ |
143 "--no-default-browser-check", | 131 "--no-default-browser-check", |
144 "--no-sandbox", | 132 "--no-sandbox", |
145 "--disable-translate", | 133 "--disable-translate", |
146 "--enable-benchmarking", | 134 "--enable-benchmarking", |
147 "--js-flags={}".format(js_flags), | 135 "--js-flags={}".format(js_flags), |
148 "--no-first-run", | 136 "--no-first-run", |
(...skipping 543 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
692 args.error("use either option --sites-file or site URLs") | 680 args.error("use either option --sites-file or site URLs") |
693 sys.exit(1) | 681 sys.exit(1) |
694 elif args.command == "run" and not coexist(args.replay_wpr, args.replay_bin): | 682 elif args.command == "run" and not coexist(args.replay_wpr, args.replay_bin): |
695 args.error("options --replay-wpr and --replay-bin must be used together") | 683 args.error("options --replay-wpr and --replay-bin must be used together") |
696 sys.exit(1) | 684 sys.exit(1) |
697 else: | 685 else: |
698 args.func(args) | 686 args.func(args) |
699 | 687 |
700 if __name__ == "__main__": | 688 if __name__ == "__main__": |
701 sys.exit(main()) | 689 sys.exit(main()) |
OLD | NEW |