diff options
author | Hans Goudey <h.goudey@me.com> | 2022-04-26 17:24:18 +0300 |
---|---|---|
committer | Hans Goudey <h.goudey@me.com> | 2022-04-26 17:24:26 +0300 |
commit | e9334c5df8b9c0c22c1c0ad20a087b5a437dcd23 (patch) | |
tree | 6bb1b2fce45872abf1d9b1f9ee9300ded132e730 /source/blender/blenkernel | |
parent | 5c5ec837b3a565da8647444b807091a78df40fd9 (diff) |
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.
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r-- | source/blender/blenkernel/intern/geometry_set.cc | 10 |
1 files changed, 8 insertions, 2 deletions
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<GeometrySet *> 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); }); + } } /** \} */ |