summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIvo van Dongen <info@ivovandongen.nl>2017-09-08 14:36:59 +0300
committerIvo van Dongen <info@ivovandongen.nl>2017-09-13 14:37:11 +0300
commitb186d61d927083be83882b1d1a33eedc64c58d90 (patch)
tree02103cc7d16d5f60fa37aabb1555dde3ba658eb1
parentbcaf2f886c86fccd70f3949e7c75bc6c6b7e3e97 (diff)
downloadqtlocation-mapboxgl-b186d61d927083be83882b1d1a33eedc64c58d90.tar.gz
[android] renderer frontend - add mutex to guard update parameters
- solves a bunch of crashes - solves the flikkering issue when zooming with pinch gestures
-rw-r--r--platform/android/src/android_renderer_frontend.cpp19
-rw-r--r--platform/android/src/android_renderer_frontend.hpp4
2 files changed, 20 insertions, 3 deletions
diff --git a/platform/android/src/android_renderer_frontend.cpp b/platform/android/src/android_renderer_frontend.cpp
index 73cb0a817e..6ad7872f89 100644
--- a/platform/android/src/android_renderer_frontend.cpp
+++ b/platform/android/src/android_renderer_frontend.cpp
@@ -98,14 +98,27 @@ void AndroidRendererFrontend::setObserver(RendererObserver& observer) {
}
void AndroidRendererFrontend::update(std::shared_ptr<UpdateParameters> params) {
- updateParameters = std::move(params);
+ {
+ // Lock on the parameters
+ std::lock_guard<std::mutex> lock(updateMutex);
+ updateParameters = std::move(params);
+ }
asyncInvalidate.send();
}
// Called on OpenGL thread
void AndroidRendererFrontend::render() {
assert (renderer);
- if (!updateParameters) return;
+
+ std::shared_ptr<UpdateParameters> params;
+ {
+ // Lock on the parameters
+ std::unique_lock<std::mutex> lock(updateMutex);
+ if (!updateParameters) return;
+
+ // Hold on to the update parameters during render
+ params = updateParameters;
+ }
// Activate the backend
BackendScope backendGuard { *backend };
@@ -122,7 +135,7 @@ void AndroidRendererFrontend::render() {
framebufferSizeChanged = false;
}
- rendererGuard.object().render(*updateParameters);
+ rendererGuard.object().render(*params);
}
void AndroidRendererFrontend::onLowMemory() {
diff --git a/platform/android/src/android_renderer_frontend.hpp b/platform/android/src/android_renderer_frontend.hpp
index ca7c27b196..36db705f2e 100644
--- a/platform/android/src/android_renderer_frontend.hpp
+++ b/platform/android/src/android_renderer_frontend.hpp
@@ -70,7 +70,11 @@ private:
std::unique_ptr<AndroidRendererBackend> backend;
std::unique_ptr<util::Thread<Renderer>> renderer;
std::unique_ptr<RendererObserver> rendererObserver;
+
+ std::mutex updateMutex;
std::shared_ptr<UpdateParameters> updateParameters;
+
+
util::AsyncTask asyncInvalidate;
util::RunLoop* mapRunLoop;