From b43e1ae12328e8a36a9a36c03e49e1db0a395189 Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Wed, 19 Jul 2017 17:59:50 -0700 Subject: [core] Correctly track sprite loaded state through smart setStyle --- mapbox-gl-js | 2 +- src/mbgl/renderer/image_manager.cpp | 21 ++++++++++++++++----- src/mbgl/renderer/image_manager.hpp | 7 ++----- src/mbgl/renderer/render_style.cpp | 4 +--- src/mbgl/style/style_impl.cpp | 1 + test/renderer/image_manager.test.cpp | 2 +- 6 files changed, 22 insertions(+), 15 deletions(-) diff --git a/mapbox-gl-js b/mapbox-gl-js index f27666813d..31444a72c2 160000 --- a/mapbox-gl-js +++ b/mapbox-gl-js @@ -1 +1 @@ -Subproject commit f27666813dd8e3d738a3962b3d86d0ec799b6fc7 +Subproject commit 31444a72c2dafdd7dba99dc3bf5428c155e07cf4 diff --git a/src/mbgl/renderer/image_manager.cpp b/src/mbgl/renderer/image_manager.cpp index d0a106ede6..692747bca4 100644 --- a/src/mbgl/renderer/image_manager.cpp +++ b/src/mbgl/renderer/image_manager.cpp @@ -4,12 +4,23 @@ namespace mbgl { -void ImageManager::onSpriteLoaded() { - loaded = true; - for (const auto& entry : requestors) { - notify(*entry.first, entry.second); +void ImageManager::setLoaded(bool loaded_) { + if (loaded == loaded_) { + return; } - requestors.clear(); + + loaded = loaded_; + + if (loaded) { + for (const auto& entry : requestors) { + notify(*entry.first, entry.second); + } + requestors.clear(); + } +} + +bool ImageManager::isLoaded() const { + return loaded; } void ImageManager::addImage(Immutable image_) { diff --git a/src/mbgl/renderer/image_manager.hpp b/src/mbgl/renderer/image_manager.hpp index 9a9a4ce997..1c9d67f47d 100644 --- a/src/mbgl/renderer/image_manager.hpp +++ b/src/mbgl/renderer/image_manager.hpp @@ -39,11 +39,8 @@ public: ImageManager(); ~ImageManager(); - void onSpriteLoaded(); - - bool isLoaded() const { - return loaded; - } + void setLoaded(bool); + bool isLoaded() const; void dumpDebugLogs() const; diff --git a/src/mbgl/renderer/render_style.cpp b/src/mbgl/renderer/render_style.cpp index 2bf903fe5f..3d95b12bc4 100644 --- a/src/mbgl/renderer/render_style.cpp +++ b/src/mbgl/renderer/render_style.cpp @@ -143,9 +143,7 @@ void RenderStyle::update(const UpdateParameters& parameters) { imageManager->updateImage(entry.second.after); } - if (parameters.spriteLoaded && !imageManager->isLoaded()) { - imageManager->onSpriteLoaded(); - } + imageManager->setLoaded(parameters.spriteLoaded); const LayerDifference layerDiff = diffLayers(layerImpls, parameters.layers); diff --git a/src/mbgl/style/style_impl.cpp b/src/mbgl/style/style_impl.cpp index 2d42afd086..9cc2588ca7 100644 --- a/src/mbgl/style/style_impl.cpp +++ b/src/mbgl/style/style_impl.cpp @@ -111,6 +111,7 @@ void Style::Impl::parse(const std::string& json_) { defaultPitch = parser.pitch; setLight(std::make_unique(parser.light)); + spriteLoaded = false; spriteLoader->load(parser.spriteURL, scheduler, fileSource); glyphURL = parser.glyphURL; diff --git a/test/renderer/image_manager.test.cpp b/test/renderer/image_manager.test.cpp index 203e05d492..5e6da5c005 100644 --- a/test/renderer/image_manager.test.cpp +++ b/test/renderer/image_manager.test.cpp @@ -127,7 +127,7 @@ TEST(ImageManager, NotifiesRequestorWhenSpriteIsLoaded) { imageManager.getImages(requestor, {"one"}); ASSERT_FALSE(notified); - imageManager.onSpriteLoaded(); + imageManager.setLoaded(true); ASSERT_TRUE(notified); } -- cgit v1.2.1