diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/mbgl/renderer/render_orchestrator.cpp | 21 | ||||
-rw-r--r-- | src/mbgl/text/placement.cpp | 8 | ||||
-rw-r--r-- | src/mbgl/text/placement.hpp | 2 |
3 files changed, 17 insertions, 14 deletions
diff --git a/src/mbgl/renderer/render_orchestrator.cpp b/src/mbgl/renderer/render_orchestrator.cpp index f00f9ee9be..7fb6eff29c 100644 --- a/src/mbgl/renderer/render_orchestrator.cpp +++ b/src/mbgl/renderer/render_orchestrator.cpp @@ -281,6 +281,7 @@ std::unique_ptr<RenderTree> RenderOrchestrator::createRenderTree( renderSources.emplace(entry.first, std::move(renderSource)); } transformState = updateParameters->transformState; + const bool tiltedView = transformState.getPitch() != 0.0f; // Create parameters for the render tree. auto renderTreeParameters = std::make_unique<RenderTreeParameters>(updateParameters->transformState, @@ -386,14 +387,20 @@ std::unique_ptr<RenderTree> RenderOrchestrator::createRenderTree( symbolBucketsAdded = symbolBucketsAdded || (result & CrossTileSymbolIndex::AddLayerResult::BucketsAdded); symbolBucketsChanged = symbolBucketsChanged || (result != CrossTileSymbolIndex::AddLayerResult::NoChanges); } - // We want new symbols to show up faster, however simple setting `placementChanged` to `true` would - // initiate placement too often as new buckets ususally come from several rendered tiles in a row within - // a short period of time. Instead, we squeeze placement update period to coalesce buckets updates from several - // tiles. - optional<Duration> maximumPlacementUpdatePeriod; - if (symbolBucketsAdded) maximumPlacementUpdatePeriod = optional<Duration>(Milliseconds(30)); + + optional<Duration> placementUpdatePeriodOverride; + if (symbolBucketsAdded && !tiltedView) { + // If the view is not tilted, we want *the new* symbols to show up faster, however simple setting + // `placementChanged` to `true` would initiate placement too often as new buckets usually come from several + // rendered tiles in a row within a short period of time. Instead, we squeeze placement update period to + // coalesce buckets updates from several tiles. On contrary, with the tilted view it's more important to + // make placement rarely for performance reasons and as the new symbols are normally "far away" and the user + // is not that interested to see them ASAP. + placementUpdatePeriodOverride = optional<Duration>(Milliseconds(30)); + } + renderTreeParameters->placementChanged = !placementController.placementIsRecent( - updateParameters->timePoint, updateParameters->transformState.getZoom(), maximumPlacementUpdatePeriod); + updateParameters->timePoint, updateParameters->transformState.getZoom(), placementUpdatePeriodOverride); symbolBucketsChanged |= renderTreeParameters->placementChanged; std::set<std::string> usedSymbolLayers; diff --git a/src/mbgl/text/placement.cpp b/src/mbgl/text/placement.cpp index f5e0be0829..d8cf4653c6 100644 --- a/src/mbgl/text/placement.cpp +++ b/src/mbgl/text/placement.cpp @@ -68,14 +68,10 @@ void PlacementController::setPlacement(Immutable<Placement> placement_) { stale = false; } -bool PlacementController::placementIsRecent(TimePoint now, const float zoom, optional<Duration> maximumDuration) const { +bool PlacementController::placementIsRecent(TimePoint now, const float zoom, optional<Duration> periodOverride) const { if (!placement->transitionsEnabled()) return false; - auto updatePeriod = placement->getUpdatePeriod(zoom); - - if (maximumDuration) { - updatePeriod = std::min(*maximumDuration, updatePeriod); - } + auto updatePeriod = periodOverride ? *periodOverride : placement->getUpdatePeriod(zoom); return placement->getCommitTime() + updatePeriod > now; } diff --git a/src/mbgl/text/placement.hpp b/src/mbgl/text/placement.hpp index b2ad5d62e0..2ceb531d44 100644 --- a/src/mbgl/text/placement.hpp +++ b/src/mbgl/text/placement.hpp @@ -96,7 +96,7 @@ public: void setPlacement(Immutable<Placement>); const Immutable<Placement>& getPlacement() const { return placement; } void setPlacementStale() { stale = true; } - bool placementIsRecent(TimePoint now, const float zoom, optional<Duration> maximumDuration = nullopt) const; + bool placementIsRecent(TimePoint now, const float zoom, optional<Duration> periodOverride = nullopt) const; bool hasTransitions(TimePoint now) const; private: |