Skip to content
This repository has been archived by the owner on Aug 8, 2023. It is now read-only.

Commit

Permalink
[android] Make AndroidRendererFrontend to request render once per eve…
Browse files Browse the repository at this point in the history
…nt loop (#12586)

When AndroidRendererFrontend::update() called multiple times in a single loop, updateAsyncTask->send() will perform nothing, thus MapRenderer::update()/requestRender() will be coalesced.
  • Loading branch information
themics authored and tobrun committed Aug 21, 2018
1 parent 7fc872b commit 5297f56
Show file tree
Hide file tree
Showing 5 changed files with 34 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -197,6 +197,9 @@ public boolean onOptionsItemSelected(MenuItem item) {
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);
}
Expand Down Expand Up @@ -572,6 +575,16 @@ private void styleNumericFillLayer() {
}, 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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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>
Original file line number Diff line number Diff line change
Expand Up @@ -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>
Expand Down
11 changes: 8 additions & 3 deletions platform/android/src/android_renderer_frontend.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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>

Expand Down Expand Up @@ -56,7 +57,11 @@ class ForwardingRendererObserver : public RendererObserver {

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;
Expand All @@ -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() {
Expand Down
8 changes: 8 additions & 0 deletions platform/android/src/android_renderer_frontend.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,12 @@ namespace mbgl {
class RenderedQueryOptions;
class SourceQueryOptions;

namespace util {

class AsyncTask;

} // namespace util

namespace android {

class AndroidRendererFrontend : public RendererFrontend {
Expand All @@ -44,6 +50,8 @@ class AndroidRendererFrontend : public RendererFrontend {
private:
MapRenderer& mapRenderer;
util::RunLoop* mapRunLoop;
std::unique_ptr<util::AsyncTask> updateAsyncTask;
std::shared_ptr<UpdateParameters> updateParams;
};

} // namespace android
Expand Down

0 comments on commit 5297f56

Please sign in to comment.