Pattern layout performance improvement (#3495)

This commit is contained in:
Tim Sylvester
2025-05-30 09:58:19 -07:00
committed by GitHub
parent 806fad4f75
commit 5ac3a2e901
2 changed files with 16 additions and 9 deletions

View File

@@ -1,5 +1,4 @@
#pragma once
#include <list>
#include <mbgl/geometry/feature_index.hpp>
#include <mbgl/layout/layout.hpp>
#include <mbgl/renderer/bucket_parameters.hpp>
@@ -18,25 +17,33 @@ public:
std::string max;
};
using PatternLayerMap = std::map<std::string, PatternDependency>;
using PatternLayerMap = mbgl::unordered_map<std::string, PatternDependency>;
class PatternFeature {
public:
PatternFeature(std::size_t i_,
std::unique_ptr<GeometryTileFeature> feature_,
PatternLayerMap patterns_,
std::unique_ptr<GeometryTileFeature>&& feature_,
PatternLayerMap&& patterns_,
float sortKey_ = 0.0f)
: i(i_),
feature(std::move(feature_)),
patterns(std::move(patterns_)),
sortKey(sortKey_) {}
sortKey(sortKey_),
patterns(std::make_unique<PatternLayerMap>(std::move(patterns_))) {}
PatternFeature(const PatternFeature&) = delete;
PatternFeature(PatternFeature&&) = default;
PatternFeature& operator=(const PatternFeature&) = delete;
PatternFeature& operator=(PatternFeature&&) = default;
const PatternLayerMap& getPatterns() const { return *patterns; }
friend bool operator<(const PatternFeature& lhs, const PatternFeature& rhs) { return lhs.sortKey < rhs.sortKey; }
std::size_t i;
std::unique_ptr<GeometryTileFeature> feature;
PatternLayerMap patterns;
float sortKey;
protected:
std::unique_ptr<PatternLayerMap> patterns;
};
template <typename SortKeyPropertyType>
@@ -182,7 +189,7 @@ public:
for (auto& patternFeature : features) {
const auto i = patternFeature.i;
std::unique_ptr<GeometryTileFeature> feature = std::move(patternFeature.feature);
const PatternLayerMap& patterns = patternFeature.patterns;
const PatternLayerMap& patterns = patternFeature.getPatterns();
const GeometryCollection& geometries = feature->getGeometries();
bucket->addFeature(*feature, geometries, patternPositions, patterns, i, canonical);

View File

@@ -19,7 +19,7 @@ class RenderLayer;
class CrossTileSymbolLayerIndex;
class OverscaledTileID;
class PatternDependency;
using PatternLayerMap = std::map<std::string, PatternDependency>;
using PatternLayerMap = mbgl::unordered_map<std::string, PatternDependency>;
class Placement;
class TransformState;
class BucketPlacementData;