[Piglit] [PATCH 08/12] summary: Build subdirectories for subtest result pages
Dylan Baker
baker.dylan.c at gmail.com
Thu May 9 23:09:22 PDT 2013
With 10,000+ tests all living in the same folder it can be hard to
identify a single file, especially when trying to work with the HTML
generation itself. This patch changes the behavior so that each test
has a directory tree for the group results with tests under it (ie
spec/GLSL 1.0/foo/bar/test.html)
A side effect of this is that the group names of tests don't have to be
altered to create a valid name (since the slashes in the group names
just become the slashes in the folder structure) and this was the single
most expensive operation of HTML generation (about 1/3 of the total
time). This is a tidy little speedup.
Signed-off-by: Dylan Baker <baker.dylan.c at gmail.com>
---
framework/summary.py | 76 ++++++++++++++++------------------------------
templates/test_result.mako | 6 ++--
2 files changed, 30 insertions(+), 52 deletions(-)
diff --git a/framework/summary.py b/framework/summary.py
index 256a89f..122368b 100644
--- a/framework/summary.py
+++ b/framework/summary.py
@@ -471,8 +471,7 @@ class BuildHTMLIndex(list):
"""
self.append({'type': 'testResult',
'class': text,
- 'href': path.join(self._sanitizePath(group),
- self._sanitizePath(href + ".html")),
+ 'href': path.join(group, href + ".html"),
'text': text})
def _subtestResult(self, group, text):
@@ -488,29 +487,6 @@ class BuildHTMLIndex(list):
'class': text,
'text': text})
- # This will be removed from here in a later patch
- def _sanitizePath(self, path):
- """
- Private: convert the testname to only contain valid characters for
- a path
-
- This attempts to faithfully reconstruct the output of
- pigli-summary-html.testPathToHtmlFilename, but without the use of
- lambda. The advantage to not using lambda is readability, and the
- desire to make future changes to the way that sub-tests are written
- """
- valid_chars = frozenset("_-.%s%s" % (string.ascii_letters,
- string.digits))
- out = []
- for c in path:
- if c in valid_chars:
- out.append(c)
- elif c == "/":
- out.append("__")
- else:
- out.append("_")
- return ''.join(out)
-
class NewSummary:
"""
@@ -634,10 +610,17 @@ class NewSummary:
output_encoding = "utf-8",
module_directory = ".makotmp")
+ # Although these are only referenced once, that refernce is in a loop
+ # and they are less expensive to find once and store than find
+ # 10,000+ times
+ resultCss = path.join(destination, "result.css")
+ index = path.join(destination, "index.html")
+
# Iterate across the tests creating the various test specific files
for each in self.results:
os.mkdir(path.join(destination, each.name))
+ # Create an index file for each test run
file = open(path.join(destination, each.name, "index.html"), 'w')
file.write(testindex.render(name = each.name,
time = each.time,
@@ -648,15 +631,32 @@ class NewSummary:
# Then build the individual test results
for key, value in each.tests.iteritems():
+
+ # This is also improves performance, by cutting the number of
+ # times path.join and path.dirname is by 3, that's 20,000+
+ # times!
+ tPath = path.join(destination, each.name, path.dirname(key))
+
+ # os.makedirs is very annoying, it throws an OSError if the
+ # path requested already exists, so do this check to esnure
+ # that it doesn't
+ if not path.exists(tPath):
+ os.makedirs(tPath)
+
file = open(path.join(destination,
each.name,
- self._sanitizePath(key + ".html")), 'w')
+ key + ".html"),
+ 'w')
file.write(testfile.render(testname = key,
status = value['result'],
returncode = value['returncode'],
time = value['time'],
info = value['info'],
- command = value['command']))
+ command = value['command'],
+ css = path.relpath(resultCss,
+ tPath),
+ index = index))
+
file.close()
# Finally build the root html files: index, regressions, etc
@@ -810,25 +810,3 @@ class NewSummary:
assert(len(currentStatus) == 1)
return counts, status
-
- def _sanitizePath(self, path):
- """
- Private: convert the testname to only contain valid characters for
- a path
-
- This attempts to faithfully reconstruct the output of
- pigli-summary-html.testPathToHtmlFilename, but without the use of
- lambda. The advantage to not using lambda is readability, and the
- desire to make future changes to the way that sub-tests are written
- """
- valid_chars = frozenset("_-.%s%s" % (string.ascii_letters,
- string.digits))
- out = []
- for c in path:
- if c in valid_chars:
- out.append(c)
- elif c == "/":
- out.append("__")
- else:
- out.append("_")
- return ''.join(out)
diff --git a/templates/test_result.mako b/templates/test_result.mako
index 1f944cb..7de0af7 100644
--- a/templates/test_result.mako
+++ b/templates/test_result.mako
@@ -5,7 +5,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>${testname} - Details</title>
- <link rel="stylesheet" href="../result.css" type="text/css" />
+ <link rel="stylesheet" href="${css}" type="text/css" />
</head>
<body>
<h1>Results for ${testname}</h1>
@@ -14,7 +14,7 @@
<p><b>Status:</b> ${status}</p>
<p><b>Result:</b> ${status}</p>
</div>
- <p><a href="../index.html">Back to summary</a></p>
+ <p><a href="${index}">Back to summary</a></p>
<h2>Details</h2>
<table>
<tr>
@@ -42,6 +42,6 @@
</td>
</tr>
</table>
- <p><a href="../index.html">Back to summary</a></p>
+ <p><a href="${index}">Back to summary</a></p>
</body>
</html>
--
1.8.1.4
More information about the Piglit
mailing list