diff options
author | Ivo van Dongen <info@ivovandongen.nl> | 2017-09-14 21:23:07 +0300 |
---|---|---|
committer | Ivo van Dongen <ivovandongen@users.noreply.github.com> | 2017-09-22 23:33:56 +0300 |
commit | 5d12503302dff168137d6f3b1444e4dc32ad44dd (patch) | |
tree | 98128bdddb287c30b2c1445eb88d44e9a97d57ab /platform/android/src/map_renderer_runnable.hpp | |
parent | 15a47d116a0fc15d249b37574fcd932ce88909df (diff) | |
download | qtlocation-mapboxgl-5d12503302dff168137d6f3b1444e4dc32ad44dd.tar.gz |
[android] self-contained map renderer
- Isolates the GL thread in a MapRenderer class with a native peer
Diffstat (limited to 'platform/android/src/map_renderer_runnable.hpp')
-rw-r--r-- | platform/android/src/map_renderer_runnable.hpp | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/platform/android/src/map_renderer_runnable.hpp b/platform/android/src/map_renderer_runnable.hpp new file mode 100644 index 0000000000..75646a442d --- /dev/null +++ b/platform/android/src/map_renderer_runnable.hpp @@ -0,0 +1,50 @@ +#pragma once + +#include <mbgl/actor/mailbox.hpp> +#include <mbgl/actor/scheduler.hpp> + +#include <memory> +#include <utility> + +#include <jni/jni.hpp> + +#include "jni/generic_global_ref_deleter.hpp" + +namespace mbgl { +namespace android { + +/** + * The MapRendererRunnable is a peer class that encapsulates + * a scheduled mailbox in a Java Runnable so it can be + * scheduled on the map renderer thread. + * + */ +class MapRendererRunnable { +public: + + static constexpr auto Name() { return "com/mapbox/mapboxsdk/maps/renderer/MapRendererRunnable"; }; + + static jni::Class<MapRendererRunnable> javaClass; + + static void registerNative(jni::JNIEnv&); + + MapRendererRunnable(jni::JNIEnv&, std::weak_ptr<Mailbox>); + + // Only for jni registration, unused + MapRendererRunnable(jni::JNIEnv&) { + assert(false); + } + + ~MapRendererRunnable(); + + void run(jni::JNIEnv&); + + jni::Object<MapRendererRunnable> getPeer(); + +private: + GenericUniqueWeakObject<MapRendererRunnable> javaPeer; + std::weak_ptr<Mailbox> mailbox; +}; + +} // namespace android +} // namespace mbgl |