Cycles/Eevee tests: add compare.html to see difference between the engines.

This commit is contained in:
Brecht Van Lommel
2018-05-18 17:52:46 +02:00
parent de7635f607
commit ffaf55be94
3 changed files with 56 additions and 9 deletions

View File

@@ -127,6 +127,7 @@ def main():
from modules import render_report from modules import render_report
report = render_report.Report("Cycles Test Report", output_dir, idiff) report = render_report.Report("Cycles Test Report", output_dir, idiff)
report.set_pixelated(True) report.set_pixelated(True)
report.set_compare_engines('cycles', 'eevee')
ok = report.run(test_dir, render_file) ok = report.run(test_dir, render_file)
sys.exit(not ok) sys.exit(not ok)

View File

@@ -123,6 +123,7 @@ def main():
report = render_report.Report("Eevee Test Report", output_dir, idiff) report = render_report.Report("Eevee Test Report", output_dir, idiff)
report.set_pixelated(True) report.set_pixelated(True)
report.set_reference_dir("eevee_renders") report.set_reference_dir("eevee_renders")
report.set_compare_engines('eevee', 'cycles')
ok = report.run(test_dir, render_file) ok = report.run(test_dir, render_file)
sys.exit(not ok) sys.exit(not ok)

View File

@@ -96,7 +96,9 @@ class Report:
'verbose', 'verbose',
'update', 'update',
'failed_tests', 'failed_tests',
'passed_tests' 'passed_tests',
'compare_tests',
'compare_engines'
) )
def __init__(self, title, output_dir, idiff): def __init__(self, title, output_dir, idiff):
@@ -104,6 +106,7 @@ class Report:
self.output_dir = output_dir self.output_dir = output_dir
self.reference_dir = 'reference_renders' self.reference_dir = 'reference_renders'
self.idiff = idiff self.idiff = idiff
self.compare_engines = None
self.pixelated = False self.pixelated = False
self.verbose = os.environ.get("BLENDER_VERBOSE") is not None self.verbose = os.environ.get("BLENDER_VERBOSE") is not None
@@ -115,6 +118,7 @@ class Report:
self.failed_tests = "" self.failed_tests = ""
self.passed_tests = "" self.passed_tests = ""
self.compare_tests = ""
if not os.path.exists(output_dir): if not os.path.exists(output_dir):
os.makedirs(output_dir) os.makedirs(output_dir)
@@ -125,14 +129,20 @@ class Report:
def set_reference_dir(self, reference_dir): def set_reference_dir(self, reference_dir):
self.reference_dir = reference_dir self.reference_dir = reference_dir
def set_compare_engines(self, engine, other_engine):
self.compare_engines = (engine, other_engine)
def run(self, dirpath, render_cb): def run(self, dirpath, render_cb):
# Run tests and output report. # Run tests and output report.
dirname = os.path.basename(dirpath) dirname = os.path.basename(dirpath)
ok = self._run_all_tests(dirname, dirpath, render_cb) ok = self._run_all_tests(dirname, dirpath, render_cb)
self._write_html(dirname) self._write_data(dirname)
self._write_html()
if self.compare_engines:
self._write_html(comparison=True)
return ok return ok
def _write_html(self, dirname): def _write_data(self, dirname):
# Write intermediate data for single test. # Write intermediate data for single test.
outdir = os.path.join(self.output_dir, dirname) outdir = os.path.join(self.output_dir, dirname)
if not os.path.exists(outdir): if not os.path.exists(outdir):
@@ -144,9 +154,18 @@ class Report:
filepath = os.path.join(outdir, "passed.data") filepath = os.path.join(outdir, "passed.data")
pathlib.Path(filepath).write_text(self.passed_tests) pathlib.Path(filepath).write_text(self.passed_tests)
if self.compare_engines:
filepath = os.path.join(outdir, "compare.data")
pathlib.Path(filepath).write_text(self.compare_tests)
def _write_html(self, comparison = False):
# Gather intermediate data for all tests. # Gather intermediate data for all tests.
failed_data = sorted(glob.glob(os.path.join(self.output_dir, "*/failed.data"))) if comparison:
passed_data = sorted(glob.glob(os.path.join(self.output_dir, "*/passed.data"))) failed_data = []
passed_data = sorted(glob.glob(os.path.join(self.output_dir, "*/compare.data")))
else:
failed_data = sorted(glob.glob(os.path.join(self.output_dir, "*/failed.data")))
passed_data = sorted(glob.glob(os.path.join(self.output_dir, "*/passed.data")))
failed_tests = "" failed_tests = ""
passed_tests = "" passed_tests = ""
@@ -171,6 +190,13 @@ class Report:
else: else:
message = "" message = ""
if comparison:
title = "Render Test Compare"
columns_html = "<tr><th>Name</th><th>%s</th><th>%s</th>" % self.compare_engines
else:
title = self.title
columns_html = "<tr><th>Name</th><th>New</th><th>Reference</th><th>Diff</th>"
html = """ html = """
<html> <html>
<head> <head>
@@ -208,7 +234,7 @@ class Report:
<br/> <br/>
<table class="table table-striped"> <table class="table table-striped">
<thead class="thead-default"> <thead class="thead-default">
<tr><th>Name</th><th>New</th><th>Reference</th><th>Diff</th> {columns_html}
</thead> </thead>
{tests_html} {tests_html}
</table> </table>
@@ -216,12 +242,14 @@ class Report:
</div> </div>
</body> </body>
</html> </html>
""" . format(title=self.title, """ . format(title=title,
message=message, message=message,
image_rendering=image_rendering, image_rendering=image_rendering,
tests_html=tests_html) tests_html=tests_html,
columns_html=columns_html)
filepath = os.path.join(self.output_dir, "report.html") filename = "report.html" if not comparison else "compare.html"
filepath = os.path.join(self.output_dir, filename)
pathlib.Path(filepath).write_text(html) pathlib.Path(filepath).write_text(html)
print_message("Report saved to: " + pathlib.Path(filepath).as_uri()) print_message("Report saved to: " + pathlib.Path(filepath).as_uri())
@@ -262,6 +290,23 @@ class Report:
else: else:
self.passed_tests += test_html self.passed_tests += test_html
if self.compare_engines:
ref_url = os.path.join("..", self.compare_engines[1], new_url)
test_html = """
<tr{tr_style}>
<td><b>{name}</b><br/>{testname}<br/>{status}</td>
<td><img src="{new_url}" onmouseover="this.src='{ref_url}';" onmouseout="this.src='{new_url}';" class="render"></td>
<td><img src="{ref_url}" onmouseover="this.src='{new_url}';" onmouseout="this.src='{ref_url}';" class="render"></td>
</tr>""" . format(tr_style=tr_style,
name=name,
testname=testname,
status=status,
new_url=new_url,
ref_url=ref_url)
self.compare_tests += test_html
def _diff_output(self, filepath, tmp_filepath): def _diff_output(self, filepath, tmp_filepath):
old_img, ref_img, new_img, diff_img = test_get_images(self.output_dir, filepath, self.reference_dir) old_img, ref_img, new_img, diff_img = test_get_images(self.output_dir, filepath, self.reference_dir)