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

Unified Diff: tools/bisect-perf-regression_test.py

Issue 417013003: Move statistical functions in bisect script to their own module. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Respond to nit Created 6 years, 5 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/bisect-perf-regression.py ('k') | tools/run-bisect-perf-regression.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/bisect-perf-regression_test.py
diff --git a/tools/bisect-perf-regression_test.py b/tools/bisect-perf-regression_test.py
index 0d232af4b40b06a075a52059a45ee605bd1f1253..913a851bcd3e054898c7eb5167abeb3c44c0dcd5 100644
--- a/tools/bisect-perf-regression_test.py
+++ b/tools/bisect-perf-regression_test.py
@@ -5,10 +5,12 @@
import math
import unittest
+from auto_bisect import source_control as source_control_module
+
# Special import necessary because filename contains dash characters.
bisect_perf_module = __import__('bisect-perf-regression')
-
+# Sample output for a performance test used in the results parsing tests below.
RESULTS_OUTPUT = """RESULT write_operations: write_operations= 23089 count
RESULT read_bytes_gpu: read_bytes_gpu= 35201 kb
RESULT write_bytes_gpu: write_bytes_gpu= 542 kb
@@ -29,6 +31,37 @@ class BisectPerfRegressionTest(unittest.TestCase):
"""Cleans up the test environment after each test method."""
pass
+ def testConfidenceScore(self):
+ """Tests the confidence calculation."""
+ bad_values = [[0, 1], [1, 2]]
+ good_values = [[6, 7], [7, 8]]
+ # Closest means are mean(1, 2) and mean(6, 7).
+ distance = 6.5 - 1.5
+ # Standard deviation of [n-1, n, n, n+1] is 0.8165.
+ stddev_sum = 0.8165 + 0.8165
+ # Expected confidence is an int in the range [0, 100].
+ expected_confidence = min(100, int(100 * distance / float(stddev_sum)))
+ self.assertEqual(
+ expected_confidence,
+ bisect_perf_module.ConfidenceScore(bad_values, good_values))
+
+ def testConfidenceScoreZeroConfidence(self):
+ """Tests the confidence calculation when it's expected to be 0."""
+ bad_values = [[0, 1], [1, 2], [4, 5], [0, 2]]
+ good_values = [[4, 5], [6, 7], [7, 8]]
+ # Both groups have value lists with means of 4.5, which means distance
+ # between groups is zero, and thus confidence is zero.
+ self.assertEqual(
+ 0, bisect_perf_module.ConfidenceScore(bad_values, good_values))
+
+ def testConfidenceScoreMaxConfidence(self):
+ """Tests the confidence calculation when it's expected to be 100."""
+ bad_values = [[1, 1], [1, 1]]
+ good_values = [[1.2, 1.2], [1.2, 1.2]]
+ # Standard deviation in both groups is zero, so confidence is 100.
+ self.assertEqual(
+ 100, bisect_perf_module.ConfidenceScore(bad_values, good_values))
+
def testParseDEPSStringManually(self):
"""Tests DEPS parsing."""
bisect_options = bisect_perf_module.BisectOptions()
@@ -60,83 +93,6 @@ vars = {
deps_file_contents)
self.assertEqual(vars_dict, expected_vars_dict)
- def testCalculateTruncatedMeanRaisesError(self):
- """CalculateTrunctedMean raises an error when passed an empty list."""
- with self.assertRaises(TypeError):
- bisect_perf_module.CalculateTruncatedMean([], 0)
-
- def testCalculateMeanSingleNum(self):
- """Tests the CalculateMean function with a single number."""
- self.assertEqual(3.0, bisect_perf_module.CalculateMean([3]))
-
- def testCalculateMeanShortList(self):
- """Tests the CalculateMean function with a short list."""
- self.assertEqual(0.5, bisect_perf_module.CalculateMean([-3, 0, 1, 4]))
-
- def testCalculateMeanCompareAlternateImplementation(self):
- """Tests CalculateMean by comparing against an alternate implementation."""
- def AlternateMeanFunction(values):
- """Simple arithmetic mean function."""
- return sum(values) / float(len(values))
- test_values_lists = [[1], [5, 6.5, 1.2, 3], [-3, 0, 1, 4],
- [-3, -1, 0.12, 0.752, 3.33, 8, 16, 32, 439]]
- for values in test_values_lists:
- self.assertEqual(
- AlternateMeanFunction(values),
- bisect_perf_module.CalculateMean(values))
-
- def testCalculateConfidence(self):
- """Tests the confidence calculation."""
- bad_values = [[0, 1], [1, 2]]
- good_values = [[6, 7], [7, 8]]
- # Closest means are mean(1, 2) and mean(6, 7).
- distance = 6.5 - 1.5
- # Standard deviation of [n-1, n, n, n+1] is 0.8165.
- stddev_sum = 0.8165 + 0.8165
- # Expected confidence is an int in the range [0, 100].
- expected_confidence = min(100, int(100 * distance / float(stddev_sum)))
- self.assertEqual(
- expected_confidence,
- bisect_perf_module.CalculateConfidence(bad_values, good_values))
-
- def testCalculateConfidence0(self):
- """Tests the confidence calculation when it's expected to be 0."""
- bad_values = [[0, 1], [1, 2], [4, 5], [0, 2]]
- good_values = [[4, 5], [6, 7], [7, 8]]
- # Both groups have value lists with means of 4.5, which means distance
- # between groups is zero, and thus confidence is zero.
- self.assertEqual(
- 0, bisect_perf_module.CalculateConfidence(bad_values, good_values))
-
- def testCalculateConfidence100(self):
- """Tests the confidence calculation when it's expected to be 100."""
- bad_values = [[1, 1], [1, 1]]
- good_values = [[1.2, 1.2], [1.2, 1.2]]
- # Standard deviation in both groups is zero, so confidence is 100.
- self.assertEqual(
- 100, bisect_perf_module.CalculateConfidence(bad_values, good_values))
-
- def testCalculateRelativeChange(self):
- """Tests the common cases for calculating relative change."""
- # The change is relative to the first value, regardless of which is bigger.
- self.assertEqual(0.5, bisect_perf_module.CalculateRelativeChange(1.0, 1.5))
- self.assertEqual(0.5, bisect_perf_module.CalculateRelativeChange(2.0, 1.0))
-
- def testCalculateRelativeChangeFromZero(self):
- """Tests what happens when relative change from zero is calculated."""
- # If the first number is zero, then the result is not a number.
- self.assertEqual(0, bisect_perf_module.CalculateRelativeChange(0, 0))
- self.assertTrue(
- math.isnan(bisect_perf_module.CalculateRelativeChange(0, 1)))
- self.assertTrue(
- math.isnan(bisect_perf_module.CalculateRelativeChange(0, -1)))
-
- def testCalculateRelativeChangeWithNegatives(self):
- """Tests that relative change given is always positive."""
- self.assertEqual(3.0, bisect_perf_module.CalculateRelativeChange(-1, 2))
- self.assertEqual(3.0, bisect_perf_module.CalculateRelativeChange(1, -2))
- self.assertEqual(1.0, bisect_perf_module.CalculateRelativeChange(-1, -2))
-
def testTryParseResultValuesFromOutputWithSingleValue(self):
"""Tests result pattern <*>RESULT <graph>: <trace>= <value>"""
bisect_options = bisect_perf_module.BisectOptions()
@@ -242,7 +198,7 @@ vars = {
def testGetCompatibleCommand(self):
bisect_options = bisect_perf_module.BisectOptions()
bisect_options.output_buildbot_annotations = None
- source_control = bisect_perf_module.DetermineAndCreateSourceControl(
+ source_control = source_control_module.DetermineAndCreateSourceControl(
bisect_options)
bisect_instance = bisect_perf_module.BisectPerformanceMetrics(
source_control, bisect_options)
@@ -251,7 +207,7 @@ vars = {
# android-chrome-shell -> android-chromium-testshell
revision = 274857
git_revision = bisect_instance.source_control.ResolveToRevision(
- revision, 'chromium', 100)
+ revision, 'chromium', bisect_perf_module.DEPOT_DEPS_NAME, 100)
command = ('tools/perf/run_benchmark -v '
'--browser=android-chrome-shell page_cycler.intl_ja_zh')
expected_command = ('tools/perf/run_benchmark -v --browser='
@@ -263,7 +219,7 @@ vars = {
# android-chromium-testshell -> android-chromium-testshell
revision = 274858
git_revision = bisect_instance.source_control.ResolveToRevision(
- revision, 'chromium', 100)
+ revision, 'chromium', bisect_perf_module.DEPOT_DEPS_NAME, 100)
command = ('tools/perf/run_benchmark -v '
'--browser=android-chromium-testshell page_cycler.intl_ja_zh')
expected_command = ('tools/perf/run_benchmark -v --browser='
@@ -275,7 +231,7 @@ vars = {
# android-chromium-testshell -> android-chrome-shell
revision = 276628
git_revision = bisect_instance.source_control.ResolveToRevision(
- revision, 'chromium', 100)
+ revision, 'chromium', bisect_perf_module.DEPOT_DEPS_NAME, 100)
command = ('tools/perf/run_benchmark -v '
'--browser=android-chromium-testshell page_cycler.intl_ja_zh')
expected_command = ('tools/perf/run_benchmark -v --browser='
@@ -301,5 +257,6 @@ vars = {
bisect_instance.GetCompatibleCommand(command, git_revision, depot),
expected_command)
+
if __name__ == '__main__':
unittest.main()
« no previous file with comments | « tools/bisect-perf-regression.py ('k') | tools/run-bisect-perf-regression.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698