[Bf-blender-cvs] [3a41e0f611b] master: Tests: Automated geometry nodes benchmark

Hans Goudey noreply at git.blender.org
Sun Nov 27 00:45:16 CET 2022


Commit: 3a41e0f611bd8a64df9ce4b93386569d8f0cb498
Author: Hans Goudey
Date:   Sat Nov 26 17:15:55 2022 -0600
Branches: master
https://developer.blender.org/rB3a41e0f611bd8a64df9ce4b93386569d8f0cb498

Tests: Automated geometry nodes benchmark

Add a script for a very simple object evaluation benchmark.
There could be more advanced ways of measuring the time
per-node or per modifier, but this just loads the file, tags
the active object for a reevaluation, and times how long
that takes.

Differential Revision: https://developer.blender.org/D16604

===================================================================

A	tests/performance/tests/geometry_nodes.py

===================================================================

diff --git a/tests/performance/tests/geometry_nodes.py b/tests/performance/tests/geometry_nodes.py
new file mode 100644
index 00000000000..3505f5278bd
--- /dev/null
+++ b/tests/performance/tests/geometry_nodes.py
@@ -0,0 +1,49 @@
+# SPDX-License-Identifier: Apache-2.0
+
+import api
+import os
+
+
+def _run(args):
+    import bpy
+    import time
+
+    # Evaluate objects once first, to avoid any possible lazy evaluation later.
+    bpy.context.view_layer.update()
+
+    # Tag all objects with geometry nodes modifiers to be recalculated.
+    for ob in bpy.context.view_layer.objects:
+        for modifier in ob.modifiers:
+            if modifier.type == 'NODES':
+                ob.update_tag()
+                break
+
+    start_time = time.time()
+    bpy.context.view_layer.update()
+    elapsed_time = time.time() - start_time
+
+    result = {'time': elapsed_time}
+    return result
+
+
+class GeometryNodesTest(api.Test):
+    def __init__(self, filepath):
+        self.filepath = filepath
+
+    def name(self):
+        return self.filepath.stem
+
+    def category(self):
+        return "geometry_nodes"
+
+    def run(self, env, device_id):
+        args = {}
+
+        result, _ = env.run_in_blender(_run, args, [self.filepath])
+
+        return result
+
+
+def generate(env):
+    filepaths = env.find_blend_files('geometry_nodes/*')
+    return [GeometryNodesTest(filepath) for filepath in filepaths]



More information about the Bf-blender-cvs mailing list