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

Unified Diff: scripts/slave/recipe_modules/auto_bisect/revision_state.py

Issue 1610203003: Iteratively increase sample size for good/bad classification. (Closed) Base URL: https://chromium.googlesource.com/chromium/tools/build.git@master
Patch Set: Rebasing Created 4 years, 10 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 side-by-side diff with in-line comments
Download patch
Index: scripts/slave/recipe_modules/auto_bisect/revision_state.py
diff --git a/scripts/slave/recipe_modules/auto_bisect/revision_state.py b/scripts/slave/recipe_modules/auto_bisect/revision_state.py
index 24cb7f5fe404845449c843451ea68fc26414cca6..3b85b48d8eb97a3d91084541cb3e4c735a6a5d52 100644
--- a/scripts/slave/recipe_modules/auto_bisect/revision_state.py
+++ b/scripts/slave/recipe_modules/auto_bisect/revision_state.py
@@ -31,7 +31,10 @@ class RevisionState(object):
SKIPPED, # A revision that was not built or tested for a special reason,
# such as those ranges that we know are broken, or when nudging
# revisions.
- ) = xrange(7)
+ NEED_MORE_DATA, # Current number of test values is too small to establish
+ # a statistically significant difference between this
+ # revision and the revisions known to be good and bad.
+ ) = xrange(8)
def __init__(self, revision_string, bisector,
dependency_depot_name=None, base_revision=None,
@@ -111,11 +114,12 @@ class RevisionState(object):
@property
def tested(self):
- return self.status in [RevisionState.TESTED]
+ return self.status in (RevisionState.TESTED,)
@property
def in_progress(self):
- return self.status in (RevisionState.BUILDING, RevisionState.TESTING)
+ return self.status in (RevisionState.BUILDING, RevisionState.TESTING,
+ RevisionState.NEED_MORE_DATA)
@property
def failed(self):
@@ -148,8 +152,9 @@ class RevisionState(object):
self.status = RevisionState.BUILDING
return
- if self._is_build_archived() and self.status in [RevisionState.NEW,
- RevisionState.BUILDING]:
+ if self._is_build_archived() and self.status in (
+ RevisionState.NEW, RevisionState.BUILDING,
+ RevisionState.NEED_MORE_DATA):
self._do_test()
self.status = RevisionState.TESTING
@@ -247,11 +252,16 @@ class RevisionState(object):
"""
if self.status == RevisionState.BUILDING and self._is_build_archived():
self.start_job()
- elif self.status == RevisionState.TESTING and self._results_available():
- self._read_test_results()
+ elif (self.status in (RevisionState.TESTING, RevisionState.NEED_MORE_DATA)
+ and self._results_available()):
+ # If we have already decided whether the revision is good or bad we
+ # shouldn't check again
+ check_revision_goodness = not(self.good or self.bad)
+ self._read_test_results(
+ check_revision_goodness=check_revision_goodness)
# We assume _read_test_results may have changed the status to a broken
# state such as FAILED or ABORTED.
- if self.status == RevisionState.TESTING:
+ if self.status in (RevisionState.TESTING, RevisionState.NEED_MORE_DATA):
self.status = RevisionState.TESTED
def _is_build_archived(self):

Powered by Google App Engine
This is Rietveld 408576698