[Piglit] [PATCH v2 09/11] HTML summary: Provides means to exclude generating test result files

Kenneth Graunke kenneth at whitecape.org
Sat May 25 03:06:02 PDT 2013


On 05/17/2013 09:31 AM, Dylan Baker wrote:
> This provides a switch and method for excluding the generation of the
> test result HTML files (those that live under <testrun name>/). This
> allows the user to trade some verbosity in the results for a significant
> increase in generation speed. A run of quick.tests with all options
> enabled takes ~5.5 seconds, with just pass and skip disabled it only
> takes ~2.5 seconds. This only becomes more significant as more testsruns
> are added the HTML page.
>
> Signed-off-by: Dylan Baker <baker.dylan.c at gmail.com>
> ---
>   framework/summary.py   | 65 ++++++++++++++++++++++++++++----------------------
>   piglit-summary-html.py | 16 ++++++++++++-
>   templates/index.mako   |  6 +++++
>   3 files changed, 58 insertions(+), 29 deletions(-)
>
> diff --git a/framework/summary.py b/framework/summary.py
> index 9f2a924..722912c 100644
> --- a/framework/summary.py
> +++ b/framework/summary.py
> @@ -587,7 +587,7 @@ class NewSummary:
>                   if status[i] > 1 and status[i + 1] == 1:
>                       self.fixes.append(test)
>
> -    def generateHTML(self, destination):
> +    def generateHTML(self, destination, exclude):
>           """
>           Produce HTML summaries.
>
> @@ -638,27 +638,30 @@ class NewSummary:
>                   # 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,
> -                                      key + ".html"),
> -                            'w')
> -                file.write(testfile.render(testname   = key,
> -                                           status     = value['result'],
> -                                           returncode = value['returncode'],
> -                                           time       = value['time'],
> -                                           info       = value['info'],
> -                                           command    = value['command'],
> -                                           css        = path.relpath(resultCss,
> -                                                                     tPath),
> -                                           index      = index))
> -
> -                file.close()
> +                # Do not generate test result pages for skips
> +                if value['result'] not in exclude:
> +                    # 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'],
> +                                        css        = path.relpath(resultCss,
> +                                                                  tPath),
> +                                        index      = index))
> +
> +                    file.close()
>
>           # Finally build the root html files: index, regressions, etc
>           index = Template(filename = "templates/index.mako",
> @@ -669,35 +672,40 @@ class NewSummary:
>           file = open(path.join(destination, "index.html"), 'w')
>           file.write(index.render(results = BuildHTMLIndex(self, self.alltests),
>                                   page    = 'all',
> -                                colnum  = len(self.results)))
> +                                colnum  = len(self.results),
> +                                exclude = exclude))
>           file.close()
>
>           # changes.html
>           file = open(path.join(destination, "changes.html"), 'w')
>           file.write(index.render(results = BuildHTMLIndex(self, self.changes),
>                                   page    = 'changes',
> -                                colnum  = len(self.results)))
> +                                colnum  = len(self.results),
> +                                exclude = exclude))
>           file.close()
>
>           # problems.html
>           file = open(path.join(destination, "problems.html"), 'w')
>           file.write(index.render(results = BuildHTMLIndex(self, self.problems),
>                                   page    = 'problems',
> -                                colnum  = len(self.results)))
> +                                colnum  = len(self.results),
> +                                exclude = exclude))
>           file.close()
>
>           # skipped.html
>           file = open(path.join(destination, "skipped.html"), 'w')
>           file.write(index.render(results = BuildHTMLIndex(self, self.skipped),
>                                   page    = 'skipped',
> -                                colnum  = len(self.results)))
> +                                colnum  = len(self.results),
> +                                exclude = exclude))
>           file.close()
>
>           # fixes.html
>           file = open(path.join(destination, "fixes.html"), 'w')
>           file.write(index.render(results = BuildHTMLIndex(self, self.fixes),
>                                   page    = 'fixes',
> -                                colnum  = len(self.results)))
> +                                colnum  = len(self.results),
> +                                exclude = exclude))
>           file.close()
>
>           # regressions.html
> @@ -705,7 +713,8 @@ class NewSummary:
>           file.write(index.render(results = BuildHTMLIndex(self,
>                                                            self.regressions),
>                                   page    = 'regressions',
> -                                colnum  = len(self.results)))
> +                                colnum  = len(self.results),
> +                                exclude = exclude))
>           file.close()
>
>       def _buildDictionary(self, summary):
> diff --git a/piglit-summary-html.py b/piglit-summary-html.py
> index 77d63d0..4d2f1f0 100755
> --- a/piglit-summary-html.py
> +++ b/piglit-summary-html.py
> @@ -44,6 +44,16 @@ def main():
>       parser.add_argument("-l", "--list",
>                           action  = "store",
>                           help    = "Use test results from a list file")
> +    parser.add_argument("-e", "--exclude-generation",

Perhaps call this --exclude-details?  It seems clearer to me.  Just an idea.

> +                        default = [],
> +                        action  = "append",
> +                        choices = ['pass', 'warn', 'crash' 'fail', 'all'],

Shouldn't 'skip' be an option too?  By 'skip' I mean tests that were 
executed but explicitly output 'skip' (say due to missing extensions), 
not missing tests that weren't present in a particular test run.

With those changes, this would get a:
Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>

> +                        help    = "Optionally exclude the generation of HTML"
> +                                  "pages for individual test pages with the"
> +                                  "status(es) given as arguments. This speeds"
> +                                  "up HTML generation, but reduces the info"
> +                                  "in the HTML pages. May be used multiple"
> +                                  "times")
>       parser.add_argument("summaryDir",
>                           metavar = "<Summary Directory>",
>                           help    = "Directory to put HTML files in")
> @@ -57,6 +67,10 @@ def main():
>       if not args.list and not args.resultsFiles:
>           raise ValueError("Missing required options -l or <resultsFiles>")
>
> +    # If exclude-results has all, then change it to be all
> +    if 'all' in args.exclude_generation:
> +        args.exclude_generation=['skip', 'pass', 'warn', 'crash', 'fail']
> +
>       # if overwrite is requested delete the output directory
>       if path.exists(args.summaryDir) and args.overwrite:
>           shutil.rmtree(args.summaryDir)
> @@ -71,7 +85,7 @@ def main():
>
>       # Create the HTML output
>       output = summary.NewSummary(args.resultsFiles)
> -    output.generateHTML(args.summaryDir)
> +    output.generateHTML(args.summaryDir, args.exclude_generation)
>
>
>   if __name__ == "__main__":
> diff --git a/templates/index.mako b/templates/index.mako
> index acc597d..e29ebcc 100644
> --- a/templates/index.mako
> +++ b/templates/index.mako
> @@ -62,9 +62,15 @@
>   					</td>
>   				% elif line['type'] == "testResult":
>   					<td class="${line['class']}">
> +					## If the result is in the excluded results page list from
> +					## argparse, just print the text, otherwise add the link
> +					% if line['class'] not in exclude:
>   						<a href="${line['href']}">
>   							${line['text']}
>   						</a>
> +					% else:
> +						${line['text']}
> +					% endif
>   					</td>
>           % elif line['type'] == "subtestResult":
>   					<td class="${line['class']}">
>



More information about the Piglit mailing list