2 # Copyright (c) 2015 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file.
6 """This module fetches and prints the dependencies given a benchmark."""
11 sys
.path
.append(os
.path
.join(os
.path
.dirname(__file__
), os
.pardir
, 'telemetry'))
13 from catapult_base
import cloud_storage
14 from telemetry
import benchmark_runner
17 def _GetPerfDir(*subdirs
):
18 perf_dir
= os
.path
.realpath(os
.path
.dirname(__file__
))
19 return os
.path
.join(perf_dir
, *subdirs
)
23 return _GetPerfDir(os
.path
.pardir
, os
.path
.pardir
, os
.path
.pardir
)
26 def _FetchDependenciesIfNeeded(story_set
):
27 """ Download files needed by a user story set. """
28 # Download files in serving_dirs.
29 serving_dirs
= story_set
.serving_dirs
30 for directory
in serving_dirs
:
31 cloud_storage
.GetFilesInDirectoryIfChanged(directory
, story_set
.bucket
)
34 if any(not story
.is_local
for story
in story_set
):
35 story_set
.wpr_archive_info
.DownloadArchivesIfNeeded()
38 def _EnumerateDependencies(story_set
):
39 """ Enumerate pathes of files needed by a user story set. """
42 for story
in story_set
:
43 deps
.add(story_set
.WprFilePathForStory(story
))
45 # Enumerate files in serving_dirs
46 for directory
in story_set
.serving_dirs
:
47 if not os
.path
.isdir(directory
):
48 raise ValueError('Must provide a valid directory.')
49 # Don't allow the root directory to be a serving_dir.
50 if directory
== os
.path
.abspath(os
.sep
):
51 raise ValueError('Trying to serve root directory from HTTP server.')
52 for dirpath
, _
, filenames
in os
.walk(directory
):
53 for filename
in filenames
:
54 path_name
, extension
= os
.path
.splitext(
55 os
.path
.join(dirpath
, filename
))
56 if extension
== '.sha1':
59 # Return relative pathes.
60 prefix_len
= len(os
.path
.realpath(GetChromiumDir())) + 1
61 return [dep
[prefix_len
:] for dep
in deps
if dep
]
65 print ('Usage: %s benchmark_name\n'
66 'Fetch the dependencies of benchmark_name.' % sys
.argv
[0])
69 def main(output
=sys
.stdout
):
70 config
= benchmark_runner
.ProjectConfig(
71 top_level_dir
=_GetPerfDir(),
72 benchmark_dirs
=[_GetPerfDir('benchmarks')])
75 benchmark
= benchmark_runner
.GetBenchmarkByName(name
, config
)
77 raise ValueError('No such benchmark: %s' % name
)
79 # Download files according to specified benchmark.
80 story_set
= benchmark().CreateStorySet(None)
82 _FetchDependenciesIfNeeded(story_set
)
84 # Print files downloaded.
85 deps
= _EnumerateDependencies(story_set
)
90 if __name__
== '__main__':
91 if len(sys
.argv
) != 2 or sys
.argv
[1][0] == '-':