Changeset 89888 in webkit
- Timestamp:
- Jun 27, 2011 9:19:49 PM (13 years ago)
- Location:
- trunk/Tools
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Tools/ChangeLog
r89881 r89888 1 2011-06-27 Alice Boxhall <aboxhall@chromium.org> 2 3 Reviewed by Ojan Vafai. 4 5 Convert json_results_generator.py to output version 4 JSON. 6 https://bugs.webkit.org/show_bug.cgi?id=60869 7 8 * Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py: 9 * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py: 10 * Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py: 11 1 12 2011-06-27 Adam Barth <abarth@webkit.org> 2 13 -
trunk/Tools/Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py
r89217 r89888 131 131 132 132 # override 133 def _convert_json_to_current_version(self, results_json):134 archive_version = None135 if self.VERSION_KEY in results_json:136 archive_version = results_json[self.VERSION_KEY]137 138 super(JSONLayoutResultsGenerator,139 self)._convert_json_to_current_version(results_json)140 141 # version 2->3142 if archive_version == 2:143 for results_for_builder in results_json.itervalues():144 try:145 test_results = results_for_builder[self.TESTS]146 except:147 continue148 149 for test in test_results:150 # Make sure all paths are relative151 test_path = self._get_path_relative_to_layout_test_root(test)152 if test_path != test:153 test_results[test_path] = test_results[test]154 del test_results[test]155 156 # override157 133 def _insert_failure_summaries(self, results_for_builder): 158 134 summary = self._result_summary -
trunk/Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py
r89217 r89888 68 68 filesystem.write_text_file(file_path, json_string) 69 69 70 71 def convert_trie_to_flat_paths(trie, prefix=None): 72 """Converts the directory structure in the given trie to flat paths, prepending a prefix to each.""" 73 result = {} 74 for name, data in trie.iteritems(): 75 if prefix: 76 name = prefix + "/" + name 77 78 if not "results" in data: 79 result.update(convert_trie_to_flat_paths(data, name)) 80 else: 81 result[name] = data 82 83 return result 84 85 86 def add_path_to_trie(path, value, trie): 87 """Inserts a single flat directory path and associated value into a directory trie structure.""" 88 if not "/" in path: 89 trie[path] = value 90 return 91 92 directory, slash, rest = path.partition("/") 93 if not directory in trie: 94 trie[directory] = {} 95 add_path_to_trie(rest, value, trie[directory]) 96 97 98 def convert_trie_to_flat_paths(trie, prefix=None): 99 """Converts the directory structure in the given trie to flat paths, prepending a prefix to each.""" 100 result = {} 101 for name, data in trie.iteritems(): 102 if prefix: 103 name = prefix + "/" + name 104 105 if not "results" in data: 106 result.update(convert_trie_to_flat_paths(data, name)) 107 else: 108 result[name] = data 109 110 return result 111 112 113 def add_path_to_trie(path, value, trie): 114 """Inserts a single flat directory path and associated value into a directory trie structure.""" 115 if not "/" in path: 116 trie[path] = value 117 return 118 119 directory, slash, rest = path.partition("/") 120 if not directory in trie: 121 trie[directory] = {} 122 add_path_to_trie(rest, value, trie[directory]) 123 70 124 def test_timings_trie(port, individual_test_timings): 71 125 """Breaks a filename into chunks by directory and puts the test time as a value in the lowest part, e.g. … … 89 143 test = test_result.filename 90 144 91 parts = test.split('/') 92 current_map = trie 93 for i, part in enumerate(parts): 94 if i == (len(parts) - 1): 95 current_map[part] = int(1000 * test_result.test_run_time) 96 break 97 98 if part not in current_map: 99 current_map[part] = {} 100 current_map = current_map[part] 145 add_path_to_trie(test, int(1000 * test_result.test_run_time), trie) 146 101 147 return trie 102 148 … … 154 200 TestResult.FLAKY: FLAKY_RESULT} 155 201 156 VERSION = 3202 VERSION = 4 157 203 VERSION_KEY = "version" 158 204 RESULTS = "results" … … 272 318 tests = results_for_builder[self.TESTS] 273 319 all_failing_tests = self._get_failed_test_names() 274 all_failing_tests.update(tests.iterkeys()) 320 all_failing_tests.update(convert_trie_to_flat_paths(tests)) 321 275 322 for test in all_failing_tests: 276 323 self._insert_test_time_and_result(test, tests) … … 513 560 self.TIME) 514 561 562 563 515 564 def _insert_test_time_and_result(self, test_name, tests): 516 565 """ Insert a test item with its results to the given tests dictionary. … … 523 572 time = self._get_test_timing(test_name) 524 573 525 if test_name not in tests: 526 tests[test_name] = self._create_results_and_times_json() 527 528 thisTest = tests[test_name] 529 if self.RESULTS in thisTest: 530 self._insert_item_run_length_encoded(result, thisTest[self.RESULTS]) 531 else: 532 thisTest[self.RESULTS] = [[1, result]] 533 534 if self.TIMES in thisTest: 535 self._insert_item_run_length_encoded(time, thisTest[self.TIMES]) 536 else: 537 thisTest[self.TIMES] = [[1, time]] 574 this_test = tests 575 for segment in test_name.split("/"): 576 if segment not in this_test: 577 this_test[segment] = {} 578 this_test = this_test[segment] 579 580 if not len(this_test): 581 self._populate_results_and_times_json(this_test) 582 583 if self.RESULTS in this_test: 584 self._insert_item_run_length_encoded(result, this_test[self.RESULTS]) 585 else: 586 this_test[self.RESULTS] = [[1, result]] 587 588 if self.TIMES in this_test: 589 self._insert_item_run_length_encoded(time, this_test[self.TIMES]) 590 else: 591 this_test[self.TIMES] = [[1, time]] 538 592 539 593 def _convert_json_to_current_version(self, results_json): … … 541 595 current version and adds in the new version number. 542 596 """ 543 if (self.VERSION_KEY in results_json and 544 results_json[self.VERSION_KEY] == self.VERSION): 597 if self.VERSION_KEY in results_json: 598 archive_version = results_json[self.VERSION_KEY] 599 if archive_version == self.VERSION: 600 return 601 else: 602 archive_version = 3 603 604 # version 3->4 605 if archive_version == 3: 606 num_results = len(results_json.values()) 607 for builder, results in results_json.iteritems(): 608 self._convert_tests_to_trie(results) 609 610 results_json[self.VERSION_KEY] = self.VERSION 611 612 def _convert_tests_to_trie(self, results): 613 if not self.TESTS in results: 545 614 return 546 615 547 results_json[self.VERSION_KEY] = self.VERSION 548 549 def _create_results_and_times_json(self): 550 results_and_times = {} 616 test_results = results[self.TESTS] 617 test_results_trie = {} 618 for test in test_results.iterkeys(): 619 single_test_result = test_results[test] 620 add_path_to_trie(test, single_test_result, test_results_trie) 621 622 results[self.TESTS] = test_results_trie 623 624 def _populate_results_and_times_json(self, results_and_times): 551 625 results_and_times[self.RESULTS] = [] 552 626 results_and_times[self.TIMES] = [] -
trunk/Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py
r89217 r89888 157 157 tests = buildinfo[JRG.TESTS] 158 158 for test_name in failed_count_map.iterkeys(): 159 self.assertTrue(test_name in tests) 160 test = tests[test_name] 159 test = self._find_test_in_trie(test_name, tests) 161 160 162 161 failed = 0 … … 174 173 if fixable_count: 175 174 self.assertEqual(sum(buildinfo[JRG.FIXABLE_COUNT]), fixable_count) 175 176 def _find_test_in_trie(self, path, trie): 177 nodes = path.split("/") 178 sub_trie = trie 179 for node in nodes: 180 self.assertTrue(node in sub_trie) 181 sub_trie = sub_trie[node] 182 return sub_trie 183 184 def _find_test_in_trie(self, path, trie): 185 nodes = path.split("/") 186 sub_trie = trie 187 for node in nodes: 188 self.assertTrue(node in sub_trie) 189 sub_trie = sub_trie[node] 190 return sub_trie 176 191 177 192 def test_json_generation(self): … … 197 212 ['FLAKY_B', 'DISABLED_C', 'FAILS_D'], 198 213 ['A', 'FLAKY_E']) 214 215 def test_hierarchical_json_generation(self): 216 # FIXME: Re-work tests to be more comprehensible and comprehensive. 217 self._test_json_generation(['foo/A'], ['foo/B', 'bar/C']) 218 219 def test_hierarchical_json_generation(self): 220 # FIXME: Re-work tests to be more comprehensible and comprehensive. 221 self._test_json_generation(['foo/A'], ['foo/B', 'bar/C']) 199 222 200 223 def test_test_timings_trie(self):
Note: See TracChangeset
for help on using the changeset viewer.