Changeset 129555 in webkit
- Timestamp:
- Sep 25, 2012 2:22:08 PM (12 years ago)
- Location:
- trunk
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/ChangeLog
r129472 r129555 1 2012-09-25 Ryosuke Niwa <rniwa@webkit.org> 2 3 Perf-o-matic should store "values" and support array'ed input 4 https://bugs.webkit.org/show_bug.cgi?id=97601 5 6 Reviewed by Dirk Pranke. 7 8 Support new JSON format where the outermost structure is an array instead of a dictionary and results may 9 contain "values". This change will let us remove some code from run-perf-tests. 10 11 Old: {"webkit-revision": 123456, "results": {"test": {"avg": 123}} 12 New: [{"webkit-revision": 123456, "results": {"test": {"avg": 123, values: [122, 123, 124]}}}] 13 14 * Websites/webkit-perf.appspot.com/app.yaml: Incremented the version number. 15 * Websites/webkit-perf.appspot.com/models.py: 16 (TestResult): Added values property. 17 (TestResult.get_or_insert_from_parsed_json): Pass in "values" to the constructor if the value is present. 18 (ReportLog.get_value): Use the first item in the array if self._parsed uses the new format. 19 (ReportLog.results_are_well_formed): Verifies that items in "values" are floats convertible. Also verify that 20 if the JSON uses new format, there is exactly one set of results. In theory, we could support multiple results 21 but we don't do that now for its complexity. 22 * Websites/webkit-perf.appspot.com/models_unittest.py: 23 (TestResultTests.test_get_or_insert_stat_value): Make sure values is present and is an empty list. 24 (TestResultTests.test_get_or_insert_stat_value_with_values): Added. 25 (ReportLogTests.test_results_are_well_formed): 26 (ReportLogTests.test_chromium_revision): Renamed from chromium_revision so that it actually runs. 27 (ReportLogTests.test_results_in_array): 28 1 29 2012-09-25 Laszlo Gombos <l.gombos@samsung.com> 2 30 -
trunk/Websites/webkit-perf.appspot.com/app.yaml
r123938 r129555 1 1 application: webkit-perf 2 version: 192 version: 20 3 3 runtime: python27 4 4 api_version: 1 -
trunk/Websites/webkit-perf.appspot.com/models.py
r124184 r129555 203 203 valueMin = db.FloatProperty() 204 204 valueMax = db.FloatProperty() 205 values = db.ListProperty(float) 205 206 206 207 @staticmethod … … 223 224 return cls.get_or_insert(key_name, name=test_name, build=build, value=float(result['avg']), 224 225 valueMedian=_float_or_none(result, 'median'), valueStdev=_float_or_none(result, 'stdev'), 225 valueMin=_float_or_none(result, 'min'), valueMax=_float_or_none(result, 'max')) 226 valueMin=_float_or_none(result, 'min'), valueMax=_float_or_none(result, 'max'), 227 values=result.get('values', [])) 226 228 227 229 def replace_to_change_test_name(self, new_name): … … 248 250 249 251 def get_value(self, keyName): 250 if not self._parsed_payload(): 251 return None 252 return self._parsed.get(keyName) 252 parsed = self._parsed_payload() 253 if not parsed: 254 return None 255 if isinstance(parsed, list): 256 parsed = parsed[0] 257 return parsed.get(keyName) 253 258 254 259 def results(self): … … 266 271 return False 267 272 273 if isinstance(self._parsed_payload(), list) and len(self._parsed_payload()) != 1: 274 return False 275 268 276 if not isinstance(self.results(), dict): 269 277 return False … … 272 280 if isinstance(testResult, dict): 273 281 for key, value in testResult.iteritems(): 274 if key != "unit" and not _is_float_convertible(value): 282 if key == "values": 283 if not isinstance(value, list): 284 return False 285 for item in value: 286 if not _is_float_convertible(item): 287 return False 288 elif key != "unit" and not _is_float_convertible(value): 275 289 return False 276 290 if 'avg' not in testResult: -
trunk/Websites/webkit-perf.appspot.com/models_unittest.py
r123938 r129555 351 351 self.assertEqual(result.valueMin, 30.5) 352 352 self.assertEqual(result.valueMax, 45) 353 self.assertEqual(result.values, []) 354 355 def test_get_or_insert_stat_value_with_values(self): 356 branch, platform, builder = _create_some_builder() 357 build = _create_build(branch, platform, builder) 358 result = TestResult.get_or_insert_from_parsed_json('some-test', build, 359 {"avg": 40, "median": "40.1", "stdev": 3.25, "min": 30.5, "max": 45, "values": [1.0, 2.0, 3.0]}) 360 self.assertEqual(result.values, [1.0, 2.0, 3.0]) 353 361 354 362 def test_replace_to_change_test_name(self): … … 452 460 assert_results_are_well_formed('{"results": {"test": {"avg": 456, "median": 789}}}', True) 453 461 assert_results_are_well_formed('{"results": {"test": {"avg": 456, "unit": "bytes"}}}', True) 462 assert_results_are_well_formed('{"results": {"test": {"avg": 456, "unit": "bytes", "values": [1.0, 2.0, 3.0]}}}', True) 463 464 assert_results_are_well_formed('[]', False) 465 assert_results_are_well_formed('[{"results": {"test": 123}}]', True) 466 assert_results_are_well_formed('[{"results": {"test": 123}}, {"results": {"test": 123}}]', False) 467 assert_results_are_well_formed('[{"results": {"test": {"avg": 456, "unit": "bytes", "values": [1.0, 2.0, 3.0]}}}]', True) 454 468 455 469 def test_builder(self): … … 501 515 self.assertEqual(log.webkit_revision(), 123) 502 516 503 def chromium_revision(self):517 def test_chromium_revision(self): 504 518 log = self._create_log_with_payload('{"chromium-revision": 123}') 505 self.assertEqual(log. webkit_revision(), 123)519 self.assertEqual(log.chromium_revision(), 123) 506 520 507 521 log = self._create_log_with_payload('{"key": "value"}') 508 self.assertEqual(log.webkit_revision(), None) 522 self.assertEqual(log.chromium_revision(), None) 523 524 def test_results_in_array(self): 525 platform = Platform.create_if_possible("some-platform", "Some Platform") 526 log = self._create_log_with_payload('[{"platform": "some-platform", "build-number": 123, "webkit-revision": 456}]') 527 self.assertEqual(log.platform().key(), platform.key()) 528 self.assertEqual(log.build_number(), 123) 529 self.assertEqual(log.webkit_revision(), 456) 509 530 510 531
Note: See TracChangeset
for help on using the changeset viewer.