From e9334c5df8b9c0c22c1c0ad20a087b5a437dcd23 Mon Sep 17 00:00:00 2001 From: Hans Goudey Date: Tue, 26 Apr 2022 09:24:18 -0500 Subject: Geometry Nodes: Avoid parallel_for_each with a single geometry The large call stack can be slightly annoying, and it's possible that invoking TBB in this case corresponds to some overhead like e1309030603980c6b. --- source/blender/blenkernel/intern/geometry_set.cc | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'source/blender/blenkernel') diff --git a/source/blender/blenkernel/intern/geometry_set.cc b/source/blender/blenkernel/intern/geometry_set.cc index fc758e12c70..2bd8b643899 100644 --- a/source/blender/blenkernel/intern/geometry_set.cc +++ b/source/blender/blenkernel/intern/geometry_set.cc @@ -548,8 +548,14 @@ void GeometrySet::modify_geometry_sets(ForeachSubGeometryCallback callback) { Vector geometry_sets; gather_mutable_geometry_sets(*this, geometry_sets); - blender::threading::parallel_for_each( - geometry_sets, [&](GeometrySet *geometry_set) { callback(*geometry_set); }); + if (geometry_sets.size() == 1) { + /* Avoid possible overhead and a large call stack when multithreading is pointless. */ + callback(*geometry_sets.first()); + } + else { + blender::threading::parallel_for_each( + geometry_sets, [&](GeometrySet *geometry_set) { callback(*geometry_set); }); + } } /** \} */ -- cgit v1.2.3