diff options
author | Bruno de Oliveira Abinader <bruno@mapbox.com> | 2017-08-29 15:52:59 +0300 |
---|---|---|
committer | Bruno de Oliveira Abinader <bruno@mapbox.com> | 2017-08-29 15:53:41 +0300 |
commit | 1531b8235e47f48d0cb4e04590b847660158dee7 (patch) | |
tree | b444fc2cbbffbd10302768ea28ae34f42e7818e0 | |
parent | 833ab66a0ea45e5efc2da915f723b281e8c23c59 (diff) | |
download | qtlocation-mapboxgl-1531b8235e47f48d0cb4e04590b847660158dee7.tar.gz |
[core] Avoid redundant update/render calls in still modeupstream/still-mode-optimizations
-rw-r--r-- | src/mbgl/map/map.cpp | 16 | ||||
-rw-r--r-- | src/mbgl/renderer/renderer_impl.cpp | 11 |
2 files changed, 20 insertions, 7 deletions
diff --git a/src/mbgl/map/map.cpp b/src/mbgl/map/map.cpp index 324bcc8b5d..bfedfe1326 100644 --- a/src/mbgl/map/map.cpp +++ b/src/mbgl/map/map.cpp @@ -687,14 +687,22 @@ void Map::Impl::onInvalidate() { } void Map::Impl::onUpdate(Update flags) { - TimePoint timePoint = mode == MapMode::Continuous ? Clock::now() : Clock::time_point::max(); - - transform.updateTransitions(timePoint); - if (flags & Update::AnnotationData) { annotationManager.updateData(); } + // Avoid redundant update calls in still mode if: + // - It has not been explicitly requested (no still image request); or + // - Style is not loaded yet + if (mode == MapMode::Still + && (!stillImageRequest || !style->impl->isLoaded())) { + return; + } + + TimePoint timePoint = mode == MapMode::Continuous ? Clock::now() : Clock::time_point::max(); + + transform.updateTransitions(timePoint); + UpdateParameters params = { style->impl->isLoaded(), mode, diff --git a/src/mbgl/renderer/renderer_impl.cpp b/src/mbgl/renderer/renderer_impl.cpp index 21ff8ed478..780a30f271 100644 --- a/src/mbgl/renderer/renderer_impl.cpp +++ b/src/mbgl/renderer/renderer_impl.cpp @@ -67,9 +67,14 @@ void Renderer::Impl::setObserver(RendererObserver* observer_) { } void Renderer::Impl::render(const UpdateParameters& updateParameters) { - // Don't load/render anyting in still mode until explicitly requested. - if (updateParameters.mode == MapMode::Still && !updateParameters.stillImageRequest) return; - + // Avoid redundant render calls in still mode if: + // - It has not been explicitly requested (no still image request); or + // - Style is not loaded yet + if (updateParameters.mode == MapMode::Still + && (!updateParameters.stillImageRequest || !updateParameters.styleLoaded)) { + return; + } + assert(BackendScope::exists()); const bool zoomChanged = zoomHistory.update(updateParameters.transformState.getZoom(), updateParameters.timePoint); |