diff options
Diffstat (limited to 'platform/android/src')
-rw-r--r-- | platform/android/src/android_gl_thread.hpp | 18 | ||||
-rw-r--r-- | platform/android/src/android_renderer_frontend.cpp | 17 | ||||
-rw-r--r-- | platform/android/src/android_renderer_frontend.hpp | 7 | ||||
-rwxr-xr-x | platform/android/src/native_map_view.cpp | 24 | ||||
-rwxr-xr-x | platform/android/src/native_map_view.hpp | 10 |
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); |