Tests: speed up render tests by running multiple in the same process

Blender startup time and shader compilation is a big factor when running
hundreds of tests, so now all renders in the same ctest run in the same
process.

This was previously reverted due to skipping other tests when one test
crashed. Now if a test crashes, Blender is re-run with the remaining
tests so we get results from them still.
This commit is contained in:
Brecht Van Lommel
2019-05-10 23:00:35 +02:00
parent 219a10e46a
commit 6f516fcc63
5 changed files with 100 additions and 218 deletions

View File

@@ -8,7 +8,6 @@ import shutil
import subprocess
import sys
def setup():
import bpy
@@ -46,15 +45,8 @@ if inside_blender:
sys.exit(1)
def render_file(filepath, output_filepath):
dirname = os.path.dirname(filepath)
basedir = os.path.dirname(dirname)
subject = os.path.basename(dirname)
frame_filepath = output_filepath + '0001.png'
command = [
BLENDER,
def get_arguments(filepath, output_filepath):
return [
"--background",
"-noaudio",
"--factory-startup",
@@ -67,37 +59,6 @@ def render_file(filepath, output_filepath):
"-F", "PNG",
"-f", "1"]
try:
# Success
output = subprocess.check_output(command)
if os.path.exists(frame_filepath):
shutil.copy(frame_filepath, output_filepath)
os.remove(frame_filepath)
if VERBOSE:
print(" ".join(command))
print(output.decode("utf-8"))
return None
except subprocess.CalledProcessError as e:
# Error
if os.path.exists(frame_filepath):
os.remove(frame_filepath)
if VERBOSE:
print(" ".join(command))
print(e.output.decode("utf-8"))
if b"Error: engine not found" in e.output:
return "NO_ENGINE"
elif b"blender probably wont start" in e.output:
return "NO_START"
return "CRASH"
except BaseException as e:
# Crash
if os.path.exists(frame_filepath):
os.remove(frame_filepath)
if VERBOSE:
print(" ".join(command))
print(e)
return "CRASH"
def create_argparse():
parser = argparse.ArgumentParser()
@@ -112,11 +73,7 @@ def main():
parser = create_argparse()
args = parser.parse_args()
global BLENDER, VERBOSE
BLENDER = args.blender[0]
VERBOSE = os.environ.get("BLENDER_VERBOSE") is not None
blender = args.blender[0]
test_dir = args.testdir[0]
idiff = args.idiff[0]
output_dir = args.outdir[0]
@@ -126,7 +83,7 @@ def main():
report.set_pixelated(True)
report.set_reference_dir("eevee_renders")
report.set_compare_engines('eevee', 'cycles')
ok = report.run(test_dir, render_file)
ok = report.run(test_dir, blender, get_arguments, batch=True)
sys.exit(not ok)