From 610fb7d63cd75b4e34f4945d06d84615f065a030 Mon Sep 17 00:00:00 2001 From: Tim Sylvester Date: Mon, 8 May 2023 07:52:47 -0700 Subject: [PATCH] Drawable Renderer (#1570), Avoid adding empty items to the tile tracking map when a tile contains no data --- .../renderer/layers/render_fill_layer.cpp | 27 ++++++++++++++----- 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/src/mbgl/renderer/layers/render_fill_layer.cpp b/src/mbgl/renderer/layers/render_fill_layer.cpp index f5312d033..720e4b40d 100644 --- a/src/mbgl/renderer/layers/render_fill_layer.cpp +++ b/src/mbgl/renderer/layers/render_fill_layer.cpp @@ -422,17 +422,27 @@ void RenderFillLayer::update(const int32_t layerIndex, for (const RenderTile& tile : *renderTiles) { const auto& tileID = tile.getOverscaledTileID(); - const auto result = tileDrawables.insert(std::make_pair(tileID, gfx::DrawablePtr())); - if (!result.second) { - // Already present - continue; - } + const auto hit = tileDrawables.find(tileID); const auto renderPass = RenderPass::Translucent; const LayerRenderData* renderData = getRenderDataForPass(tile, renderPass); if (!renderData) { + // Remove the tile if it was previously present + if (hit != tileDrawables.end()) { + if (hit->second) { + changes.emplace_back(std::make_unique(hit->second->getId())); + } + tileDrawables.erase(hit); + ++stats.tileDrawablesRemoved; + } continue; } + + if (hit != tileDrawables.end()) { + // already present + continue; + } + auto& bucket = static_cast(*renderData->bucket); // const auto& evaluated = getEvaluated(renderData->layerProperties); @@ -496,7 +506,12 @@ void RenderFillLayer::update(const int32_t layerIndex, if (!newDrawables.empty()) { auto& drawable = newDrawables[0]; drawable->setTileID(tileID); - result.first->second = drawable; + + // Track it. + const auto result = tileDrawables.insert(std::make_pair(tileID, drawable)); + // This should always insert because we checked previously. + assert(result.second); + changes.emplace_back(std::make_unique(std::move(drawable))); ++stats.tileDrawablesAdded; // Log::Warning(Event::General, "Adding drawable for " + util::toString(tileID) + " total " +