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 |