summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruno de Oliveira Abinader <bruno@mapbox.com>2017-08-29 15:52:59 +0300
committerBruno de Oliveira Abinader <bruno@mapbox.com>2017-08-29 15:53:41 +0300
commit1531b8235e47f48d0cb4e04590b847660158dee7 (patch)
treeb444fc2cbbffbd10302768ea28ae34f42e7818e0
parent833ab66a0ea45e5efc2da915f723b281e8c23c59 (diff)
downloadqtlocation-mapboxgl-upstream/still-mode-optimizations.tar.gz
[core] Avoid redundant update/render calls in still modeupstream/still-mode-optimizations
-rw-r--r--src/mbgl/map/map.cpp16
-rw-r--r--src/mbgl/renderer/renderer_impl.cpp11
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);