Index: tools/testrunner/local/progress.py |
diff --git a/tools/testrunner/local/progress.py b/tools/testrunner/local/progress.py |
index f47fa3af84848d08cdf4c31be49cae3f2ac22d5d..421f9417a5646a803c2e4ce5593c4150398351d5 100644 |
--- a/tools/testrunner/local/progress.py |
+++ b/tools/testrunner/local/progress.py |
@@ -298,6 +298,7 @@ class JsonTestProgressIndicator(ProgressIndicator): |
self.arch = arch |
self.mode = mode |
self.results = [] |
+ self.tests = [] |
def Starting(self): |
self.progress_indicator.runner = self.runner |
@@ -311,10 +312,24 @@ class JsonTestProgressIndicator(ProgressIndicator): |
# Buildbot might start out with an empty file. |
complete_results = json.loads(f.read() or "[]") |
+ # Sort tests by duration. |
+ timed_tests = [t for t in self.tests if t.duration is not None] |
+ timed_tests.sort(lambda a, b: cmp(b.duration, a.duration)) |
+ slowest_tests = [ |
+ { |
+ "name": test.GetLabel(), |
+ "flags": test.flags, |
+ "command": EscapeCommand(self.runner.GetCommand(test)).replace( |
+ ABS_PATH_PREFIX, ""), |
+ "duration": test.duration, |
+ } for test in timed_tests[:20] |
+ ] |
+ |
complete_results.append({ |
"arch": self.arch, |
"mode": self.mode, |
"results": self.results, |
+ "slowest_tests": slowest_tests, |
}) |
with open(self.json_test_results, "w") as f: |
@@ -325,6 +340,8 @@ class JsonTestProgressIndicator(ProgressIndicator): |
def HasRun(self, test, has_unexpected_output): |
self.progress_indicator.HasRun(test, has_unexpected_output) |
+ # Buffer all tests for sorting the durations in the end. |
+ self.tests.append(test) |
if not has_unexpected_output: |
# Omit tests that run as expected. Passing tests of reruns after failures |
# will have unexpected_output to be reported here has well. |
@@ -341,6 +358,7 @@ class JsonTestProgressIndicator(ProgressIndicator): |
"exit_code": test.output.exit_code, |
"result": test.suite.GetOutcome(test), |
"expected": list(test.outcomes or ["PASS"]), |
+ "duration": test.duration, |
}) |