summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Matthews <cmatthews5@apple.com>2018-05-11 00:25:42 +0000
committerChris Matthews <cmatthews5@apple.com>2018-05-11 00:25:42 +0000
commit5f74591847db036f2fb23cf568886a6a71af3522 (patch)
tree93c13ad3938faf5553303e33a5bb1c837be6b56b
parenta119322c1de3518e7d6acc0d5bfa0b5942f874cf (diff)
downloadbcm5719-llvm-5f74591847db036f2fb23cf568886a6a71af3522.tar.gz
bcm5719-llvm-5f74591847db036f2fb23cf568886a6a71af3522.zip
Refactor xunit test case builder to not use as much str addition
String concatenation in python is slow. Refactor to not concatenate the possibly large strings of test output and instead write them directly to the output file. llvm-svn: 332064
-rw-r--r--llvm/utils/lit/lit/Test.py20
-rwxr-xr-xllvm/utils/lit/lit/main.py3
2 files changed, 12 insertions, 11 deletions
diff --git a/llvm/utils/lit/lit/Test.py b/llvm/utils/lit/lit/Test.py
index d87906cf5ed..c68b6d97f4e 100644
--- a/llvm/utils/lit/lit/Test.py
+++ b/llvm/utils/lit/lit/Test.py
@@ -360,7 +360,8 @@ class Test:
"""
return self.suite.config.is_early
- def getJUnitXML(self):
+ def writeJUnitXML(self, fil):
+ """Write the test's report xml representation to a file handle."""
test_name = escape(self.path_in_suite[-1])
test_path = self.path_in_suite[:-1]
safe_test_path = [x.replace(".","_") for x in test_path]
@@ -370,14 +371,13 @@ class Test:
class_name = safe_name + "." + "/".join(safe_test_path)
else:
class_name = safe_name + "." + safe_name
-
- xml = "<testcase classname='" + class_name + "' name='" + \
- test_name + "'"
- xml += " time='{:.2f}'".format(
- self.result.elapsed if self.result.elapsed is not None else 0.0)
+ testcase_template = u"<testcase classname='{class_name}' name='{test_name}' time='{time:.2f}'"
+ elapsed_time = self.result.elapsed if self.result.elapsed is not None else 0.0
+ testcase_xml = testcase_template.format(class_name=class_name, test_name=test_name, time=elapsed_time)
+ fil.write(testcase_xml)
if self.result.code.isFailure:
- xml += ">\n\t<failure >\n" + escape(self.result.output)
- xml += "\n\t</failure>\n</testcase>"
+ fil.write(">\n\t<failure >\n")
+ fil.write(escape(self.result.output))
+ fil.write("\n\t</failure>\n</testcase>")
else:
- xml += "/>"
- return xml
+ fil.write("/>")
diff --git a/llvm/utils/lit/lit/main.py b/llvm/utils/lit/lit/main.py
index 6c1673754e8..d20b88109e6 100755
--- a/llvm/utils/lit/lit/main.py
+++ b/llvm/utils/lit/lit/main.py
@@ -614,7 +614,8 @@ def main_with_tmp(builtinParameters):
xunit_output_file.write(" failures='" + str(suite['failures']) +
"'>\n")
for result_test in suite['tests']:
- xunit_output_file.write(result_test.getJUnitXML() + "\n")
+ result_test.writeJUnitXML(xunit_output_file)
+ xunit_output_file.write("\n")
xunit_output_file.write("</testsuite>\n")
xunit_output_file.write("</testsuites>")
xunit_output_file.close()
OpenPOWER on IntegriCloud