| OLD | NEW |
| 1 #! /usr/bin/python | 1 #! /usr/bin/python |
| 2 # Copyright 2015 The Chromium Authors. All rights reserved. | 2 # Copyright 2015 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 import argparse | 6 import argparse |
| 7 import cgi | 7 import cgi |
| 8 import json | 8 import json |
| 9 import logging | 9 import logging |
| 10 import os | 10 import os |
| 11 import subprocess | 11 import subprocess |
| 12 import sys | 12 import sys |
| 13 import tempfile | 13 import tempfile |
| 14 import time | 14 import time |
| 15 | 15 |
| 16 _SRC_DIR = os.path.abspath(os.path.join( | 16 _SRC_DIR = os.path.abspath(os.path.join( |
| 17 os.path.dirname(__file__), '..', '..', '..')) | 17 os.path.dirname(__file__), '..', '..', '..')) |
| 18 | 18 |
| 19 sys.path.append(os.path.join(_SRC_DIR, 'third_party', 'catapult', 'devil')) | 19 sys.path.append(os.path.join(_SRC_DIR, 'third_party', 'catapult', 'devil')) |
| 20 from devil.android import device_utils | 20 from devil.android import device_utils |
| 21 from devil.android.sdk import intent | 21 from devil.android.sdk import intent |
| 22 | 22 |
| 23 sys.path.append(os.path.join(_SRC_DIR, 'build', 'android')) | 23 sys.path.append(os.path.join(_SRC_DIR, 'build', 'android')) |
| 24 import devil_chromium | 24 import devil_chromium |
| 25 from pylib import constants | 25 from pylib import constants |
| 26 | 26 |
| 27 import content_classification_lens |
| 27 import device_setup | 28 import device_setup |
| 28 import loading_model | 29 import loading_model |
| 29 import loading_trace | 30 import loading_trace |
| 30 import trace_recorder | 31 import trace_recorder |
| 31 | 32 |
| 32 | 33 |
| 33 # TODO(mattcary): logging.info isn't that useful, as the whole (tools) world | 34 # TODO(mattcary): logging.info isn't that useful, as the whole (tools) world |
| 34 # uses logging info; we need to introduce logging modules to get finer-grained | 35 # uses logging info; we need to introduce logging modules to get finer-grained |
| 35 # output. For now we just do logging.warning. | 36 # output. For now we just do logging.warning. |
| 36 | 37 |
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 140 _WriteJson(f, cold_data) | 141 _WriteJson(f, cold_data) |
| 141 logging.warning('Wrote ' + json_output + '.cold') | 142 logging.warning('Wrote ' + json_output + '.cold') |
| 142 else: | 143 else: |
| 143 with open(json_output, 'w') as f: | 144 with open(json_output, 'w') as f: |
| 144 _WriteJson(f, cold_data) | 145 _WriteJson(f, cold_data) |
| 145 logging.warning('Wrote ' + json_output) | 146 logging.warning('Wrote ' + json_output) |
| 146 | 147 |
| 147 | 148 |
| 148 # TODO(mattcary): it would be nice to refactor so the --noads flag gets dealt | 149 # TODO(mattcary): it would be nice to refactor so the --noads flag gets dealt |
| 149 # with here. | 150 # with here. |
| 150 def _ProcessRequests(filename): | 151 def _ProcessRequests(filename, ad_rules_filename='', |
| 152 tracking_rules_filename=''): |
| 151 with open(filename) as f: | 153 with open(filename) as f: |
| 152 return loading_model.ResourceGraph( | 154 trace = loading_trace.LoadingTrace.FromJsonDict(json.load(f)) |
| 153 loading_trace.LoadingTrace.FromJsonDict(json.load(f))) | 155 content_lens = ( |
| 156 content_classification_lens.ContentClassificationLens.WithRulesFiles( |
| 157 trace, ad_rules_filename, tracking_rules_filename)) |
| 158 return loading_model.ResourceGraph(trace, content_lens) |
| 154 | 159 |
| 155 | 160 |
| 156 def InvalidCommand(cmd): | 161 def InvalidCommand(cmd): |
| 157 sys.exit('Invalid command "%s"\nChoices are: %s' % | 162 sys.exit('Invalid command "%s"\nChoices are: %s' % |
| 158 (cmd, ' '.join(COMMAND_MAP.keys()))) | 163 (cmd, ' '.join(COMMAND_MAP.keys()))) |
| 159 | 164 |
| 160 | 165 |
| 161 def DoCost(arg_str): | 166 def DoCost(arg_str): |
| 162 parser = argparse.ArgumentParser(description='Tabulates cost') | 167 parser = argparse.ArgumentParser(description='Tabulates cost') |
| 163 parser.add_argument('request_json') | 168 parser.add_argument('request_json') |
| (...skipping 14 matching lines...) Expand all Loading... |
| 178 | 183 |
| 179 | 184 |
| 180 def DoPng(arg_str): | 185 def DoPng(arg_str): |
| 181 parser = argparse.ArgumentParser( | 186 parser = argparse.ArgumentParser( |
| 182 description='Generates a PNG from a trace') | 187 description='Generates a PNG from a trace') |
| 183 parser.add_argument('request_json') | 188 parser.add_argument('request_json') |
| 184 parser.add_argument('png_output', nargs='?') | 189 parser.add_argument('png_output', nargs='?') |
| 185 parser.add_argument('--eog', action='store_true') | 190 parser.add_argument('--eog', action='store_true') |
| 186 parser.add_argument('--highlight') | 191 parser.add_argument('--highlight') |
| 187 parser.add_argument('--noads', action='store_true') | 192 parser.add_argument('--noads', action='store_true') |
| 193 parser.add_argument('--ad_rules', default='') |
| 194 parser.add_argument('--tracking_rules', default='') |
| 188 args = parser.parse_args(arg_str) | 195 args = parser.parse_args(arg_str) |
| 189 graph = _ProcessRequests(args.request_json) | 196 graph = _ProcessRequests( |
| 197 args.request_json, args.ad_rules, args.tracking_rules) |
| 190 if args.noads: | 198 if args.noads: |
| 191 graph.Set(node_filter=graph.FilterAds) | 199 graph.Set(node_filter=graph.FilterAds) |
| 192 tmp = tempfile.NamedTemporaryFile() | 200 tmp = tempfile.NamedTemporaryFile() |
| 193 graph.MakeGraphviz( | 201 graph.MakeGraphviz( |
| 194 tmp, | 202 tmp, |
| 195 highlight=args.highlight.split(',') if args.highlight else None) | 203 highlight=args.highlight.split(',') if args.highlight else None) |
| 196 tmp.flush() | 204 tmp.flush() |
| 197 png_output = args.png_output | 205 png_output = args.png_output |
| 198 if not png_output: | 206 if not png_output: |
| 199 if args.request_json.endswith('.json'): | 207 if args.request_json.endswith('.json'): |
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 319 parser.add_argument('command', help=' '.join(COMMAND_MAP.keys())) | 327 parser.add_argument('command', help=' '.join(COMMAND_MAP.keys())) |
| 320 parser.add_argument('rest', nargs=argparse.REMAINDER) | 328 parser.add_argument('rest', nargs=argparse.REMAINDER) |
| 321 args = parser.parse_args() | 329 args = parser.parse_args() |
| 322 devil_chromium.Initialize() | 330 devil_chromium.Initialize() |
| 323 COMMAND_MAP.get(args.command, | 331 COMMAND_MAP.get(args.command, |
| 324 lambda _: InvalidCommand(args.command))(args.rest) | 332 lambda _: InvalidCommand(args.command))(args.rest) |
| 325 | 333 |
| 326 | 334 |
| 327 if __name__ == '__main__': | 335 if __name__ == '__main__': |
| 328 main() | 336 main() |
| OLD | NEW |