From 8e5fc4c198cf2c5f11718c8c0dc0bdc98b58883f Mon Sep 17 00:00:00 2001 From: Tim Sylvester Date: Tue, 13 Feb 2024 07:40:25 -0800 Subject: [PATCH] Minor optimizations (#2091) --- src/mbgl/gfx/vertex_vector.hpp | 2 ++ src/mbgl/layout/symbol_projection.cpp | 8 +++++++- src/mbgl/renderer/layers/render_background_layer.cpp | 2 -- src/mbgl/renderer/layers/render_circle_layer.cpp | 2 -- src/mbgl/renderer/layers/render_custom_drawable_layer.cpp | 2 -- src/mbgl/renderer/layers/render_custom_layer.cpp | 2 -- src/mbgl/renderer/layers/render_fill_layer.cpp | 2 -- src/mbgl/renderer/layers/render_heatmap_layer.cpp | 2 -- src/mbgl/renderer/layers/render_hillshade_layer.cpp | 2 -- src/mbgl/renderer/layers/render_line_layer.cpp | 2 -- src/mbgl/renderer/layers/render_raster_layer.cpp | 2 -- src/mbgl/renderer/render_layer.hpp | 2 -- 12 files changed, 9 insertions(+), 21 deletions(-) diff --git a/src/mbgl/gfx/vertex_vector.hpp b/src/mbgl/gfx/vertex_vector.hpp index 94d26a13c..3be534149 100644 --- a/src/mbgl/gfx/vertex_vector.hpp +++ b/src/mbgl/gfx/vertex_vector.hpp @@ -98,6 +98,8 @@ public: v.clear(); } + void reserve(std::size_t count) { v.reserve(count); } + /// Indicate that this shared vertex vector instance will no longer be updated. void release() { #if MLN_DRAWABLE_RENDERER diff --git a/src/mbgl/layout/symbol_projection.cpp b/src/mbgl/layout/symbol_projection.cpp index c8b6816f7..57ab09242 100644 --- a/src/mbgl/layout/symbol_projection.cpp +++ b/src/mbgl/layout/symbol_projection.cpp @@ -146,6 +146,9 @@ void addDynamicAttributes(const Point& anchorPoint, void hideGlyphs(size_t numGlyphs, gfx::VertexVector>& dynamicVertexArray) { const Point offscreenPoint = {-INFINITY, -INFINITY}; + if (dynamicVertexArray.empty()) { + dynamicVertexArray.reserve(4 * numGlyphs); + } for (size_t i = 0; i < numGlyphs; i++) { addDynamicAttributes(offscreenPoint, 0, dynamicVertexArray); } @@ -270,7 +273,6 @@ std::optional> placeFirstAndLastGlyph(const const float firstGlyphOffset = symbol.glyphOffsets.front(); const float lastGlyphOffset = symbol.glyphOffsets.back(); - ; std::optional firstPlacedGlyph = placeGlyphAlongLine(fontScale * firstGlyphOffset, lineOffsetX, @@ -365,6 +367,7 @@ PlacementResult placeGlyphsAlongLine(const PlacedSymbol& symbol, } } + placedGlyphs.reserve(symbol.glyphOffsets.size()); placedGlyphs.push_back(firstAndLastGlyph->first); for (size_t glyphIndex = 1; glyphIndex < symbol.glyphOffsets.size() - 1; glyphIndex++) { const float glyphOffsetX = symbol.glyphOffsets[glyphIndex]; @@ -429,6 +432,9 @@ PlacementResult placeGlyphsAlongLine(const PlacedSymbol& symbol, // The number of placedGlyphs must equal the number of glyphOffsets, which // must correspond to the number of glyph vertices There may be 0 glyphs // here, if a label consists entirely of glyphs that have 0x0 dimensions + if (dynamicVertexArray.empty()) { + dynamicVertexArray.reserve(4 * placedGlyphs.size()); + } for (auto& placedGlyph : placedGlyphs) { addDynamicAttributes(placedGlyph.point, placedGlyph.angle, dynamicVertexArray); } diff --git a/src/mbgl/renderer/layers/render_background_layer.cpp b/src/mbgl/renderer/layers/render_background_layer.cpp index 437c92dce..661a9e186 100644 --- a/src/mbgl/renderer/layers/render_background_layer.cpp +++ b/src/mbgl/renderer/layers/render_background_layer.cpp @@ -215,8 +215,6 @@ void RenderBackgroundLayer::update(gfx::ShaderRegistry& shaders, const std::shared_ptr&, [[maybe_unused]] const RenderTree& renderTree, [[maybe_unused]] UniqueChangeRequestVec& changes) { - std::unique_lock guard(mutex); - const auto zoom = state.getIntegerZoom(); const auto tileCover = util::tileCover(state, zoom); diff --git a/src/mbgl/renderer/layers/render_circle_layer.cpp b/src/mbgl/renderer/layers/render_circle_layer.cpp index 9a11ca919..fe10a003d 100644 --- a/src/mbgl/renderer/layers/render_circle_layer.cpp +++ b/src/mbgl/renderer/layers/render_circle_layer.cpp @@ -276,8 +276,6 @@ void RenderCircleLayer::update(gfx::ShaderRegistry& shaders, [[maybe_unused]] const std::shared_ptr&, [[maybe_unused]] const RenderTree& renderTree, UniqueChangeRequestVec& changes) { - std::unique_lock guard(mutex); - if (!renderTiles || renderTiles->empty()) { removeAllDrawables(); return; diff --git a/src/mbgl/renderer/layers/render_custom_drawable_layer.cpp b/src/mbgl/renderer/layers/render_custom_drawable_layer.cpp index c6f220756..4b111e903 100644 --- a/src/mbgl/renderer/layers/render_custom_drawable_layer.cpp +++ b/src/mbgl/renderer/layers/render_custom_drawable_layer.cpp @@ -65,8 +65,6 @@ void RenderCustomDrawableLayer::update(gfx::ShaderRegistry& shaders, const std::shared_ptr& updateParameters, const RenderTree& renderTree, UniqueChangeRequestVec& changes) { - std::unique_lock guard(mutex); - // check if host changed and update bool hostChanged = (host != impl(baseImpl).host); if (hostChanged) { diff --git a/src/mbgl/renderer/layers/render_custom_layer.cpp b/src/mbgl/renderer/layers/render_custom_layer.cpp index 16cba64f0..39647a08f 100644 --- a/src/mbgl/renderer/layers/render_custom_layer.cpp +++ b/src/mbgl/renderer/layers/render_custom_layer.cpp @@ -125,8 +125,6 @@ void RenderCustomLayer::update([[maybe_unused]] gfx::ShaderRegistry& shaders, const std::shared_ptr&, [[maybe_unused]] const RenderTree& renderTree, [[maybe_unused]] UniqueChangeRequestVec& changes) { - std::unique_lock guard(mutex); - // create layer group if (!layerGroup) { if (auto layerGroup_ = context.createLayerGroup(layerIndex, /*initialCapacity=*/1, getID())) { diff --git a/src/mbgl/renderer/layers/render_fill_layer.cpp b/src/mbgl/renderer/layers/render_fill_layer.cpp index 58367aac2..315f3ac40 100644 --- a/src/mbgl/renderer/layers/render_fill_layer.cpp +++ b/src/mbgl/renderer/layers/render_fill_layer.cpp @@ -400,8 +400,6 @@ void RenderFillLayer::update(gfx::ShaderRegistry& shaders, const std::shared_ptr&, [[maybe_unused]] const RenderTree& renderTree, [[maybe_unused]] UniqueChangeRequestVec& changes) { - std::unique_lock guard(mutex); - if (!renderTiles || renderTiles->empty()) { removeAllDrawables(); return; diff --git a/src/mbgl/renderer/layers/render_heatmap_layer.cpp b/src/mbgl/renderer/layers/render_heatmap_layer.cpp index 20413c708..0541bd67a 100644 --- a/src/mbgl/renderer/layers/render_heatmap_layer.cpp +++ b/src/mbgl/renderer/layers/render_heatmap_layer.cpp @@ -292,8 +292,6 @@ void RenderHeatmapLayer::update(gfx::ShaderRegistry& shaders, const std::shared_ptr&, [[maybe_unused]] const RenderTree& renderTree, UniqueChangeRequestVec& changes) { - std::unique_lock guard(mutex); - if (!renderTiles || renderTiles->empty()) { removeAllDrawables(); return; diff --git a/src/mbgl/renderer/layers/render_hillshade_layer.cpp b/src/mbgl/renderer/layers/render_hillshade_layer.cpp index 5d3151e7e..2eb129880 100644 --- a/src/mbgl/renderer/layers/render_hillshade_layer.cpp +++ b/src/mbgl/renderer/layers/render_hillshade_layer.cpp @@ -304,8 +304,6 @@ void RenderHillshadeLayer::update(gfx::ShaderRegistry& shaders, const std::shared_ptr&, [[maybe_unused]] const RenderTree& renderTree, UniqueChangeRequestVec& changes) { - std::unique_lock guard(mutex); - if (!renderTiles || renderTiles->empty()) { removeAllDrawables(); return; diff --git a/src/mbgl/renderer/layers/render_line_layer.cpp b/src/mbgl/renderer/layers/render_line_layer.cpp index eecbfe52c..6d21a77f2 100644 --- a/src/mbgl/renderer/layers/render_line_layer.cpp +++ b/src/mbgl/renderer/layers/render_line_layer.cpp @@ -353,8 +353,6 @@ void RenderLineLayer::update(gfx::ShaderRegistry& shaders, const std::shared_ptr&, [[maybe_unused]] const RenderTree& renderTree, [[maybe_unused]] UniqueChangeRequestVec& changes) { - std::unique_lock guard(mutex); - if (!renderTiles || renderTiles->empty()) { removeAllDrawables(); return; diff --git a/src/mbgl/renderer/layers/render_raster_layer.cpp b/src/mbgl/renderer/layers/render_raster_layer.cpp index 51f1920aa..58d043c70 100644 --- a/src/mbgl/renderer/layers/render_raster_layer.cpp +++ b/src/mbgl/renderer/layers/render_raster_layer.cpp @@ -256,8 +256,6 @@ void RenderRasterLayer::update(gfx::ShaderRegistry& shaders, const std::shared_ptr&, [[maybe_unused]] const RenderTree& renderTree, [[maybe_unused]] UniqueChangeRequestVec& changes) { - std::unique_lock guard(mutex); - if ((!renderTiles || renderTiles->empty()) && !imageData) { if (layerGroup) { stats.drawablesRemoved += layerGroup->clearDrawables(); diff --git a/src/mbgl/renderer/render_layer.hpp b/src/mbgl/renderer/render_layer.hpp index ba1e06cdc..84fb70d22 100644 --- a/src/mbgl/renderer/render_layer.hpp +++ b/src/mbgl/renderer/render_layer.hpp @@ -302,8 +302,6 @@ protected: // Current renderable status as specified by the markLayerRenderable event bool isRenderable{false}; - std::mutex mutex; - struct Stats { size_t propertyEvaluations = 0; size_t drawablesAdded = 0;