Chromium Code Reviews| Index: tools/callstats.py |
| diff --git a/tools/callstats.py b/tools/callstats.py |
| index 2ae766b7aed8d21f79637597648516f65f7990f9..5c27c1c0dd5106acae65c9669963dcd0ee9c591a 100755 |
| --- a/tools/callstats.py |
| +++ b/tools/callstats.py |
| @@ -123,6 +123,32 @@ def generate_injection(f, sites, refreshes=0): |
| onLoad(window.location.href); |
| })();""" |
| +def get_chrome_flags(js_flags="'--runtime-calls-stats --allow-natives-syntax'", |
| + user_data_dir="/var/tmp/`date +%S`"): |
|
nickie
2016/09/28 09:08:09
The default parameter here is probably not recomme
Camillo Bruni
2016/09/28 10:36:34
Will push the tmp dir flag to there.
|
| + return [ |
| + "--no-default-browser-check", |
| + "--no-sandbox", |
| + "--disable-translate", |
| + "--enable-benchmarking", |
| + "--js-flags={}".format(js_flags), |
| + "--no-first-run", |
| + "--user-data-dir={}".format(user_data_dir), |
| + ] |
| + |
| +def get_chrome_replay_args(args): |
| + http_port = 4080 + args.port_offset |
| + https_port = 4443 + args.port_offset |
| + return [ |
| + "--host-resolver-rules=MAP *:80 localhost:%s, " \ |
| + "MAP *:443 localhost:%s, " \ |
| + "EXCLUDE localhost" % ( |
| + http_port, https_port), |
| + "--ignore-certificate-errors", |
| + "--disable-seccomp-sandbox", |
| + "--disable-web-security", |
| + "--reduce-security-for-testing", |
| + "--allow-insecure-localhost", |
| + ] |
| def run_site(site, domain, args, timeout=None): |
| print "="*80 |
| @@ -149,33 +175,11 @@ def run_site(site, domain, args, timeout=None): |
| js_flags = "--runtime-call-stats" |
| if args.replay_wpr: js_flags += " --allow-natives-syntax" |
| if args.js_flags: js_flags += " " + args.js_flags |
| - chrome_flags = [ |
| - "--no-default-browser-check", |
| - "--no-sandbox", |
| - "--disable-translate", |
| - "--enable-benchmarking", |
| - "--js-flags={}".format(js_flags), |
| - "--no-first-run", |
| - "--user-data-dir={}".format(user_data_dir), |
| - ] |
| + chrome_flags = get_chrome_flags(js_flags, user_data_dir) |
| if args.replay_wpr: |
| - http_port = 4080 + args.port_offset |
| - https_port = 4443 + args.port_offset |
| - chrome_flags += [ |
| - "--host-resolver-rules=MAP *:80 localhost:%s, " \ |
| - "MAP *:443 localhost:%s, " \ |
| - "EXCLUDE localhost" % ( |
| - http_port, https_port), |
| - "--ignore-certificate-errors", |
| - "--disable-seccomp-sandbox", |
| - "--disable-web-security", |
| - "--reduce-security-for-testing", |
| - "--allow-insecure-localhost", |
| - ] |
| + chrome_flags += get_chrome_replay_flags(args.port_offset) |
| else: |
| - chrome_flags += [ |
| - "--single-process", |
| - ] |
| + chrome_flags += [ "--single-process", ] |
| if args.chrome_flags: |
| chrome_flags += args.chrome_flags.split() |
| cmd_args = [ |
| @@ -235,12 +239,15 @@ def read_sites_file(args): |
| sys.exit(1) |
| -def do_run(args): |
| +def read_sites(args): |
| # Determine the websites to benchmark. |
| if args.sites_file: |
| - sites = read_sites_file(args) |
| - else: |
| - sites = [{'url': site, 'timeout': args.timeout} for site in args.sites] |
| + return read_sites_file(args) |
| + return [{'url': site, 'timeout': args.timeout} for site in args.sites] |
| + |
| +def do_run(args): |
| + sites = read_sites(args) |
| + replay_server = start_replay_server(args, sites) if args.replay_wpr else None |
| # Disambiguate domains, if needed. |
| L = [] |
| domains = {} |
| @@ -267,18 +274,34 @@ def do_run(args): |
| domains[domain] += 1 |
| entry[2] = domains[domain] |
| L.append(entry) |
| - replay_server = start_replay_server(args, sites) if args.replay_wpr else None |
| try: |
| # Run them. |
| for site, domain, count, timeout in L: |
| if count is not None: domain = "{}%{}".format(domain, count) |
| - print site, domain, timeout |
| + print(site, domain, timeout) |
| run_site(site, domain, args, timeout) |
| finally: |
| if replay_server: |
| stop_replay_server(replay_server) |
| +def do_run_replay_server(args): |
| + sites = read_sites(args) |
| + print("- " * 40) |
| + print("Launch chromium with the following commands for debugging:") |
| + print(" $CHROMIUM_DIR/out/Release/chomium") |
| + print(" " + |
| + (" \\\n ".join(get_chrome_flags()+get_chrome_replay_args(args))) + |
|
nickie
2016/09/28 09:08:09
Here the users will see the /var/tmp/`date` temp d
Camillo Bruni
2016/09/28 10:36:34
right, made this more obvious by pushing down the
|
| + " \\") |
| + print(" <URL>") |
| + print("- " * 40) |
| + replay_server = start_replay_server(args, sites) |
| + try: |
| + replay_server['process'].wait() |
| + finally: |
| + stop_replay_server(replay_server) |
| + |
| + |
| # Calculate statistics. |
| def statistics(data): |
| @@ -535,7 +558,7 @@ def main(): |
| subparsers = {} |
| # Command: run. |
| subparsers["run"] = subparser_adder.add_parser( |
| - "run", help="run --help") |
| + "run", help="Replay websites and collect runtime stats data.") |
| subparsers["run"].set_defaults( |
| func=do_run, error=subparsers["run"].error) |
| subparsers["run"].add_argument( |
| @@ -545,37 +568,6 @@ def main(): |
| "--js-flags", type=str, default="", |
| help="specify additional V8 flags") |
| subparsers["run"].add_argument( |
| - "--domain", type=str, default="", |
| - help="specify the output file domain name") |
| - subparsers["run"].add_argument( |
| - "--no-url", dest="print_url", action="store_false", default=True, |
| - help="do not include url in statistics file") |
| - subparsers["run"].add_argument( |
| - "-n", "--repeat", type=int, metavar="<num>", |
| - help="specify iterations for each website (default: once)") |
| - subparsers["run"].add_argument( |
| - "-k", "--refresh", type=int, metavar="<num>", default=0, |
| - help="specify refreshes for each iteration (default: 0)") |
| - subparsers["run"].add_argument( |
| - "--replay-wpr", type=str, metavar="<path>", |
| - help="use the specified web page replay (.wpr) archive") |
| - subparsers["run"].add_argument( |
| - "--replay-bin", type=str, metavar="<path>", |
| - help="specify the replay.py script typically located in " \ |
| - "$CHROMIUM/src/third_party/webpagereplay/replay.py") |
| - subparsers["run"].add_argument( |
| - "-r", "--retries", type=int, metavar="<num>", |
| - help="specify retries if website is down (default: forever)") |
| - subparsers["run"].add_argument( |
| - "-f", "--sites-file", type=str, metavar="<path>", |
| - help="specify file containing benchmark websites") |
| - subparsers["run"].add_argument( |
| - "-t", "--timeout", type=int, metavar="<seconds>", default=60, |
| - help="specify seconds before chrome is killed") |
| - subparsers["run"].add_argument( |
| - "-p", "--port-offset", type=int, metavar="<offset>", default=0, |
| - help="specify the offset for the replay server's default ports") |
| - subparsers["run"].add_argument( |
| "-u", "--user-data-dir", type=str, metavar="<path>", |
| help="specify user data dir (default is temporary)") |
| subparsers["run"].add_argument( |
| @@ -583,14 +575,56 @@ def main(): |
| default="/usr/bin/google-chrome", |
| help="specify chrome executable to use") |
| subparsers["run"].add_argument( |
| - "-l", "--log-stderr", type=str, metavar="<path>", |
| - help="specify where chrome's stderr should go (default: /dev/null)") |
| + "-r", "--retries", type=int, metavar="<num>", |
| + help="specify retries if website is down (default: forever)") |
| + subparsers["run"].add_argument( |
| + "--no-url", dest="print_url", action="store_false", default=True, |
| + help="do not include url in statistics file") |
| + subparsers["run"].add_argument( |
| + "--domain", type=str, default="", |
| + help="specify the output file domain name") |
| subparsers["run"].add_argument( |
| - "sites", type=str, metavar="<URL>", nargs="*", |
| - help="specify benchmark website") |
| + "-n", "--repeat", type=int, metavar="<num>", |
| + help="specify iterations for each website (default: once)") |
| + |
| + def add_replay_args(subparser): |
| + subparser.add_argument( |
| + "-k", "--refresh", type=int, metavar="<num>", default=0, |
| + help="specify refreshes for each iteration (default: 0)") |
| + subparser.add_argument( |
| + "--replay-wpr", type=str, metavar="<path>", |
| + help="use the specified web page replay (.wpr) archive") |
| + subparser.add_argument( |
| + "--replay-bin", type=str, metavar="<path>", |
| + help="specify the replay.py script typically located in " \ |
| + "$CHROMIUM/src/third_party/webpagereplay/replay.py") |
| + subparser.add_argument( |
| + "-f", "--sites-file", type=str, metavar="<path>", |
| + help="specify file containing benchmark websites") |
| + subparser.add_argument( |
| + "-t", "--timeout", type=int, metavar="<seconds>", default=60, |
| + help="specify seconds before chrome is killed") |
| + subparser.add_argument( |
| + "-p", "--port-offset", type=int, metavar="<offset>", default=0, |
| + help="specify the offset for the replay server's default ports") |
| + subparser.add_argument( |
| + "-l", "--log-stderr", type=str, metavar="<path>", |
| + help="specify where chrome's stderr should go (default: /dev/null)") |
| + subparser.add_argument( |
| + "sites", type=str, metavar="<URL>", nargs="*", |
| + help="specify benchmark website") |
| + add_replay_args(subparsers["run"]) |
| + |
| + # Command: replay-server |
| + subparsers["replay"] = subparser_adder.add_parser( |
| + "replay", help="Run the replay server for debugging purposes") |
| + subparsers["replay"].set_defaults( |
| + func=do_run_replay_server, error=subparsers["replay"].error) |
| + add_replay_args(subparsers["replay"]) |
| + |
| # Command: stats. |
| subparsers["stats"] = subparser_adder.add_parser( |
| - "stats", help="stats --help") |
| + "stats", help="Analize the results file create by the 'run' command.") |
| subparsers["stats"].set_defaults( |
| func=do_stats, error=subparsers["stats"].error) |
| subparsers["stats"].add_argument( |
| @@ -607,11 +641,13 @@ def main(): |
| help="specify log files to parse") |
| subparsers["stats"].add_argument( |
| "--aggregate", dest="aggregate", action="store_true", default=False, |
| - help="Create aggregated entries. Adds Group-* entries at the toplevel. " + |
| + help="Create aggregated entries. Adds Group-* entries at the toplevel. " \ |
| "Additionally creates a Total page with all entries.") |
| + |
| # Command: json. |
| subparsers["json"] = subparser_adder.add_parser( |
| - "json", help="json --help") |
| + "json", help="Collect results file created by the 'run' command into" \ |
| + "a single json file.") |
| subparsers["json"].set_defaults( |
| func=do_json, error=subparsers["json"].error) |
| subparsers["json"].add_argument( |
| @@ -619,8 +655,9 @@ def main(): |
| help="specify directories with log files to parse") |
| subparsers["json"].add_argument( |
| "--aggregate", dest="aggregate", action="store_true", default=False, |
| - help="Create aggregated entries. Adds Group-* entries at the toplevel. " + |
| + help="Create aggregated entries. Adds Group-* entries at the toplevel. " \ |
| "Additionally creates a Total page with all entries.") |
| + |
| # Command: help. |
| subparsers["help"] = subparser_adder.add_parser( |
| "help", help="help information") |
| @@ -630,6 +667,7 @@ def main(): |
| subparsers["help"].add_argument( |
| "help_cmd", type=str, metavar="<command>", nargs="?", |
| help="command for which to display help") |
| + |
| # Execute the command. |
| args = parser.parse_args() |
| setattr(args, 'script_path', os.path.dirname(sys.argv[0])) |