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. V3: Correct some spelling errors/remove excess comments Signed-off-by: Dylan Baker <[email protected]> --- framework/summary.py | 32 ++++++++++++++++++-------------- templates/test_result.mako | 6 +++--- 2 files changed, 21 insertions(+), 17 deletions(-) diff --git a/framework/summary.py b/framework/summary.py index 1ce3fa7..79ed20c 100644 --- a/framework/summary.py +++ b/framework/summary.py @@ -264,14 +264,6 @@ Returns an array of all child TestSummary instances. ## New Summary -def sanitizePath(path): - """ - Helper function to remove illegal characters from the names - """ - return filter(lambda s: s.isalnum() or s == '_', path.replace('/', '__')) \ - + '.html' - - class Result: """ Object that opens, reads, and stores the data in a resultfile. @@ -481,8 +473,7 @@ class HTMLIndex(list): """ self.append({'type': 'testResult', 'class': text, - 'href': path.join(sanitizePath(group), - sanitizePath(href + ".html")), + 'href': path.join(group, href + ".html"), 'text': text}) @@ -721,6 +712,9 @@ class NewSummary: output_encoding="utf-8", module_directory=".makotmp") + 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)) @@ -733,17 +727,27 @@ class NewSummary: lspci=each.lspci)) file.close() + # Then build the individual test results for key, value in each.tests.iteritems(): - file = open(path.join(destination, - each.name, - sanitizePath(key + ".html")), 'w') + 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 ensure + # that it doesn't + if not path.exists(tPath): + os.makedirs(tPath) + + file = open(path.join(destination, each.name, 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 diff --git a/templates/test_result.mako b/templates/test_result.mako index b4c6921..c0e0fca 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 _______________________________________________ Piglit mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/piglit
