summaryrefslogtreecommitdiff
path: root/platform/android/src
diff options
context:
space:
mode:
Diffstat (limited to 'platform/android/src')
-rw-r--r--platform/android/src/android_gl_thread.hpp18
-rw-r--r--platform/android/src/android_renderer_frontend.cpp17
-rw-r--r--platform/android/src/android_renderer_frontend.hpp7
-rwxr-xr-xplatform/android/src/native_map_view.cpp24
-rwxr-xr-xplatform/android/src/native_map_view.hpp10
5 files changed, 46 insertions, 30 deletions
diff --git a/platform/android/src/android_gl_thread.hpp b/platform/android/src/android_gl_thread.hpp
index 1c2412d594..78777aa475 100644
--- a/platform/android/src/android_gl_thread.hpp
+++ b/platform/android/src/android_gl_thread.hpp
@@ -44,20 +44,18 @@ public:
// Only safe on the GL Thread
void process() {
- while (true) {
- std::unique_lock<std::mutex> lock(mutex);
+ std::unique_lock<std::mutex> lock(mutex);
- if (queue.empty()) {
- return;
- }
+ if (queue.empty()) {
+ return;
+ }
- auto scheduled = queue.front();
- queue.pop();
+ auto scheduled = queue.front();
+ queue.pop();
- lock.unlock();
+ lock.unlock();
- Mailbox::maybeReceive(scheduled);
- }
+ Mailbox::maybeReceive(scheduled);
}
// Only safe to access on the GL Thread
diff --git a/platform/android/src/android_renderer_frontend.cpp b/platform/android/src/android_renderer_frontend.cpp
index cdcd8eddfe..0619ba4cb5 100644
--- a/platform/android/src/android_renderer_frontend.cpp
+++ b/platform/android/src/android_renderer_frontend.cpp
@@ -58,10 +58,11 @@ AndroidRendererFrontend::AndroidRendererFrontend(float pixelRatio,
FileSource& fileSource,
Scheduler& scheduler,
std::string programCacheDir,
- InvalidateCallback invalidate)
+ RequestRenderCallback requestRender,
+ RequestProcessingCallback requestProcessing)
: backend(std::make_unique<AndroidRendererBackend>())
, glThread(std::make_unique<AndroidGLThread>(
- invalidate,
+ std::move(requestProcessing),
*backend,
pixelRatio,
fileSource,
@@ -69,8 +70,8 @@ AndroidRendererFrontend::AndroidRendererFrontend(float pixelRatio,
GLContextMode::Unique,
programCacheDir
))
- , asyncInvalidate([=]() {
- invalidate();
+ , asyncInvalidate([requestRender=std::move(requestRender)]() {
+ requestRender();
})
, mapRunLoop(util::RunLoop::Get()) {
}
@@ -112,9 +113,6 @@ void AndroidRendererFrontend::render() {
params = updateParameters;
}
- // Process the gl thread mailbox
- glThread->process();
-
// Activate the backend
BackendScope backendGuard { *backend };
@@ -130,6 +128,11 @@ void AndroidRendererFrontend::render() {
glThread->renderer->render(*params);
}
+void AndroidRendererFrontend::process() {
+ // Process the gl thread mailbox
+ glThread->process();
+}
+
void AndroidRendererFrontend::onLowMemory() {
assert (glThread);
glThread->actor().invoke(&Renderer::onLowMemory);
diff --git a/platform/android/src/android_renderer_frontend.hpp b/platform/android/src/android_renderer_frontend.hpp
index f2e951bd05..57bfd62b26 100644
--- a/platform/android/src/android_renderer_frontend.hpp
+++ b/platform/android/src/android_renderer_frontend.hpp
@@ -30,13 +30,15 @@ class AndroidRendererBackend;
class AndroidRendererFrontend : public RendererFrontend {
public:
- using InvalidateCallback = std::function<void ()>;
+ using RequestRenderCallback = std::function<void ()>;
+ using RequestProcessingCallback = std::function<void ()>;
AndroidRendererFrontend(float pixelRatio,
mbgl::FileSource&,
mbgl::Scheduler&,
std::string programCacheDir,
- InvalidateCallback);
+ RequestRenderCallback,
+ RequestProcessingCallback);
~AndroidRendererFrontend() override;
void reset() override;
@@ -46,6 +48,7 @@ public:
// Called from OpenGL Thread
void render();
+ void process();
// Feature querying
std::vector<Feature> queryRenderedFeatures(const ScreenCoordinate&, const RenderedQueryOptions&) const;
diff --git a/platform/android/src/native_map_view.cpp b/platform/android/src/native_map_view.cpp
index 1a0dc34bbc..51edd8079f 100755
--- a/platform/android/src/native_map_view.cpp
+++ b/platform/android/src/native_map_view.cpp
@@ -78,7 +78,8 @@ NativeMapView::NativeMapView(jni::JNIEnv& _env,
*threadPool,
jni::Make<std::string>(_env,
_programCacheDir),
- [this] { this->invalidate(); });
+ [this] { this->requestRender(); },
+ [this] { this->requestProcessing(); });
// Create the core map
map = std::make_unique<mbgl::Map>(*rendererFrontend, *this,
@@ -97,17 +98,23 @@ NativeMapView::~NativeMapView() {
}
/**
- * Callback to java NativeMapView#onInvalidate().
+ * Callback to java NativeMapView#requestRender().
*
- * Called to invalidate the View and schedule a render on the next
+ * Called to schedule a render on the next
* runloop iteration.
*/
-void NativeMapView::invalidate() {
+void NativeMapView::requestRender() {
android::UniqueEnv _env = android::AttachEnv();
- static auto onInvalidate = javaClass.GetMethod<void ()>(*_env, "onInvalidate");
+ static auto onInvalidate = javaClass.GetMethod<void ()>(*_env, "requestRender");
javaPeer->Call(*_env, onInvalidate);
}
+void NativeMapView::requestProcessing() {
+ android::UniqueEnv _env = android::AttachEnv();
+ static auto requestProcessing = javaClass.GetMethod<void ()>(*_env, "requestProcessing");
+ javaPeer->Call(*_env, requestProcessing);
+}
+
/**
* From mbgl::RendererBackend. Callback to java NativeMapView#onMapChanged(int).
*
@@ -195,8 +202,9 @@ void NativeMapView::render(jni::JNIEnv& ) {
updateFps();
}
-void NativeMapView::update(jni::JNIEnv&) {
- invalidate();
+// Called from the OpenGL renderer thread
+void NativeMapView::process(jni::JNIEnv&) {
+ rendererFrontend->process();
}
void NativeMapView::resizeView(jni::JNIEnv&, int w, int h) {
@@ -1004,7 +1012,7 @@ void NativeMapView::registerNative(jni::JNIEnv& env) {
"nativeInitialize",
"nativeDestroy",
METHOD(&NativeMapView::render, "nativeRender"),
- METHOD(&NativeMapView::update, "nativeUpdate"),
+ METHOD(&NativeMapView::process, "nativeProcess"),
METHOD(&NativeMapView::resizeView, "nativeResizeView"),
METHOD(&NativeMapView::resizeFramebuffer, "nativeResizeFramebuffer"),
METHOD(&NativeMapView::getStyleUrl, "nativeGetStyleUrl"),
diff --git a/platform/android/src/native_map_view.hpp b/platform/android/src/native_map_view.hpp
index 0539a29b46..7376f82c24 100755
--- a/platform/android/src/native_map_view.hpp
+++ b/platform/android/src/native_map_view.hpp
@@ -73,7 +73,10 @@ public:
void onSourceChanged(mbgl::style::Source&) override;
// Signal the view system, we want to redraw
- void invalidate();
+ void requestRender();
+
+ // Request processing on the GL Thread
+ void requestProcessing();
// JNI //
@@ -81,9 +84,10 @@ public:
void onSurfaceCreated(jni::JNIEnv&);
// Called on OpenGL Thread
- void render(jni::JNIEnv&);
+ void process(jni::JNIEnv&);
- void update(jni::JNIEnv&);
+ // Called on OpenGL Thread
+ void render(jni::JNIEnv&);
void resizeView(jni::JNIEnv&, int, int);