summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThiago Marcos P. Santos <thiago@mapbox.com>2015-05-07 16:09:15 +0300
committerThiago Marcos P. Santos <thiago@mapbox.com>2015-05-18 10:42:05 +0300
commit3f445e8578b25dbe4adccacd59f317cbb3b9a8d7 (patch)
treea2ac6bc8e96a4b553927fbbc55410e2afcbf271e
parent41dc5e836a9b37a8c3bf4f1116de09aceec4264d (diff)
downloadqtlocation-mapboxgl-3f445e8578b25dbe4adccacd59f317cbb3b9a8d7.tar.gz
Do not process partial tiles if no new resources have arrived
Partial tiles are now only processed again when there is a new resource available. If we don't have new resources - like new glyphs - the end result of the reparsing is the same, because no new SymbolBuckets would are created. In my tests debugging with PowerTOP, this patch drops the CPU utilization during the sampling period from 100ms/s to 40ms/s. The improvements on slow connections (i.e. more time waiting for resources) are even more noticeable.
-rw-r--r--src/mbgl/map/resource_loader.cpp8
-rw-r--r--src/mbgl/map/resource_loader.hpp2
-rw-r--r--src/mbgl/map/source.cpp6
-rw-r--r--src/mbgl/map/source.hpp3
4 files changed, 15 insertions, 4 deletions
diff --git a/src/mbgl/map/resource_loader.cpp b/src/mbgl/map/resource_loader.cpp
index 0f5c33abd2..46b7af9a28 100644
--- a/src/mbgl/map/resource_loader.cpp
+++ b/src/mbgl/map/resource_loader.cpp
@@ -85,11 +85,15 @@ void ResourceLoader::update(MapData& data,
for (const auto& source : style_->sources) {
source->update(data, transform, *style_, glyphAtlas, *glyphStore_,
- spriteAtlas, sprite_, texturePool);
+ spriteAtlas, sprite_, texturePool, shouldReparsePartialTiles_);
}
+
+ shouldReparsePartialTiles_ = false;
}
void ResourceLoader::onGlyphRangeLoaded() {
+ shouldReparsePartialTiles_ = true;
+
emitTileDataChanged();
}
@@ -102,6 +106,8 @@ void ResourceLoader::onTileLoaded() {
}
void ResourceLoader::onSpriteLoaded() {
+ shouldReparsePartialTiles_ = true;
+
emitTileDataChanged();
}
diff --git a/src/mbgl/map/resource_loader.hpp b/src/mbgl/map/resource_loader.hpp
index 6f63fe2260..cf73db5fa8 100644
--- a/src/mbgl/map/resource_loader.hpp
+++ b/src/mbgl/map/resource_loader.hpp
@@ -73,6 +73,8 @@ public:
private:
void emitTileDataChanged();
+ bool shouldReparsePartialTiles_ = false;
+
std::string accessToken_;
util::ptr<Sprite> sprite_;
diff --git a/src/mbgl/map/source.cpp b/src/mbgl/map/source.cpp
index 686b15c24e..501dde5c25 100644
--- a/src/mbgl/map/source.cpp
+++ b/src/mbgl/map/source.cpp
@@ -384,7 +384,8 @@ void Source::update(MapData& data,
GlyphStore& glyphStore,
SpriteAtlas& spriteAtlas,
util::ptr<Sprite> sprite,
- TexturePool& texturePool) {
+ TexturePool& texturePool,
+ bool shouldReparsePartialTiles) {
if (!loaded || data.getAnimationTime() <= updated) {
return;
}
@@ -407,7 +408,8 @@ void Source::update(MapData& data,
switch (state) {
case TileData::State::partial:
- handlePartialTile(id, style.workers);
+ if (shouldReparsePartialTiles)
+ handlePartialTile(id, style.workers);
break;
case TileData::State::invalid:
state = addTile(data, transformState, style, glyphAtlas, glyphStore,
diff --git a/src/mbgl/map/source.hpp b/src/mbgl/map/source.hpp
index 15cc8a817b..d5f4f8b5d0 100644
--- a/src/mbgl/map/source.hpp
+++ b/src/mbgl/map/source.hpp
@@ -75,7 +75,8 @@ public:
GlyphStore&,
SpriteAtlas&,
util::ptr<Sprite>,
- TexturePool&);
+ TexturePool&,
+ bool shouldReparsePartialTiles);
void invalidateTiles(const std::vector<TileID>&);