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

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

Issue 650223005: Refactor source_control.py and add a test. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebased Created 6 years, 2 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') | tools/auto_bisect/source_control.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 math 5 import math
6 import os 6 import os
7 7
8 import bisect_utils 8 import bisect_utils
9 import math_utils 9 import math_utils
10 import source_control
10 import ttest 11 import ttest
11 12
12 13
13 def ConfidenceScore(good_results_lists, bad_results_lists): 14 def ConfidenceScore(good_results_lists, bad_results_lists):
14 """Calculates a confidence score. 15 """Calculates a confidence score.
15 16
16 This score is a percentage which represents our degree of confidence in the 17 This score is a percentage which represents our degree of confidence in the
17 proposition that the good results and bad results are distinct groups, and 18 proposition that the good results and bad results are distinct groups, and
18 their differences aren't due to chance alone. 19 their differences aren't due to chance alone.
19 20
(...skipping 21 matching lines...) Expand all
41 return 0.0 42 return 0.0
42 43
43 # The p-value is approximately the probability of obtaining the given set 44 # The p-value is approximately the probability of obtaining the given set
44 # of good and bad values just by chance. 45 # of good and bad values just by chance.
45 _, _, p_value = ttest.WelchsTTest(sample1, sample2) 46 _, _, p_value = ttest.WelchsTTest(sample1, sample2)
46 return 100.0 * (1.0 - p_value) 47 return 100.0 * (1.0 - p_value)
47 48
48 49
49 class BisectResults(object): 50 class BisectResults(object):
50 51
51 def __init__(self, depot_registry, source_control): 52 def __init__(self, depot_registry):
52 self._depot_registry = depot_registry 53 self._depot_registry = depot_registry
53 self.revision_data = {} 54 self.revision_data = {}
54 self.error = None 55 self.error = None
55 self._source_control = source_control
56 56
57 @staticmethod 57 @staticmethod
58 def _FindOtherRegressions(revision_data_sorted, bad_greater_than_good): 58 def _FindOtherRegressions(revision_data_sorted, bad_greater_than_good):
59 """Compiles a list of other possible regressions from the revision data. 59 """Compiles a list of other possible regressions from the revision data.
60 60
61 Args: 61 Args:
62 revision_data_sorted: Sorted list of (revision, revision data) pairs. 62 revision_data_sorted: Sorted list of (revision, revision data) pairs.
63 bad_greater_than_good: Whether the result value at the "bad" revision is 63 bad_greater_than_good: Whether the result value at the "bad" revision is
64 numerically greater than the result value at the "good" revision. 64 numerically greater than the result value at the "good" revision.
65 65
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
225 # <SHA1> 225 # <SHA1>
226 # etc. 226 # etc.
227 if l[0] == '/': 227 if l[0] == '/':
228 last_depot = l 228 last_depot = l
229 else: 229 else:
230 contents = l.split(' ') 230 contents = l.split(' ')
231 if len(contents) > 1: 231 if len(contents) > 1:
232 changes.append([last_depot, contents[0]]) 232 changes.append([last_depot, contents[0]])
233 for c in changes: 233 for c in changes:
234 os.chdir(c[0]) 234 os.chdir(c[0])
235 info = self._source_control.QueryRevisionInfo(c[1]) 235 info = source_control.QueryRevisionInfo(c[1])
236 culprit_revisions.append((c[1], info, None)) 236 culprit_revisions.append((c[1], info, None))
237 else: 237 else:
238 for i in xrange(last_broken_revision_index, len(revision_data_sorted)): 238 for i in xrange(last_broken_revision_index, len(revision_data_sorted)):
239 k, v = revision_data_sorted[i] 239 k, v = revision_data_sorted[i]
240 if k == first_working_revision: 240 if k == first_working_revision:
241 break 241 break
242 self._depot_registry.ChangeToDepotDir(v['depot']) 242 self._depot_registry.ChangeToDepotDir(v['depot'])
243 info = self._source_control.QueryRevisionInfo(k) 243 info = source_control.QueryRevisionInfo(k)
244 culprit_revisions.append((k, info, v['depot'])) 244 culprit_revisions.append((k, info, v['depot']))
245 os.chdir(cwd) 245 os.chdir(cwd)
246 246
247 # Check for any other possible regression ranges. 247 # Check for any other possible regression ranges.
248 other_regressions = self._FindOtherRegressions( 248 other_regressions = self._FindOtherRegressions(
249 revision_data_sorted, mean_of_bad_runs > mean_of_good_runs) 249 revision_data_sorted, mean_of_bad_runs > mean_of_good_runs)
250 250
251 return { 251 return {
252 'first_working_revision': first_working_revision, 252 'first_working_revision': first_working_revision,
253 'last_broken_revision': last_broken_revision, 253 'last_broken_revision': last_broken_revision,
254 'culprit_revisions': culprit_revisions, 254 'culprit_revisions': culprit_revisions,
255 'other_regressions': other_regressions, 255 'other_regressions': other_regressions,
256 'regression_size': regression_size, 256 'regression_size': regression_size,
257 'regression_std_err': regression_std_err, 257 'regression_std_err': regression_std_err,
258 'confidence': confidence, 258 'confidence': confidence,
259 'revision_data_sorted': revision_data_sorted 259 'revision_data_sorted': revision_data_sorted
260 } 260 }
OLDNEW
« no previous file with comments | « tools/auto_bisect/bisect_perf_regression_test.py ('k') | tools/auto_bisect/source_control.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698