From 2bd868ecd0d1ee0c4a96dfaa16e5130c1f2dd107 Mon Sep 17 00:00:00 2001 From: Kris Austin Date: Mon, 5 Oct 2026 19:21:13 -0500 Subject: [PATCH] perf: avoid print config copies to speed up slicing by up to 5% (#16183) --- src/libslic3r/Layer.cpp | 6 +++--- src/libslic3r/LayerRegion.cpp | 6 +++--- src/libslic3r/Support/TreeSupport.cpp | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/libslic3r/Layer.cpp b/src/libslic3r/Layer.cpp index 5439e0fa7a..610dd959d2 100644 --- a/src/libslic3r/Layer.cpp +++ b/src/libslic3r/Layer.cpp @@ -378,7 +378,7 @@ void Layer::simplify_support_entity_collection(ExtrusionEntityCollection* entity //BBS: method to simplify support path void Layer::simplify_support_path(ExtrusionPath * path) { - const auto print_config = this->object()->print()->config(); + const auto &print_config = this->object()->print()->config(); const bool spiral_mode = print_config.spiral_mode; const bool enable_arc_fitting = print_config.enable_arc_fitting; const auto scaled_resolution = scaled(print_config.resolution.value); @@ -393,7 +393,7 @@ void Layer::simplify_support_path(ExtrusionPath * path) //BBS: method to simplify support path void Layer::simplify_support_multi_path(ExtrusionMultiPath* multipath) { - const auto print_config = this->object()->print()->config(); + const auto &print_config = this->object()->print()->config(); const bool spiral_mode = print_config.spiral_mode; const bool enable_arc_fitting = print_config.enable_arc_fitting; const auto scaled_resolution = scaled(print_config.resolution.value); @@ -410,7 +410,7 @@ void Layer::simplify_support_multi_path(ExtrusionMultiPath* multipath) //BBS: method to simplify support path void Layer::simplify_support_loop(ExtrusionLoop* loop) { - const auto print_config = this->object()->print()->config(); + const auto &print_config = this->object()->print()->config(); const bool spiral_mode = print_config.spiral_mode; const bool enable_arc_fitting = print_config.enable_arc_fitting; const auto scaled_resolution = scaled(print_config.resolution.value); diff --git a/src/libslic3r/LayerRegion.cpp b/src/libslic3r/LayerRegion.cpp index 99b20e50f3..5bc68c4ca5 100644 --- a/src/libslic3r/LayerRegion.cpp +++ b/src/libslic3r/LayerRegion.cpp @@ -1101,7 +1101,7 @@ void LayerRegion::simplify_entity_collection(ExtrusionEntityCollection* entity_c void LayerRegion::simplify_path(ExtrusionPath* path) { - const auto print_config = this->layer()->object()->print()->config(); + const auto &print_config = this->layer()->object()->print()->config(); const bool spiral_mode = print_config.spiral_mode; const bool enable_arc_fitting = print_config.enable_arc_fitting; const auto scaled_resolution = scaled(print_config.resolution.value); @@ -1119,7 +1119,7 @@ void LayerRegion::simplify_path(ExtrusionPath* path) void LayerRegion::simplify_multi_path(ExtrusionMultiPath* multipath) { - const auto print_config = this->layer()->object()->print()->config(); + const auto &print_config = this->layer()->object()->print()->config(); const bool spiral_mode = print_config.spiral_mode; const bool enable_arc_fitting = print_config.enable_arc_fitting; const auto scaled_resolution = scaled(print_config.resolution.value); @@ -1139,7 +1139,7 @@ void LayerRegion::simplify_multi_path(ExtrusionMultiPath* multipath) void LayerRegion::simplify_loop(ExtrusionLoop* loop) { - const auto print_config = this->layer()->object()->print()->config(); + const auto &print_config = this->layer()->object()->print()->config(); const bool spiral_mode = print_config.spiral_mode; const bool enable_arc_fitting = print_config.enable_arc_fitting; const auto scaled_resolution = scaled(print_config.resolution.value); diff --git a/src/libslic3r/Support/TreeSupport.cpp b/src/libslic3r/Support/TreeSupport.cpp index 26838de593..a92b3196cc 100644 --- a/src/libslic3r/Support/TreeSupport.cpp +++ b/src/libslic3r/Support/TreeSupport.cpp @@ -1944,7 +1944,7 @@ Polygons TreeSupport::get_trim_support_regions( static const double no_overlap_xy_gap = 0.2f; double gap_xy_scaled = scale_(gap_xy); SupportLayer& support_layer = *support_layer_ptr; - auto m_print_config = object.print()->config(); + const PrintConfig& print_config = object.print()->config(); size_t idx_object_layer_overlapping = size_t(-1); @@ -1991,7 +1991,7 @@ Polygons TreeSupport::get_trim_support_regions( const Layer& object_layer = *object.layers()[i]; bool some_region_overlaps = false; for (LayerRegion* region : object_layer.regions()) { - coordf_t bridging_height = region->region().bridging_height_avg(m_print_config); + coordf_t bridging_height = region->region().bridging_height_avg(print_config); if (object_layer.print_z - bridging_height > support_layer.print_z + gap_extra_above - EPSILON) break; some_region_overlaps = true;