Changeset 112829 in webkit


Ignore:
Timestamp:
Apr 1, 2012 9:48:35 PM (12 years ago)
Author:
rniwa@webkit.org
Message:

perf-o-matic should store test results' units
https://bugs.webkit.org/show_bug.cgi?id=82852

Reviewed by Kentaro Hara.

.:

  • Websites/webkit-perf.appspot.com/models.py:

(Test):
(Test.update_or_insert): Added "unit" to the argument list.
(Test.update_or_insert.execute): Store the unit.
(ReportLog.results_are_well_formed): Moved from ReportHandler.
(ReportLog.results_are_well_formed._is_float_convertible): Ditto.

  • Websites/webkit-perf.appspot.com/models_unittest.py:

(TestModelTests.test_update_or_insert): Added a test case for "unit" argument.
(TestModelTests.test_update_or_insert_to_update): Ditto.
(ReportLogTests.test_results_are_well_formed): Added.
(ReportLogTests.test_results_are_well_formed.assert_results_are_well_formed): Added.

  • Websites/webkit-perf.appspot.com/report_handler.py:

(ReportHandler.post): Calls ReportLog.results_are_well_formed.

  • Websites/webkit-perf.appspot.com/report_process_handler.py:

(ReportProcessHandler.post): Passes resultsunit? to Test.update_or_insert.

Tools:

Include units in the results JSON.

  • Scripts/webkitpy/performance_tests/perftestsrunner.py:

(PerfTestsRunner._process_chromium_style_test_result):
(PerfTestsRunner._process_parser_test_result):

Location:
trunk
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/ChangeLog

    r112824 r112829  
     12012-04-01  Ryosuke Niwa  <rniwa@webkit.org>
     2
     3        perf-o-matic should store test results' units
     4        https://bugs.webkit.org/show_bug.cgi?id=82852
     5
     6        Reviewed by Kentaro Hara.
     7
     8        * Websites/webkit-perf.appspot.com/models.py:
     9        (Test):
     10        (Test.update_or_insert): Added "unit" to the argument list.
     11        (Test.update_or_insert.execute): Store the unit.
     12        (ReportLog.results_are_well_formed): Moved from ReportHandler.
     13        (ReportLog.results_are_well_formed._is_float_convertible): Ditto.
     14        * Websites/webkit-perf.appspot.com/models_unittest.py:
     15        (TestModelTests.test_update_or_insert): Added a test case for "unit" argument.
     16        (TestModelTests.test_update_or_insert_to_update): Ditto.
     17        (ReportLogTests.test_results_are_well_formed): Added.
     18        (ReportLogTests.test_results_are_well_formed.assert_results_are_well_formed): Added.
     19        * Websites/webkit-perf.appspot.com/report_handler.py:
     20        (ReportHandler.post): Calls ReportLog.results_are_well_formed.
     21        * Websites/webkit-perf.appspot.com/report_process_handler.py:
     22        (ReportProcessHandler.post): Passes results['unit'] to Test.update_or_insert.
     23
    1242012-04-01  Ryosuke Niwa  <rniwa@webkit.org>
    225
  • trunk/Tools/ChangeLog

    r112816 r112829  
     12012-04-01  Ryosuke Niwa  <rniwa@webkit.org>
     2
     3        perf-o-matic should store test results' units
     4        https://bugs.webkit.org/show_bug.cgi?id=82852
     5
     6        Reviewed by Kentaro Hara.
     7
     8        Include units in the results JSON.
     9
     10        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
     11        (PerfTestsRunner._process_chromium_style_test_result):
     12        (PerfTestsRunner._process_parser_test_result):
     13
    1142012-04-01  Tony Tseung  <tseung@apple.com>
    215
  • trunk/Tools/Scripts/webkitpy/performance_tests/perftestsrunner.py

    r112140 r112829  
    251251            resultLine = self._inspector_result_regex.match(line)
    252252            if resultLine:
     253                # FIXME: Store the unit
    253254                self._results[resultLine.group('name').replace(' ', '')] = float(resultLine.group('value'))
    254255                self._buildbot_output.write("%s\n" % line)
     
    287288        score_regex = re.compile(r'^(?P<key>' + r'|'.join(keys) + r')\s+(?P<value>[0-9\.]+)\s*(?P<unit>.*)')
    288289        unit = "ms"
     290
    289291        for line in re.split('\n', output.text):
    290292            score = score_regex.match(line)
     
    301303        if test_failed or set(keys) != set(results.keys()):
    302304            return True
     305
     306        results['unit'] = unit
     307
    303308        self._results[filesystem.join(category, test_name).replace('\\', '/')] = results
    304309        self._buildbot_output.write('RESULT %s: %s= %s %s\n' % (category, test_name, results['avg'], unit))
  • trunk/Websites/webkit-perf.appspot.com/models.py

    r112822 r112829  
    149149    branches = db.ListProperty(db.Key)
    150150    platforms = db.ListProperty(db.Key)
     151    unit = db.StringProperty()
    151152    hidden = db.BooleanProperty()
    152153
    153154    @staticmethod
    154     def update_or_insert(test_name, branch, platform):
     155    def update_or_insert(test_name, branch, platform, unit=None):
    155156        existing_test = [None]
    156157
     
    162163                if platform.key() not in test.platforms:
    163164                    test.platforms.append(platform.key())
     165                test.unit = unit
    164166                test.put()
    165167                existing_test[0] = test
     
    252254    def results(self):
    253255        return self.get_value('results')
     256
     257    def results_are_well_formed(self):
     258
     259        def _is_float_convertible(value):
     260            try:
     261                float(value)
     262                return True
     263            except TypeError:
     264                return False
     265            except ValueError:
     266                return False
     267
     268        if not isinstance(self.results(), dict):
     269            return False
     270
     271        for testResult in self.results().values():
     272            if isinstance(testResult, dict):
     273                for key, value in testResult.iteritems():
     274                    if key != "unit" and not _is_float_convertible(value):
     275                        return False
     276                if 'avg' not in testResult:
     277                    return False
     278                continue
     279            if not _is_float_convertible(testResult):
     280                return False
     281
     282        return True
    254283
    255284    def builder(self):
  • trunk/Websites/webkit-perf.appspot.com/models_unittest.py

    r110210 r112829  
    266266        self.assertEqual(test.branches, [branch.key()])
    267267        self.assertEqual(test.platforms, [platform.key()])
     268        self.assertEqual(test.unit, None)
    268269        self.assertOnlyInstance(test)
    269270
     
    276277        other_branch = Branch.create_if_possible('other-branch', 'Other Branch')
    277278        other_platform = Platform.create_if_possible('other-platform', 'Other Platform')
    278         test = Test.update_or_insert('some-test', other_branch, other_platform)
     279        test = Test.update_or_insert('some-test', other_branch, other_platform, 'ms')
    279280        self.assertOnlyInstance(test)
    280281        self.assertEqualUnorderedList(test.branches, [branch.key(), other_branch.key()])
    281282        self.assertEqualUnorderedList(test.platforms, [platform.key(), other_platform.key()])
    282 
    283         test = Test.get(test.key())
    284         self.assertEqualUnorderedList(test.branches, [branch.key(), other_branch.key()])
    285         self.assertEqualUnorderedList(test.platforms, [platform.key(), other_platform.key()])
     283        self.assertEqualUnorderedList(test.unit, 'ms')
    286284
    287285    def test_merge(self):
     
    434432        self.assertEqual(log.results(), None)
    435433
     434    def test_results_are_well_formed(self):
     435
     436        def assert_results_are_well_formed(json, expected):
     437            self.assertEqual(self._create_log_with_payload(json).results_are_well_formed(), expected)
     438
     439        assert_results_are_well_formed('{"results": 123}', False)
     440        assert_results_are_well_formed('{"results": {"test": 123}}', True)
     441        assert_results_are_well_formed('{"results": {"test": 123, "other-test": 456}}', True)
     442        assert_results_are_well_formed('{"results": {"test": 123, "other-test": 456, "bad-test": "hi"}}', False)
     443        assert_results_are_well_formed('{"results": {"test": {"avg": 456}}}', True)
     444        assert_results_are_well_formed('{"results": {"test": {"avg": 456, "median": "hello"}}}', False)
     445        assert_results_are_well_formed('{"results": {"test": {"avg": 456, "median": 789}}}', True)
     446        assert_results_are_well_formed('{"results": {"test": {"avg": 456, "unit": "bytes"}}}', True)
     447
    436448    def test_builder(self):
    437449        log = self._create_log_with_payload('{"key": "value"}')
  • trunk/Websites/webkit-perf.appspot.com/report_handler.py

    r107532 r112829  
    7070            self._output('Authentication failed')
    7171
    72         if not self._results_are_valid(log):
     72        if not log.results_are_well_formed():
    7373            self._output("The payload doesn't contain results or results are malformed")
    7474
     
    8888        return False
    8989
    90     def _results_are_valid(self, log):
    91 
    92         def _is_float_convertible(value):
    93             try:
    94                 float(value)
    95                 return True
    96             except TypeError:
    97                 return False
    98             except ValueError:
    99                 return False
    100 
    101         if not isinstance(log.results(), dict):
    102             return False
    103 
    104         for testResult in log.results().values():
    105             if isinstance(testResult, dict):
    106                 for value in testResult.values():
    107                     if not _is_float_convertible(value):
    108                         return False
    109                 if 'avg' not in testResult:
    110                     return False
    111                 continue
    112             if not _is_float_convertible(testResult):
    113                 return False
    114 
    115         return True
    116 
    11790
    11891class AdminReportHandler(ReportHandler):
  • trunk/Websites/webkit-perf.appspot.com/report_process_handler.py

    r110210 r112829  
    5959
    6060        for test_name, result_value in log.results().iteritems():
    61             test = Test.update_or_insert(test_name, branch, platform)
     61            test = Test.update_or_insert(test_name, branch, platform, result_value.get('unit'))
    6262            result = TestResult.get_or_insert_from_parsed_json(test_name, build, result_value)
    6363            runs = Runs.get_by_objects(branch, platform, test)
Note: See TracChangeset for help on using the changeset viewer.