diff options
Diffstat (limited to 'src/mbgl/renderer/render_orchestrator.cpp')
-rw-r--r-- | src/mbgl/renderer/render_orchestrator.cpp | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/src/mbgl/renderer/render_orchestrator.cpp b/src/mbgl/renderer/render_orchestrator.cpp index c42273eca2..7df74cda71 100644 --- a/src/mbgl/renderer/render_orchestrator.cpp +++ b/src/mbgl/renderer/render_orchestrator.cpp @@ -271,11 +271,17 @@ std::unique_ptr<RenderTree> RenderOrchestrator::createRenderTree(const UpdatePar std::vector<std::reference_wrapper<RenderLayer>> layersNeedPlacement; auto renderItemsEmplaceHint = layerRenderItems.begin(); + // Reserve size for filteredLayersForSource if there are sources. + if (!sourceImpls->empty()) { + filteredLayersForSource.reserve(layerImpls->size()); + if (filteredLayersForSource.capacity() > layerImpls->size()) { + filteredLayersForSource.shrink_to_fit(); + } + } + // Update all sources and initialize renderItems. for (const auto& sourceImpl : *sourceImpls) { RenderSource* source = renderSources.at(sourceImpl->id).get(); - std::vector<Immutable<LayerProperties>> filteredLayersForSource; - filteredLayersForSource.reserve(layerImpls->size()); bool sourceNeedsRendering = false; bool sourceNeedsRelayout = false; @@ -321,6 +327,7 @@ std::unique_ptr<RenderTree> RenderOrchestrator::createRenderTree(const UpdatePar sourceNeedsRendering, sourceNeedsRelayout, tileParameters); + filteredLayersForSource.clear(); } renderTreeParameters->loaded = updateParameters.styleLoaded && isLoaded(); |