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

Side by Side Diff: tools/auto_bisect/fetch_build.py

Issue 866573003: Add builder_type to fetch builds for android-chrome. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 11 months 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/auto_bisect/bisect_perf_regression_test.py ('k') | no next file » | 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 """This module contains functions for fetching and extracting archived builds. 5 """This module contains functions for fetching and extracting archived builds.
6 6
7 The builds may be stored in different places by different types of builders; 7 The builds may be stored in different places by different types of builders;
8 for example, builders on tryserver.chromium.perf stores builds in one place, 8 for example, builders on tryserver.chromium.perf stores builds in one place,
9 while builders on chromium.linux store builds in another. 9 while builders on chromium.linux store builds in another.
10 10
(...skipping 12 matching lines...) Expand all
23 import zipfile 23 import zipfile
24 24
25 # Telemetry (src/tools/telemetry) is expected to be in the PYTHONPATH. 25 # Telemetry (src/tools/telemetry) is expected to be in the PYTHONPATH.
26 from telemetry.util import cloud_storage 26 from telemetry.util import cloud_storage
27 27
28 import bisect_utils 28 import bisect_utils
29 29
30 # Possible builder types. 30 # Possible builder types.
31 PERF_BUILDER = 'perf' 31 PERF_BUILDER = 'perf'
32 FULL_BUILDER = 'full' 32 FULL_BUILDER = 'full'
33 ANDROID_CHROME_PERF_BUILDER = 'android-chrome-perf'
33 34
34 35
35 def GetBucketAndRemotePath(revision, builder_type=PERF_BUILDER, 36 def GetBucketAndRemotePath(revision, builder_type=PERF_BUILDER,
36 target_arch='ia32', target_platform='chromium', 37 target_arch='ia32', target_platform='chromium',
37 deps_patch_sha=None): 38 deps_patch_sha=None, extra_src=None):
38 """Returns the location where a build archive is expected to be. 39 """Returns the location where a build archive is expected to be.
39 40
40 Args: 41 Args:
41 revision: Revision string, e.g. a git commit hash or SVN revision. 42 revision: Revision string, e.g. a git commit hash or SVN revision.
42 builder_type: Type of build archive. 43 builder_type: Type of build archive.
43 target_arch: Architecture, e.g. "ia32". 44 target_arch: Architecture, e.g. "ia32".
44 target_platform: Platform name, e.g. "chromium" or "android". 45 target_platform: Platform name, e.g. "chromium" or "android".
45 deps_patch_sha: SHA1 hash which identifies a particular combination of 46 deps_patch_sha: SHA1 hash which identifies a particular combination of
46 custom revisions for dependency repositories. 47 custom revisions for dependency repositories.
48 extra_src: Path to a script which can be used to modify the bisect script's
49 behavior.
47 50
48 Returns: 51 Returns:
49 A pair of strings (bucket, path), where the archive is expected to be. 52 A pair of strings (bucket, path), where the archive is expected to be.
50 """ 53 """
51 build_archive = BuildArchive.Create( 54 build_archive = BuildArchive.Create(
52 builder_type, target_arch=target_arch, target_platform=target_platform) 55 builder_type, target_arch=target_arch, target_platform=target_platform,
56 extra_src=extra_src)
53 bucket = build_archive.BucketName() 57 bucket = build_archive.BucketName()
54 remote_path = build_archive.FilePath(revision, deps_patch_sha=deps_patch_sha) 58 remote_path = build_archive.FilePath(revision, deps_patch_sha=deps_patch_sha)
55 return bucket, remote_path 59 return bucket, remote_path
56 60
57 61
58 class BuildArchive(object): 62 class BuildArchive(object):
59 """Represents a place where builds of some type are stored. 63 """Represents a place where builds of some type are stored.
60 64
61 There are two pieces of information required to locate a file in Google 65 There are two pieces of information required to locate a file in Google
62 Cloud Storage, bucket name and file path. Subclasses of this class contain 66 Cloud Storage, bucket name and file path. Subclasses of this class contain
63 specific logic about which bucket names and paths should be used to fetch 67 specific logic about which bucket names and paths should be used to fetch
64 a build. 68 a build.
65 """ 69 """
66 70
67 @staticmethod 71 @staticmethod
68 def Create(builder_type, target_arch='ia32', target_platform='chromium'): 72 def Create(builder_type, target_arch='ia32', target_platform='chromium',
73 extra_src=None):
69 if builder_type == PERF_BUILDER: 74 if builder_type == PERF_BUILDER:
70 return PerfBuildArchive(target_arch, target_platform) 75 return PerfBuildArchive(target_arch, target_platform)
71 if builder_type == FULL_BUILDER: 76 if builder_type == FULL_BUILDER:
72 return FullBuildArchive(target_arch, target_platform) 77 return FullBuildArchive(target_arch, target_platform)
78 if builder_type == ANDROID_CHROME_PERF_BUILDER:
79 try:
80 extra_src = bisect_utils.LoadExtraSrc(extra_src)
RobertoCN 2015/01/21 23:15:19 I think it would be more readable if we used an ad
prasadv 2015/01/23 18:05:57 Done.
81 return AndroidChromeBuildArchive(
82 target_arch, target_platform, extra_src)
83 except (IOError, TypeError, ImportError):
84 raise RuntimeError('Invalid or missing --extra_src.')
qyearsley 2015/01/26 17:50:32 [Optional] In the case of a failure, it may be use
prasadv 2015/01/26 18:58:26 Done.
73 raise NotImplementedError('Builder type "%s" not supported.' % builder_type) 85 raise NotImplementedError('Builder type "%s" not supported.' % builder_type)
74 86
75 def __init__(self, target_arch='ia32', target_platform='chromium'): 87 def __init__(self, target_arch='ia32', target_platform='chromium',
88 extra_src=None):
89 self._extra_src = extra_src
76 if bisect_utils.IsLinuxHost() and target_platform == 'android': 90 if bisect_utils.IsLinuxHost() and target_platform == 'android':
77 self._platform = 'android' 91 self._platform = 'android'
78 elif bisect_utils.IsLinuxHost(): 92 elif bisect_utils.IsLinuxHost():
79 self._platform = 'linux' 93 self._platform = 'linux'
80 elif bisect_utils.IsMacHost(): 94 elif bisect_utils.IsMacHost():
81 self._platform = 'mac' 95 self._platform = 'mac'
82 elif bisect_utils.Is64BitWindows() and target_arch == 'x64': 96 elif bisect_utils.Is64BitWindows() and target_arch == 'x64':
83 self._platform = 'win64' 97 self._platform = 'win64'
84 elif bisect_utils.IsWindowsHost(): 98 elif bisect_utils.IsWindowsHost():
85 self._platform = 'win' 99 self._platform = 'win'
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
180 'android': 'android_main_rel', 194 'android': 'android_main_rel',
181 'linux': 'chromium.linux/Linux Builder', 195 'linux': 'chromium.linux/Linux Builder',
182 'mac': 'chromium.mac/Mac Builder', 196 'mac': 'chromium.mac/Mac Builder',
183 'win64': 'chromium.win/Win x64 Builder', 197 'win64': 'chromium.win/Win x64 Builder',
184 'win': 'chromium.win/Win Builder', 198 'win': 'chromium.win/Win Builder',
185 } 199 }
186 assert self._platform in platform_to_directory 200 assert self._platform in platform_to_directory
187 return platform_to_directory.get(self._platform) 201 return platform_to_directory.get(self._platform)
188 202
189 203
204 class AndroidChromeBuildArchive(BuildArchive):
qyearsley 2015/01/26 17:50:32 [Optional] It can be seen from the code below, but
prasadv 2015/01/26 18:58:26 Done.
205
206 def BucketName(self):
207 return self._extra_src.GetBucketName()
208
209 def _ZipFileName(self, revision, deps_patch_sha=None):
210 """Gets the file name of a zip archive on android-chrome.
211
212 This returns a file name of the form build_product_<revision>.zip,
213 which is a format used by android-chrome.
214
215 Args:
216 revision: A git commit hash or other revision string.
217 deps_patch_sha: SHA1 hash of a DEPS file patch.
218
219 Returns:
220 The archive file name.
221 """
222 if deps_patch_sha:
223 revision = '%s_%s' % (revision, deps_patch_sha)
224 return 'build_product_%s.zip' % revision
225
226 def FilePath(self, revision, deps_patch_sha=None):
227 return '%s/%s' % (self._ArchiveDirectory(),
228 self._ZipFileName(revision, deps_patch_sha))
229
230 def _ArchiveDirectory(self):
231 """Returns the directory name to download builds from."""
232 return self._extra_src.GetArchiveDirectory()
233
234
190 def BuildIsAvailable(bucket_name, remote_path): 235 def BuildIsAvailable(bucket_name, remote_path):
191 """Checks whether a build is currently archived at some place.""" 236 """Checks whether a build is currently archived at some place."""
192 logging.info('Checking existance: gs://%s/%s' % (bucket_name, remote_path)) 237 logging.info('Checking existance: gs://%s/%s' % (bucket_name, remote_path))
193 try: 238 try:
194 exists = cloud_storage.Exists(bucket_name, remote_path) 239 exists = cloud_storage.Exists(bucket_name, remote_path)
195 logging.info('Exists? %s' % exists) 240 logging.info('Exists? %s' % exists)
196 return exists 241 return exists
197 except cloud_storage.CloudStorageError: 242 except cloud_storage.CloudStorageError:
198 return False 243 return False
199 244
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
355 return 1 400 return 1
356 401
357 FetchFromCloudStorage(bucket_name, remote_path, args.output_dir) 402 FetchFromCloudStorage(bucket_name, remote_path, args.output_dir)
358 print 'Build has been downloaded to and extracted in %s.' % args.output_dir 403 print 'Build has been downloaded to and extracted in %s.' % args.output_dir
359 return 0 404 return 0
360 405
361 406
362 if __name__ == '__main__': 407 if __name__ == '__main__':
363 sys.exit(Main(sys.argv)) 408 sys.exit(Main(sys.argv))
364 409
OLDNEW
« no previous file with comments | « tools/auto_bisect/bisect_perf_regression_test.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698