OLD | NEW |
1 # Copyright 2016 The Chromium Authors. All rights reserved. | 1 # Copyright 2016 The Chromium Authors. All rights reserved. |
2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
4 | 4 |
5 """Compute core set for a page. | 5 """Compute core set for a page. |
6 | 6 |
7 This script is a collection of utilities for working with core sets. | 7 This script is a collection of utilities for working with core sets. |
8 """ | 8 """ |
9 | 9 |
10 import argparse | 10 import argparse |
11 import glob | 11 import glob |
12 import json | 12 import json |
13 import logging | 13 import logging |
14 import multiprocessing | 14 import multiprocessing |
15 import os | 15 import os |
16 import sys | 16 import sys |
17 | 17 |
18 import loading_model | 18 import dependency_graph |
19 import loading_trace | 19 import loading_trace |
| 20 import request_dependencies_lens |
20 import resource_sack | 21 import resource_sack |
21 | 22 |
22 | 23 |
23 def _Progress(x): | 24 def _Progress(x): |
24 sys.stderr.write(x + '\n') | 25 sys.stderr.write(x + '\n') |
25 | 26 |
26 | 27 |
27 def _PageCore(prefix, graph_set_names, output): | 28 def _PageCore(prefix, graph_set_names, output): |
28 """Compute the page core over sets defined by graph_set_names.""" | 29 """Compute the page core over sets defined by graph_set_names.""" |
29 assert graph_set_names | 30 assert graph_set_names |
30 graph_sets = [] | 31 graph_sets = [] |
31 sack = resource_sack.GraphSack() | 32 sack = resource_sack.GraphSack() |
32 for name in graph_set_names: | 33 for name in graph_set_names: |
33 name_graphs = [] | 34 name_graphs = [] |
34 _Progress('Processing %s' % name) | 35 _Progress('Processing %s' % name) |
35 for filename in glob.iglob('-'.join([prefix, name, '*.trace'])): | 36 for filename in glob.iglob('-'.join([prefix, name, '*.trace'])): |
36 _Progress('Reading %s' % filename) | 37 _Progress('Reading %s' % filename) |
37 graph = loading_model.ResourceGraph( | 38 trace = loading_trace.LoadingTrace.FromJsonFile(filename) |
38 loading_trace.LoadingTrace.FromJsonFile(filename)) | 39 graph = dependency_graph.RequestDependencyGraph( |
| 40 trace.request_track.GetEvents(), |
| 41 request_dependencies_lens.RequestDependencyLens(trace)) |
39 sack.ConsumeGraph(graph) | 42 sack.ConsumeGraph(graph) |
40 name_graphs.append(graph) | 43 name_graphs.append(graph) |
41 graph_sets.append(name_graphs) | 44 graph_sets.append(name_graphs) |
42 json.dump({'page_core': [l for l in sack.CoreSet(*graph_sets)], | 45 json.dump({'page_core': [l for l in sack.CoreSet(*graph_sets)], |
43 'threshold': sack.CORE_THRESHOLD}, | 46 'threshold': sack.CORE_THRESHOLD}, |
44 output, sort_keys=True, indent=2) | 47 output, sort_keys=True, indent=2) |
45 output.write('\n') | 48 output.write('\n') |
46 | 49 |
47 | 50 |
48 def _DoSite(site, graph_sets, input_dir, output_dir): | 51 def _DoSite(site, graph_sets, input_dir, output_dir): |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
83 _Progress('Using threshold %s' % threshold) | 86 _Progress('Using threshold %s' % threshold) |
84 big_sack = resource_sack.GraphSack() | 87 big_sack = resource_sack.GraphSack() |
85 graph_sets = [] | 88 graph_sets = [] |
86 for name in graph_set_names: | 89 for name in graph_set_names: |
87 _Progress('Finding core set for %s' % name) | 90 _Progress('Finding core set for %s' % name) |
88 sack = resource_sack.GraphSack() | 91 sack = resource_sack.GraphSack() |
89 sack.CORE_THRESHOLD = threshold | 92 sack.CORE_THRESHOLD = threshold |
90 this_set = [] | 93 this_set = [] |
91 for filename in glob.iglob('-'.join([prefix, name, '*.trace'])): | 94 for filename in glob.iglob('-'.join([prefix, name, '*.trace'])): |
92 _Progress('Reading %s' % filename) | 95 _Progress('Reading %s' % filename) |
93 graph = loading_model.ResourceGraph( | 96 trace = loading_trace.LoadingTrace.FromJsonFile(filename) |
94 loading_trace.LoadingTrace.FromJsonDict(json.load(open(filename)))) | 97 graph = dependency_graph.RequestDependencyGraph( |
| 98 trace.request_track.GetEvents(), |
| 99 request_dependencies_lens.RequestDependencyLens(trace)) |
95 sack.ConsumeGraph(graph) | 100 sack.ConsumeGraph(graph) |
96 big_sack.ConsumeGraph(graph) | 101 big_sack.ConsumeGraph(graph) |
97 this_set.append(graph) | 102 this_set.append(graph) |
98 core_sets.append({ | 103 core_sets.append({ |
99 'set_name': name, | 104 'set_name': name, |
100 'core_set': [l for l in sack.CoreSet()] | 105 'core_set': [l for l in sack.CoreSet()] |
101 }) | 106 }) |
102 graph_sets.append(this_set) | 107 graph_sets.append(this_set) |
103 json.dump({'core_sets': core_sets, | 108 json.dump({'core_sets': core_sets, |
104 'page_core': [l for l in big_sack.CoreSet(*graph_sets)]}, | 109 'page_core': [l for l in big_sack.CoreSet(*graph_sets)]}, |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
196 'all_cores) using Jaccard index. Outputs on stdout')) | 201 'all_cores) using Jaccard index. Outputs on stdout')) |
197 compare.add_argument('--a', required=True, help='the first core set JSON') | 202 compare.add_argument('--a', required=True, help='the first core set JSON') |
198 compare.add_argument('--b', required=True, help='the second core set JSON') | 203 compare.add_argument('--b', required=True, help='the second core set JSON') |
199 compare.add_argument('--csv', action='store_true', help='output as CSV') | 204 compare.add_argument('--csv', action='store_true', help='output as CSV') |
200 compare.set_defaults( | 205 compare.set_defaults( |
201 executor=lambda args: | 206 executor=lambda args: |
202 _Compare(args.a, args.b, args.csv)) | 207 _Compare(args.a, args.b, args.csv)) |
203 | 208 |
204 args = parser.parse_args() | 209 args = parser.parse_args() |
205 args.executor(args) | 210 args.executor(args) |
OLD | NEW |