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

Unified Diff: tools/auto_bisect/bisect_state.py

Issue 664753002: Refactored auto_bisect bot (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git/+/master
Patch Set: Rebase 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tools/auto_bisect/bisect_results_test.py ('k') | tools/auto_bisect/bisect_state_test.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/auto_bisect/bisect_state.py
diff --git a/tools/auto_bisect/bisect_state.py b/tools/auto_bisect/bisect_state.py
new file mode 100644
index 0000000000000000000000000000000000000000..f5d745115dc56c52e4a9e8423b286dd6e2c3a9e1
--- /dev/null
+++ b/tools/auto_bisect/bisect_state.py
@@ -0,0 +1,99 @@
+# Copyright 2014 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+
+class RevisionState(object):
+ """Contains bisect state for a given revision.
+
+ Properties:
+ depot: The depot that this revision is from (e.g. WebKit).
+ revision: Revision number (Git hash or SVN number).
+ index: Position of the state in the list of all revisions.
+ value: Value(s) returned from the test.
+ perf_time: Time that a test took.
+ build_time: Time that a build took.
+ passed: Represents whether the performance test was successful at that
+ revision. Possible values include: 1 (passed), 0 (failed),
+ '?' (skipped), 'F' (build failed).
+ external: If the revision is a 'src' revision, 'external' contains the
+ revisions of each of the external libraries.
+ """
+
+ def __init__(self, depot, revision, index):
+ self.depot = depot
+ self.revision = revision
+ self.index = index
+ self.value = None
+ self.perf_time = 0
+ self.build_time = 0
+ self.passed = '?'
+ self.external = None
+
+ # TODO(sergiyb): Update() to parse run_results from the RunTest.
+
+
+class BisectState(object):
+ """Represents a state of the bisect as a collection of revision states."""
+
+ def __init__(self, depot, revisions):
+ """Initializes a new BisectState object with a set of revision states.
+
+ Args:
+ depot: Name of the depot used for initial set of revision states.
+ revisions: List of revisions used for initial set of revision states.
+ """
+ self.revision_states = []
+ self.revision_index = {}
+
+ index = 0
+ for revision in revisions:
+ new_state = self._InitRevisionState(depot, revision, index)
+ self.revision_states.append(new_state)
+ index += 1
+
+ @staticmethod
+ def _RevisionKey(depot, revision):
+ return "%s:%s" % (depot, revision)
+
+ def _InitRevisionState(self, depot, revision, index):
+ key = self._RevisionKey(depot, revision)
+ self.revision_index[key] = index
+ return RevisionState(depot, revision, index)
+
+ def GetRevisionState(self, depot, revision):
+ """Returns a mutable revision state."""
+ key = self._RevisionKey(depot, revision)
+ index = self.revision_index.get(key)
+ return self.revision_states[index] if index else None
+
+ def CreateRevisionStatesAfter(self, depot, revisions, reference_depot,
+ reference_revision):
+ """Creates a set of new revision states after a specified reference state.
+
+ Args:
+ depot: Name of the depot for the new revision states.
+ revisions: List of revisions for the new revision states.
+ reference_depot: Name of the depot for the reference revision state.
+ reference_revision: Revision for the reference revision state.
+
+ Returns:
+ A list containing all created revision states in order as they were added.
+ """
+ ref_key = self._RevisionKey(reference_depot, reference_revision)
+ ref_index = self.revision_index[ref_key]
+ num_new_revisions = len(revisions)
+ for entry in self.revision_states:
+ if entry.index > ref_index:
+ entry.index += num_new_revisions
+
+ first_index = ref_index + 1
+ for index, revision in enumerate(revisions, start=first_index):
+ new_state = self._InitRevisionState(depot, revision, index)
+ self.revision_states.insert(index, new_state)
+
+ return self.revision_states[first_index:first_index + num_new_revisions]
+
+ def GetRevisionStates(self):
+ """Returns a copy of the list of the revision states."""
+ return list(self.revision_states)
« no previous file with comments | « tools/auto_bisect/bisect_results_test.py ('k') | tools/auto_bisect/bisect_state_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698