Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(76)

Side by Side Diff: tools/perf/core/find_dependencies.py

Issue 1467143006: [Telemetry] Migrate find_dependencies internals to tools/perf (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address Ned's comment Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « tools/perf/core/bootstrap.py ('k') | tools/perf/core/find_dependencies_unittest.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright 2014 The Chromium Authors. All rights reserved. 1 # Copyright 2014 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 import fnmatch 5 import fnmatch
6 import imp 6 import imp
7 import logging 7 import logging
8 import optparse 8 import optparse
9 import os 9 import os
10 import sys 10 import sys
11 import zipfile 11 import zipfile
12 12
13 from telemetry import benchmark 13 from telemetry import benchmark
14 from telemetry.core import discover 14 from telemetry.core import discover
15 from telemetry.internal.util import bootstrap
16 from telemetry.internal.util import command_line 15 from telemetry.internal.util import command_line
17 from telemetry.internal.util import path 16 from telemetry.internal.util import path
18 from telemetry.internal.util import path_set 17 from telemetry.internal.util import path_set
19 18
20 from modulegraph import modulegraph 19 from modulegraph import modulegraph # pylint: disable=import-error
21 20
21 from core import bootstrap
22 from core import path_util
22 23
23 DEPS_FILE = 'bootstrap_deps' 24 DEPS_FILE = 'bootstrap_deps'
24 25
25 26
26 def FindBootstrapDependencies(base_dir): 27 def FindBootstrapDependencies(base_dir):
27 deps_file = os.path.join(base_dir, DEPS_FILE) 28 deps_file = os.path.join(base_dir, DEPS_FILE)
28 if not os.path.exists(deps_file): 29 if not os.path.exists(deps_file):
29 return [] 30 return []
30 deps_paths = bootstrap.ListAllDepsPaths(deps_file) 31 deps_paths = bootstrap.ListAllDepsPaths(deps_file)
31 return set(os.path.realpath(os.path.join( 32 return set(os.path.realpath(os.path.join(
32 path.GetChromiumSrcDir(), '..', deps_path)) 33 path_util.GetChromiumSrcDir(), '..', deps_path))
33 for deps_path in deps_paths) 34 for deps_path in deps_paths)
34 35
35 36
36 def FindPythonDependencies(module_path): 37 def FindPythonDependencies(module_path):
37 logging.info('Finding Python dependencies of %s' % module_path) 38 logging.info('Finding Python dependencies of %s' % module_path)
38 39
39 sys_path = sys.path 40 sys_path = sys.path
40 sys.path = list(sys_path) 41 sys.path = list(sys_path)
41 try: 42 try:
42 # Load the module to inherit its sys.path modifications. 43 # Load the module to inherit its sys.path modifications.
(...skipping 14 matching lines...) Expand all
57 _, incoming_edges = graph.get_edges(node) 58 _, incoming_edges = graph.get_edges(node)
58 message = 'Discovered %s (Imported by: %s)' % ( 59 message = 'Discovered %s (Imported by: %s)' % (
59 node.filename, ', '.join( 60 node.filename, ', '.join(
60 d.filename for d in incoming_edges 61 d.filename for d in incoming_edges
61 if d is not None and d.filename is not None)) 62 if d is not None and d.filename is not None))
62 logging.info(message) 63 logging.info(message)
63 64
64 # This check is done after the logging/printing above to make sure that 65 # This check is done after the logging/printing above to make sure that
65 # we also print out the dependency edges that include python packages 66 # we also print out the dependency edges that include python packages
66 # that are not in chromium. 67 # that are not in chromium.
67 if not path.IsSubpath(module_path, path.GetChromiumSrcDir()): 68 if not path.IsSubpath(module_path, path_util.GetChromiumSrcDir()):
68 continue 69 continue
69 70
70 yield module_path 71 yield module_path
71 if node.packagepath is not None: 72 if node.packagepath is not None:
72 for p in node.packagepath: 73 for p in node.packagepath:
73 yield p 74 yield p
74 75
75 finally: 76 finally:
76 sys.path = sys_path 77 sys.path = sys_path
77 78
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
142 for target_path in target_paths: 143 for target_path in target_paths:
143 if not os.path.exists(target_path): 144 if not os.path.exists(target_path):
144 raise ValueError('Path does not exist: %s' % target_path) 145 raise ValueError('Path does not exist: %s' % target_path)
145 146
146 dependencies = path_set.PathSet() 147 dependencies = path_set.PathSet()
147 148
148 # Including Telemetry's major entry points will (hopefully) include Telemetry 149 # Including Telemetry's major entry points will (hopefully) include Telemetry
149 # and all its dependencies. If the user doesn't pass any arguments, we just 150 # and all its dependencies. If the user doesn't pass any arguments, we just
150 # have Telemetry. 151 # have Telemetry.
151 dependencies |= FindPythonDependencies(os.path.realpath( 152 dependencies |= FindPythonDependencies(os.path.realpath(
152 os.path.join(path.GetTelemetryDir(), 'telemetry', 'benchmark_runner.py'))) 153 os.path.join(path_util.GetTelemetryDir(),
154 'telemetry', 'benchmark_runner.py')))
153 dependencies |= FindPythonDependencies(os.path.realpath( 155 dependencies |= FindPythonDependencies(os.path.realpath(
154 os.path.join(path.GetTelemetryDir(), 156 os.path.join(path_util.GetTelemetryDir(),
155 'telemetry', 'testing', 'run_tests.py'))) 157 'telemetry', 'testing', 'run_tests.py')))
156 158
157 # Add dependencies. 159 # Add dependencies.
158 for target_path in target_paths: 160 for target_path in target_paths:
159 base_dir = os.path.dirname(os.path.realpath(target_path)) 161 base_dir = os.path.dirname(os.path.realpath(target_path))
160 162
161 dependencies.add(base_dir) 163 dependencies.add(base_dir)
162 dependencies |= FindBootstrapDependencies(base_dir) 164 dependencies |= FindBootstrapDependencies(base_dir)
163 dependencies |= FindPythonDependencies(target_path) 165 dependencies |= FindPythonDependencies(target_path)
164 if options.include_page_set_data: 166 if options.include_page_set_data:
165 dependencies |= FindPageSetDependencies(base_dir) 167 dependencies |= FindPageSetDependencies(base_dir)
166 168
167 # Remove excluded files. 169 # Remove excluded files.
168 dependencies -= FindExcludedFiles(set(dependencies), options) 170 dependencies -= FindExcludedFiles(set(dependencies), options)
169 171
170 return dependencies 172 return dependencies
171 173
172 174
173 def ZipDependencies(target_paths, dependencies, options): 175 def ZipDependencies(target_paths, dependencies, options):
174 base_dir = os.path.dirname(os.path.realpath(path.GetChromiumSrcDir())) 176 base_dir = os.path.dirname(os.path.realpath(path_util.GetChromiumSrcDir()))
175 177
176 with zipfile.ZipFile(options.zip, 'w', zipfile.ZIP_DEFLATED) as zip_file: 178 with zipfile.ZipFile(options.zip, 'w', zipfile.ZIP_DEFLATED) as zip_file:
177 # Add dependencies to archive. 179 # Add dependencies to archive.
178 for dependency_path in dependencies: 180 for dependency_path in dependencies:
179 path_in_archive = os.path.join( 181 path_in_archive = os.path.join(
180 'telemetry', os.path.relpath(dependency_path, base_dir)) 182 'telemetry', os.path.relpath(dependency_path, base_dir))
181 zip_file.write(dependency_path, path_in_archive) 183 zip_file.write(dependency_path, path_in_archive)
182 184
183 # Add symlinks to executable paths, for ease of use. 185 # Add symlinks to executable paths, for ease of use.
184 for target_path in target_paths: 186 for target_path in target_paths:
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
232 234
233 def Run(self, args): 235 def Run(self, args):
234 target_paths = args.positional_args 236 target_paths = args.positional_args
235 dependencies = FindDependencies(target_paths, args) 237 dependencies = FindDependencies(target_paths, args)
236 if args.zip: 238 if args.zip:
237 ZipDependencies(target_paths, dependencies, args) 239 ZipDependencies(target_paths, dependencies, args)
238 print 'Zip archive written to %s.' % args.zip 240 print 'Zip archive written to %s.' % args.zip
239 else: 241 else:
240 print '\n'.join(sorted(dependencies)) 242 print '\n'.join(sorted(dependencies))
241 return 0 243 return 0
OLDNEW
« no previous file with comments | « tools/perf/core/bootstrap.py ('k') | tools/perf/core/find_dependencies_unittest.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698