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-18 10:07:04 +0300
commit9ff0b739c8bbdf53aa3369e83f2551288bcb7f1c (patch)
tree2545f754e02b878642c29db7a3a106ab0686be88
parentcf0600694f2a8d2d78b3ca10d4b2f60464fbc692 (diff)
downloadqtlocation-mapboxgl-9ff0b739c8bbdf53aa3369e83f2551288bcb7f1c.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 443492fae7..fdda8f6f89 100644
--- a/platform/android/src/android_renderer_frontend.cpp
+++ b/platform/android/src/android_renderer_frontend.cpp
@@ -97,14 +97,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 (glThread);
- 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;
+ }
// Process the gl thread mailbox
glThread->process();
@@ -121,7 +134,7 @@ void AndroidRendererFrontend::render() {
framebufferSizeChanged = false;
}
- glThread->renderer->render(*updateParameters);
+ glThread->renderer->render(*params);
}
void AndroidRendererFrontend::onLowMemory() {
diff --git a/platform/android/src/android_renderer_frontend.hpp b/platform/android/src/android_renderer_frontend.hpp
index 55cbf8c0b1..f2e951bd05 100644
--- a/platform/android/src/android_renderer_frontend.hpp
+++ b/platform/android/src/android_renderer_frontend.hpp
@@ -67,7 +67,11 @@ private:
std::unique_ptr<AndroidRendererBackend> backend;
std::unique_ptr<AndroidGLThread> glThread;
std::unique_ptr<RendererObserver> rendererObserver;
+
+ std::mutex updateMutex;
std::shared_ptr<UpdateParameters> updateParameters;
+
+
util::AsyncTask asyncInvalidate;
util::RunLoop* mapRunLoop;