summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com>2020-01-20 09:14:11 +0200
committerMikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com>2020-01-20 09:14:59 +0200
commit5d4317653627ccc444c9577390d7065f9bd9a6ac (patch)
tree142a0648764e29b2daf940466c42d0bc3034d04e
parent73a5d27b95afcb8e60777dba708875aa23be1b27 (diff)
downloadqtlocation-mapboxgl-upstream/cross_tile_index_performance.tar.gz
[core] Pass TransformState to the cross tile symbol indexupstream/cross_tile_index_performance
-rw-r--r--src/mbgl/renderer/bucket.hpp4
-rw-r--r--src/mbgl/renderer/buckets/symbol_bucket.cpp5
-rw-r--r--src/mbgl/renderer/buckets/symbol_bucket.hpp4
-rw-r--r--src/mbgl/renderer/render_orchestrator.cpp3
-rw-r--r--src/mbgl/text/cross_tile_symbol_index.cpp10
-rw-r--r--src/mbgl/text/cross_tile_symbol_index.hpp5
6 files changed, 19 insertions, 12 deletions
diff --git a/src/mbgl/renderer/bucket.hpp b/src/mbgl/renderer/bucket.hpp
index 3e756a06a4..5a535920cd 100644
--- a/src/mbgl/renderer/bucket.hpp
+++ b/src/mbgl/renderer/bucket.hpp
@@ -56,7 +56,9 @@ public:
// Returns a pair, the first element of which is a bucket cross-tile id
// on success call; `0` otherwise. The second element is `true` if
// the bucket was originally registered; `false` otherwise.
- virtual std::pair<uint32_t, bool> registerAtCrossTileIndex(CrossTileSymbolLayerIndex&, const OverscaledTileID&) {
+ virtual std::pair<uint32_t, bool> registerAtCrossTileIndex(CrossTileSymbolLayerIndex&,
+ const OverscaledTileID&,
+ const TransformState&) {
return std::make_pair(0u, false);
}
// Places this bucket to the given placement.
diff --git a/src/mbgl/renderer/buckets/symbol_bucket.cpp b/src/mbgl/renderer/buckets/symbol_bucket.cpp
index 382aac6563..09775ce12f 100644
--- a/src/mbgl/renderer/buckets/symbol_bucket.cpp
+++ b/src/mbgl/renderer/buckets/symbol_bucket.cpp
@@ -296,8 +296,9 @@ bool SymbolBucket::hasFormatSectionOverrides() const {
}
std::pair<uint32_t, bool> SymbolBucket::registerAtCrossTileIndex(CrossTileSymbolLayerIndex& index,
- const OverscaledTileID& tileID) {
- bool firstTimeAdded = index.addBucket(tileID, *this);
+ const OverscaledTileID& tileID,
+ const TransformState& transformState) {
+ bool firstTimeAdded = index.addBucket(tileID, *this, transformState);
return std::make_pair(bucketInstanceId, firstTimeAdded);
}
diff --git a/src/mbgl/renderer/buckets/symbol_bucket.hpp b/src/mbgl/renderer/buckets/symbol_bucket.hpp
index 432589a52b..fce43c1cac 100644
--- a/src/mbgl/renderer/buckets/symbol_bucket.hpp
+++ b/src/mbgl/renderer/buckets/symbol_bucket.hpp
@@ -81,7 +81,9 @@ public:
void upload(gfx::UploadPass&) override;
bool hasData() const override;
- std::pair<uint32_t, bool> registerAtCrossTileIndex(CrossTileSymbolLayerIndex&, const OverscaledTileID&) override;
+ std::pair<uint32_t, bool> registerAtCrossTileIndex(CrossTileSymbolLayerIndex&,
+ const OverscaledTileID&,
+ const TransformState& transformState) override;
void place(Placement&, const BucketPlacementParameters&, std::set<uint32_t>&) override;
void updateVertices(
const Placement&, bool updateOpacities, const TransformState&, const RenderTile&, std::set<uint32_t>&) override;
diff --git a/src/mbgl/renderer/render_orchestrator.cpp b/src/mbgl/renderer/render_orchestrator.cpp
index 79059164ae..21d13f8021 100644
--- a/src/mbgl/renderer/render_orchestrator.cpp
+++ b/src/mbgl/renderer/render_orchestrator.cpp
@@ -375,11 +375,10 @@ std::unique_ptr<RenderTree> RenderOrchestrator::createRenderTree(
}
// Symbol placement.
bool symbolBucketsChanged = false;
- auto longitude = updateParameters->transformState.getLatLng().longitude();
if (isMapModeContinuous) {
bool symbolBucketsAdded = false;
for (auto it = layersNeedPlacement.crbegin(); it != layersNeedPlacement.crend(); ++it) {
- auto result = crossTileSymbolIndex.addLayer(*it, longitude);
+ auto result = crossTileSymbolIndex.addLayer(*it, updateParameters->transformState);
symbolBucketsAdded = symbolBucketsAdded || (result & CrossTileSymbolIndex::AddLayerResult::BucketsAdded);
symbolBucketsChanged = symbolBucketsChanged || (result != CrossTileSymbolIndex::AddLayerResult::NoChanges);
}
diff --git a/src/mbgl/text/cross_tile_symbol_index.cpp b/src/mbgl/text/cross_tile_symbol_index.cpp
index 5b9d6ae69c..2faf79ddf0 100644
--- a/src/mbgl/text/cross_tile_symbol_index.cpp
+++ b/src/mbgl/text/cross_tile_symbol_index.cpp
@@ -95,7 +95,9 @@ void CrossTileSymbolLayerIndex::handleWrapJump(float newLng) {
lng = newLng;
}
-bool CrossTileSymbolLayerIndex::addBucket(const OverscaledTileID& tileID, SymbolBucket& bucket) {
+bool CrossTileSymbolLayerIndex::addBucket(const OverscaledTileID& tileID,
+ SymbolBucket& bucket,
+ const TransformState& /*transformState*/) {
auto& thisZoomIndexes = indexes[tileID.overscaledZ];
auto previousIndex = thisZoomIndexes.find(tileID);
if (previousIndex != thisZoomIndexes.end()) {
@@ -176,7 +178,7 @@ bool CrossTileSymbolLayerIndex::removeStaleBuckets(const std::unordered_set<uint
CrossTileSymbolIndex::CrossTileSymbolIndex() = default;
-auto CrossTileSymbolIndex::addLayer(const RenderLayer& layer, float lng) -> AddLayerResult {
+auto CrossTileSymbolIndex::addLayer(const RenderLayer& layer, const TransformState& transformState) -> AddLayerResult {
auto found = layerIndexes.find(layer.getID());
if (found == layerIndexes.end()) {
found = layerIndexes
@@ -190,12 +192,12 @@ auto CrossTileSymbolIndex::addLayer(const RenderLayer& layer, float lng) -> AddL
AddLayerResult result = AddLayerResult::NoChanges;
std::unordered_set<uint32_t> currentBucketIDs;
- layerIndex.handleWrapJump(lng);
+ layerIndex.handleWrapJump(transformState.getLatLng().longitude());
for (const auto& item : layer.getPlacementData()) {
const RenderTile& renderTile = item.tile;
Bucket& bucket = item.bucket;
- auto pair = bucket.registerAtCrossTileIndex(layerIndex, renderTile.getOverscaledTileID());
+ auto pair = bucket.registerAtCrossTileIndex(layerIndex, renderTile.getOverscaledTileID(), transformState);
assert(pair.first != 0u);
if (pair.second) result |= AddLayerResult::BucketsAdded;
currentBucketIDs.insert(pair.first);
diff --git a/src/mbgl/text/cross_tile_symbol_index.hpp b/src/mbgl/text/cross_tile_symbol_index.hpp
index 3b7c367726..34a4f9c143 100644
--- a/src/mbgl/text/cross_tile_symbol_index.hpp
+++ b/src/mbgl/text/cross_tile_symbol_index.hpp
@@ -18,6 +18,7 @@ namespace mbgl {
class SymbolInstance;
class RenderLayer;
class SymbolBucket;
+class TransformState;
class IndexedSymbolInstance {
public:
@@ -48,7 +49,7 @@ public:
class CrossTileSymbolLayerIndex {
public:
CrossTileSymbolLayerIndex(uint32_t& maxCrossTileID);
- bool addBucket(const OverscaledTileID&, SymbolBucket&);
+ bool addBucket(const OverscaledTileID&, SymbolBucket&, const TransformState& transformState);
bool removeStaleBuckets(const std::unordered_set<uint32_t>& currentIDs);
void handleWrapJump(float newLng);
private:
@@ -70,7 +71,7 @@ public:
BucketsRemoved = 1 << 1
};
- AddLayerResult addLayer(const RenderLayer& layer, float lng);
+ AddLayerResult addLayer(const RenderLayer& layer, const TransformState&);
void pruneUnusedLayers(const std::set<std::string>&);
void reset();