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

Side by Side Diff: tools/bisect-perf-regression.py

Issue 538093002: Restrict windows dead zone revisions from bisect. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 3 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 | « no previous file | 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 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright (c) 2013 The Chromium Authors. All rights reserved. 2 # Copyright (c) 2013 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 """Performance Test Bisect Tool 6 """Performance Test Bisect Tool
7 7
8 This script bisects a series of changelists using binary search. It starts at 8 This script bisects a series of changelists using binary search. It starts at
9 a bad revision where a performance metric has regressed, and asks for a last 9 a bad revision where a performance metric has regressed, and asks for a last
10 known-good revision. It will then binary search across this revision range by 10 known-good revision. It will then binary search across this revision range by
(...skipping 2224 matching lines...) Expand 10 before | Expand all | Expand 10 after
2235 2235
2236 cmd = ['log', '--format=%ct', '-1', bad_revision] 2236 cmd = ['log', '--format=%ct', '-1', bad_revision]
2237 output = bisect_utils.CheckRunGit(cmd, cwd=cwd) 2237 output = bisect_utils.CheckRunGit(cmd, cwd=cwd)
2238 bad_commit_time = int(output) 2238 bad_commit_time = int(output)
2239 2239
2240 return good_commit_time <= bad_commit_time 2240 return good_commit_time <= bad_commit_time
2241 else: 2241 else:
2242 # CrOS and SVN use integers. 2242 # CrOS and SVN use integers.
2243 return int(good_revision) <= int(bad_revision) 2243 return int(good_revision) <= int(bad_revision)
2244 2244
2245 def CanPerformBisect(self, revision_to_check): 2245 def CanPerformBisect(self, good_revision, bad_revision):
2246 """Checks whether a given revision is bisectable. 2246 """Checks whether a given revision is bisectable.
2247 2247
2248 Note: At present it checks whether a given revision is bisectable on 2248 Checks for following:
2249 android bots(refer crbug.com/385324). 2249 1. Non-bisectable revsions for android bots (refer to crbug.com/385324).
2250 2. Non-bisectable revsions for Windows bots (refer to crbug.com/405274).
2250 2251
2251 Args: 2252 Args:
2252 revision_to_check: Known good revision. 2253 good_revision: Known good revision.
2254 bad_revision: Known bad revision.
2253 2255
2254 Returns: 2256 Returns:
2255 A dictionary indicating the result. If revision is not bisectable, 2257 A dictionary indicating the result. If revision is not bisectable,
2256 this will contain the field "error", otherwise None. 2258 this will contain the field "error", otherwise None.
2257 """ 2259 """
2258 if self.opts.target_platform == 'android': 2260 if self.opts.target_platform == 'android':
2259 revision_to_check = self.source_control.SVNFindRev(revision_to_check) 2261 revision_to_check = self.source_control.SVNFindRev(good_revision)
2260 if (bisect_utils.IsStringInt(revision_to_check) 2262 if (bisect_utils.IsStringInt(good_revision)
2261 and revision_to_check < 265549): 2263 and good_revision < 265549):
2262 return {'error': ( 2264 return {'error': (
2263 'Bisect cannot continue for the given revision range.\n' 2265 'Bisect cannot continue for the given revision range.\n'
2264 'It is impossible to bisect Android regressions ' 2266 'It is impossible to bisect Android regressions '
2265 'prior to r265549, which allows the bisect bot to ' 2267 'prior to r265549, which allows the bisect bot to '
2266 'rely on Telemetry to do apk installation of the most recently ' 2268 'rely on Telemetry to do apk installation of the most recently '
2267 'built local ChromeShell(refer to crbug.com/385324).\n' 2269 'built local ChromeShell(refer to crbug.com/385324).\n'
2268 'Please try bisecting revisions greater than or equal to r265549.')} 2270 'Please try bisecting revisions greater than or equal to r265549.')}
2271
2272 if bisect_utils.IsWindowsHost():
2273 good_revision = self.source_control.SVNFindRev(good_revision)
2274 bad_revision = self.source_control.SVNFindRev(bad_revision)
2275 if (bisect_utils.IsStringInt(good_revision) and
2276 bisect_utils.IsStringInt(bad_revision)):
2277 if (289987 <= good_revision < 290716 or
2278 289987 <= bad_revision < 290716):
2279 return {'error': ('Oops! Revision between r289987 and r290716 are '
2280 'marked as dead zone for Windows due to '
2281 'crbug.com/405274. Please try another range.')}
2282
2269 return None 2283 return None
2270 2284
2271 def Run(self, command_to_run, bad_revision_in, good_revision_in, metric): 2285 def Run(self, command_to_run, bad_revision_in, good_revision_in, metric):
2272 """Given known good and bad revisions, run a binary search on all 2286 """Given known good and bad revisions, run a binary search on all
2273 intermediate revisions to determine the CL where the performance regression 2287 intermediate revisions to determine the CL where the performance regression
2274 occurred. 2288 occurred.
2275 2289
2276 Args: 2290 Args:
2277 command_to_run: Specify the command to execute the performance test. 2291 command_to_run: Specify the command to execute the performance test.
2278 good_revision: Number/tag of the known good revision. 2292 good_revision: Number/tag of the known good revision.
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
2345 if not self.CheckIfRevisionsInProperOrder( 2359 if not self.CheckIfRevisionsInProperOrder(
2346 target_depot, good_revision, bad_revision): 2360 target_depot, good_revision, bad_revision):
2347 results['error'] = ('bad_revision < good_revision, did you swap these ' 2361 results['error'] = ('bad_revision < good_revision, did you swap these '
2348 'by mistake?') 2362 'by mistake?')
2349 return results 2363 return results
2350 bad_revision, good_revision = self.NudgeRevisionsIfDEPSChange( 2364 bad_revision, good_revision = self.NudgeRevisionsIfDEPSChange(
2351 bad_revision, good_revision, good_revision_in) 2365 bad_revision, good_revision, good_revision_in)
2352 if self.opts.output_buildbot_annotations: 2366 if self.opts.output_buildbot_annotations:
2353 bisect_utils.OutputAnnotationStepStart('Gathering Revisions') 2367 bisect_utils.OutputAnnotationStepStart('Gathering Revisions')
2354 2368
2355 cannot_bisect = self.CanPerformBisect(good_revision) 2369 cannot_bisect = self.CanPerformBisect(good_revision, bad_revision)
2356 if cannot_bisect: 2370 if cannot_bisect:
2357 results['error'] = cannot_bisect.get('error') 2371 results['error'] = cannot_bisect.get('error')
2358 return results 2372 return results
2359 2373
2360 print 'Gathering revision range for bisection.' 2374 print 'Gathering revision range for bisection.'
2361 # Retrieve a list of revisions to do bisection on. 2375 # Retrieve a list of revisions to do bisection on.
2362 src_revision_list = self.GetRevisionList( 2376 src_revision_list = self.GetRevisionList(
2363 target_depot, bad_revision, good_revision) 2377 target_depot, bad_revision, good_revision)
2364 2378
2365 if self.opts.output_buildbot_annotations: 2379 if self.opts.output_buildbot_annotations:
(...skipping 993 matching lines...) Expand 10 before | Expand all | Expand 10 after
3359 # bugs. If you change this, please update the perf dashboard as well. 3373 # bugs. If you change this, please update the perf dashboard as well.
3360 bisect_utils.OutputAnnotationStepStart('Results') 3374 bisect_utils.OutputAnnotationStepStart('Results')
3361 print 'Error: %s' % e.message 3375 print 'Error: %s' % e.message
3362 if opts.output_buildbot_annotations: 3376 if opts.output_buildbot_annotations:
3363 bisect_utils.OutputAnnotationStepClosed() 3377 bisect_utils.OutputAnnotationStepClosed()
3364 return 1 3378 return 1
3365 3379
3366 3380
3367 if __name__ == '__main__': 3381 if __name__ == '__main__':
3368 sys.exit(main()) 3382 sys.exit(main())
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698