summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKiyong Jung <autoexec.bat@navercorp.com>2018-08-16 19:32:20 +0900
committerTobrun <tobrun@mapbox.com>2018-08-21 11:53:05 +0200
commit5297f563a4dd6a9d25c7f45714d54d45897f3bb0 (patch)
treea0a029564babb80675c143b7fb12b748896cc7c6
parent7fc872b797679ae033a32246206efb06c98a0fd5 (diff)
downloadqtlocation-mapboxgl-5297f563a4dd6a9d25c7f45714d54d45897f3bb0.tar.gz
[android] Make AndroidRendererFrontend to request render once per event loop (#12586)
When AndroidRendererFrontend::update() called multiple times in a single loop, updateAsyncTask->send() will perform nothing, thus MapRenderer::update()/requestRender() will be coalesced.
-rw-r--r--platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/RuntimeStyleActivity.java13
-rw-r--r--platform/android/MapboxGLAndroidSDKTestApp/src/main/res/menu/menu_runtime_style.xml4
-rw-r--r--platform/android/MapboxGLAndroidSDKTestApp/src/main/res/values/actions.xml1
-rw-r--r--platform/android/src/android_renderer_frontend.cpp11
-rw-r--r--platform/android/src/android_renderer_frontend.hpp8
5 files changed, 34 insertions, 3 deletions
diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/RuntimeStyleActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/RuntimeStyleActivity.java
index f49d80d704..20fa2e7d52 100644
--- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/RuntimeStyleActivity.java
+++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/RuntimeStyleActivity.java
@@ -197,6 +197,9 @@ public class RuntimeStyleActivity extends AppCompatActivity {
case R.id.action_numeric_filter:
styleNumericFillLayer();
return true;
+ case R.id.action_bring_water_to_front:
+ bringWaterToFront();
+ return true;
default:
return super.onOptionsItemSelected(item);
}
@@ -572,6 +575,16 @@ public class RuntimeStyleActivity extends AppCompatActivity {
}, 2000);
}
+ private void bringWaterToFront() {
+ Layer water = mapboxMap.getLayer("water");
+ if (water != null) {
+ mapboxMap.removeLayer(water);
+ mapboxMap.addLayerAt(water, mapboxMap.getLayers().size() - 1);
+ } else {
+ Toast.makeText(this, "No water layer in this style", Toast.LENGTH_SHORT).show();
+ }
+ }
+
private static class DefaultCallback implements MapboxMap.CancelableCallback {
@Override
diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/menu/menu_runtime_style.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/menu/menu_runtime_style.xml
index 5c77179272..e3d7c8cfa0 100644
--- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/menu/menu_runtime_style.xml
+++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/menu/menu_runtime_style.xml
@@ -66,4 +66,8 @@
android:id="@+id/action_numeric_filter"
android:title="@string/apply_numeric_fill_filter"
mapbox:showAsAction="never" />
+ <item
+ android:id="@+id/action_bring_water_to_front"
+ android:title="@string/bring_water_to_front"
+ mapbox:showAsAction="never" />
</menu>
diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/values/actions.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/values/actions.xml
index 6d94c03529..e3cdc06dc1 100644
--- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/values/actions.xml
+++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/values/actions.xml
@@ -79,6 +79,7 @@
<string name="apply_filtered_fill">Apply filtered fill</string>
<string name="apply_filtered_line">Apply filtered line</string>
<string name="apply_numeric_fill_filter">Apply numeric fill filter</string>
+ <string name="bring_water_to_front">Bring water to front</string>
<string name="toggle_text_size">Toggle text size</string>
<string name="toggle_text_field_contents">Toggle text field contents</string>
<string name="toggle_text_font">Toggle text font</string>
diff --git a/platform/android/src/android_renderer_frontend.cpp b/platform/android/src/android_renderer_frontend.cpp
index 2a03d9de9e..8b4a25a4d9 100644
--- a/platform/android/src/android_renderer_frontend.cpp
+++ b/platform/android/src/android_renderer_frontend.cpp
@@ -4,6 +4,7 @@
#include <mbgl/renderer/renderer.hpp>
#include <mbgl/renderer/renderer_observer.hpp>
#include <mbgl/storage/file_source.hpp>
+#include <mbgl/util/async_task.hpp>
#include <mbgl/util/thread.hpp>
#include <mbgl/util/run_loop.hpp>
@@ -56,7 +57,11 @@ private:
AndroidRendererFrontend::AndroidRendererFrontend(MapRenderer& mapRenderer_)
: mapRenderer(mapRenderer_)
- , mapRunLoop(util::RunLoop::Get()) {
+ , mapRunLoop(util::RunLoop::Get())
+ , updateAsyncTask(std::make_unique<util::AsyncTask>([this]() {
+ mapRenderer.update(std::move(updateParams));
+ mapRenderer.requestRender();
+ })) {
}
AndroidRendererFrontend::~AndroidRendererFrontend() = default;
@@ -73,8 +78,8 @@ void AndroidRendererFrontend::setObserver(RendererObserver& observer) {
}
void AndroidRendererFrontend::update(std::shared_ptr<UpdateParameters> params) {
- mapRenderer.update(std::move(params));
- mapRenderer.requestRender();
+ updateParams = std::move(params);
+ updateAsyncTask->send();
}
void AndroidRendererFrontend::reduceMemoryUse() {
diff --git a/platform/android/src/android_renderer_frontend.hpp b/platform/android/src/android_renderer_frontend.hpp
index b61904e388..9bd64e4819 100644
--- a/platform/android/src/android_renderer_frontend.hpp
+++ b/platform/android/src/android_renderer_frontend.hpp
@@ -18,6 +18,12 @@ namespace mbgl {
class RenderedQueryOptions;
class SourceQueryOptions;
+namespace util {
+
+class AsyncTask;
+
+} // namespace util
+
namespace android {
class AndroidRendererFrontend : public RendererFrontend {
@@ -44,6 +50,8 @@ public:
private:
MapRenderer& mapRenderer;
util::RunLoop* mapRunLoop;
+ std::unique_ptr<util::AsyncTask> updateAsyncTask;
+ std::shared_ptr<UpdateParameters> updateParams;
};
} // namespace android