diff options
author | Fabian Guerra Soto <fabian.guerra@mapbox.com> | 2017-05-23 12:02:09 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-05-23 12:02:09 -0400 |
commit | fe17f7e8db266a125ac05d805003f5d2bf1548c6 (patch) | |
tree | 9d760b8f53dd60a363059ef6f776d8085be3990c /src/mbgl/tile | |
parent | 71b686517298e100f8021dca62db65a2ca9baad2 (diff) | |
download | qtlocation-mapboxgl-fe17f7e8db266a125ac05d805003f5d2bf1548c6.tar.gz |
Cherry-pick arabic text to release branch v3.6.0 (#9071)
* [core] Throttle tiles to redo symbol placement at most once every 300ms.
Fixes issue #8435 and prepares for pitch-scaling changes in issue #8967.
* [core] Disable letter-spacing for Arabic labels (issue #9057)
Diffstat (limited to 'src/mbgl/tile')
-rw-r--r-- | src/mbgl/tile/geometry_tile.cpp | 12 | ||||
-rw-r--r-- | src/mbgl/tile/geometry_tile.hpp | 5 |
2 files changed, 15 insertions, 2 deletions
diff --git a/src/mbgl/tile/geometry_tile.cpp b/src/mbgl/tile/geometry_tile.cpp index a8eda38284..29ba7d42cd 100644 --- a/src/mbgl/tile/geometry_tile.cpp +++ b/src/mbgl/tile/geometry_tile.cpp @@ -18,6 +18,7 @@ #include <mbgl/map/query.hpp> #include <mbgl/util/run_loop.hpp> #include <mbgl/style/filter_evaluator.hpp> +#include <mbgl/util/chrono.hpp> #include <mbgl/util/logging.hpp> #include <iostream> @@ -41,7 +42,8 @@ GeometryTile::GeometryTile(const OverscaledTileID& id_, obsolete, parameters.mode), glyphAtlas(glyphAtlas_), - spriteAtlas(spriteAtlas_) { + spriteAtlas(spriteAtlas_), + placementThrottler(Milliseconds(300), [this] { invokePlacement(); }) { } GeometryTile::~GeometryTile() { @@ -81,7 +83,13 @@ void GeometryTile::setPlacementConfig(const PlacementConfig& desiredConfig) { ++correlationID; requestedConfig = desiredConfig; - worker.invoke(&GeometryTileWorker::setPlacementConfig, desiredConfig, correlationID); + placementThrottler.invoke(); +} + +void GeometryTile::invokePlacement() { + if (requestedConfig) { + worker.invoke(&GeometryTileWorker::setPlacementConfig, *requestedConfig, correlationID); + } } void GeometryTile::redoLayout() { diff --git a/src/mbgl/tile/geometry_tile.hpp b/src/mbgl/tile/geometry_tile.hpp index 594952d329..ed5d8d87bf 100644 --- a/src/mbgl/tile/geometry_tile.hpp +++ b/src/mbgl/tile/geometry_tile.hpp @@ -6,6 +6,7 @@ #include <mbgl/text/glyph_atlas.hpp> #include <mbgl/text/placement_config.hpp> #include <mbgl/util/feature.hpp> +#include <mbgl/util/throttler.hpp> #include <mbgl/actor/actor.hpp> #include <atomic> @@ -87,6 +88,8 @@ protected: } private: + void invokePlacement(); + const std::string sourceID; style::Style& style; @@ -108,6 +111,8 @@ private: std::unordered_map<std::string, std::shared_ptr<Bucket>> symbolBuckets; std::unique_ptr<CollisionTile> collisionTile; + + util::Throttler placementThrottler; }; } // namespace mbgl |