diff options
author | Bruno de Oliveira Abinader <bruno@mapbox.com> | 2015-07-23 17:43:01 +0300 |
---|---|---|
committer | Bruno de Oliveira Abinader <bruno@mapbox.com> | 2015-07-23 17:43:05 +0300 |
commit | 3512da96093916b09d925d9a64957011de6af8dc (patch) | |
tree | 4cd0681fa3c95acfb9de5713464dd434373e624c /android | |
parent | 7b47fa8dab7ba65c62caa1e1bfc07d3b0b2451c8 (diff) | |
download | qtlocation-mapboxgl-3512da96093916b09d925d9a64957011de6af8dc.tar.gz |
Avoid nudging transitions if a gesture is in progress
We're now using nudgeTransitions() to tell the Map view that we want to
update it. However, if we're on a gesture movement, the update() call
can get called too fast and causing general slowdown. This check ensures
we only call for nudgeTransitions() after all gesture events are
finished. Fixes the issue pointed out by #1548 on Android.
Diffstat (limited to 'android')
4 files changed, 13 insertions, 9 deletions
diff --git a/android/cpp/jni.cpp b/android/cpp/jni.cpp index 7b585f2206..2f58b17226 100644 --- a/android/cpp/jni.cpp +++ b/android/cpp/jni.cpp @@ -378,11 +378,11 @@ void JNICALL nativeUpdate(JNIEnv *env, jobject obj, jlong nativeMapViewPtr) { nativeMapView->getMap().update(); } -void JNICALL nativeOnInvalidate(JNIEnv *env, jobject obj, jlong nativeMapViewPtr) { +void JNICALL nativeOnInvalidate(JNIEnv *env, jobject obj, jlong nativeMapViewPtr, jboolean inProgress) { mbgl::Log::Debug(mbgl::Event::JNI, "nativeOnInvalidate"); assert(nativeMapViewPtr != 0); NativeMapView *nativeMapView = reinterpret_cast<NativeMapView *>(nativeMapViewPtr); - nativeMapView->onInvalidate(); + nativeMapView->onInvalidate(inProgress); } void JNICALL nativeViewResize(JNIEnv *env, jobject obj, jlong nativeMapViewPtr, jint width, jint height) { @@ -1428,7 +1428,7 @@ extern "C" JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) { {"nativePause", "(J)V", reinterpret_cast<void *>(&nativePause)}, {"nativeResume", "(J)V", reinterpret_cast<void *>(&nativeResume)}, {"nativeUpdate", "(J)V", reinterpret_cast<void *>(&nativeUpdate)}, - {"nativeOnInvalidate", "(J)V", reinterpret_cast<void *>(&nativeOnInvalidate)}, + {"nativeOnInvalidate", "(JZ)V", reinterpret_cast<void *>(&nativeOnInvalidate)}, {"nativeViewResize", "(JII)V", reinterpret_cast<void *>(static_cast<void JNICALL ( *)(JNIEnv *, jobject, jlong, jint, jint)>(&nativeViewResize))}, diff --git a/android/cpp/native_map_view.cpp b/android/cpp/native_map_view.cpp index ebdc7f7f68..9c7a3efde7 100644 --- a/android/cpp/native_map_view.cpp +++ b/android/cpp/native_map_view.cpp @@ -758,12 +758,15 @@ void NativeMapView::updateFps() { env = nullptr; } -void NativeMapView::onInvalidate() { +void NativeMapView::onInvalidate(bool inProgress) { mbgl::Log::Debug(mbgl::Event::Android, "NativeMapView::onInvalidate()"); const bool dirty = !clean.test_and_set(); if (dirty) { - map.renderSync(); + const bool needsRerender = map.renderSync(); + if (!inProgress) { + map.nudgeTransitions(needsRerender); + } } } diff --git a/android/java/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxgl/views/MapView.java b/android/java/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxgl/views/MapView.java index 17ace87416..2357c557ed 100644 --- a/android/java/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxgl/views/MapView.java +++ b/android/java/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxgl/views/MapView.java @@ -1268,7 +1268,8 @@ public class MapView extends SurfaceView { post(new Runnable() { @Override public void run() { - mNativeMapView.invalidate(); + boolean inProgress = mRotateGestureDetector.isInProgress() || mScaleGestureDetector.isInProgress(); + mNativeMapView.invalidate(inProgress); } }); } diff --git a/android/java/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxgl/views/NativeMapView.java b/android/java/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxgl/views/NativeMapView.java index 8889e39af5..8a78515da3 100644 --- a/android/java/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxgl/views/NativeMapView.java +++ b/android/java/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxgl/views/NativeMapView.java @@ -88,8 +88,8 @@ class NativeMapView { nativeUpdate(mNativeMapViewPtr); } - public void invalidate() { - nativeOnInvalidate(mNativeMapViewPtr); + public void invalidate(boolean inProgress) { + nativeOnInvalidate(mNativeMapViewPtr, inProgress); } public void resizeView(int width, int height) { @@ -438,7 +438,7 @@ class NativeMapView { private native void nativeUpdate(long nativeMapViewPtr); - private native void nativeOnInvalidate(long nativeMapViewPtr); + private native void nativeOnInvalidate(long nativeMapViewPtr, boolean inProgress); private native void nativeViewResize(long nativeMapViewPtr, int width, int height); |