diff options
author | Ivo van Dongen <info@ivovandongen.nl> | 2016-06-23 16:39:27 +0200 |
---|---|---|
committer | Ivo van Dongen <ivovandongen@users.noreply.github.com> | 2016-11-27 18:50:24 +0200 |
commit | c810d16f0d2787f15e06651ea595020415d5a8d5 (patch) | |
tree | 216b098897a887f5c1a8fff0aa78350e75445e52 /platform | |
parent | 5ae92de618e5242f6a8a30485b5ecaa9ef0ebb5e (diff) | |
download | qtlocation-mapboxgl-c810d16f0d2787f15e06651ea595020415d5a8d5.tar.gz |
[android][build] core tests - initial setup for rendering tests
Diffstat (limited to 'platform')
-rw-r--r-- | platform/android/config.cmake | 206 | ||||
-rwxr-xr-x | platform/android/src/jni.cpp | 12 | ||||
-rw-r--r-- | platform/android/src/jni.hpp | 6 | ||||
-rw-r--r-- | platform/android/src/main.cpp | 9 | ||||
-rw-r--r-- | platform/android/src/test/Main.java | 15 | ||||
-rw-r--r-- | platform/android/src/test/main.jni.cpp | 76 |
6 files changed, 252 insertions, 72 deletions
diff --git a/platform/android/config.cmake b/platform/android/config.cmake index 9156054de0..3ab695e7e1 100644 --- a/platform/android/config.cmake +++ b/platform/android/config.cmake @@ -1,5 +1,7 @@ add_definitions(-DMBGL_USE_GLES2=1) +include(cmake/test-files.cmake) + #Include to use build specific variables include(${CMAKE_CURRENT_BINARY_DIR}/toolchain.cmake) @@ -15,6 +17,9 @@ mason_use(libpng VERSION 1.6.25) mason_use(libzip VERSION 1.1.3) mason_use(nunicode VERSION 1.7.1) mason_use(sqlite VERSION 3.14.2) +mason_use(gtest VERSION 1.7.0) + +## mbgl core ## macro(mbgl_platform_core) @@ -52,12 +57,72 @@ macro(mbgl_platform_core) PRIVATE platform/default/png_reader.cpp PRIVATE platform/default/jpeg_reader.cpp - # Headless view - # TODO - # Thread pool PRIVATE platform/default/mbgl/util/default_thread_pool.cpp - PRIVATE platform/default/mbgl/util/default_thread_pool.cpp + PRIVATE platform/default/mbgl/util/default_thread_pool.hpp + + # Conversion C++ -> Java + platform/android/src/conversion/constant.hpp + platform/android/src/conversion/conversion.hpp + platform/android/src/style/conversion/function.hpp + platform/android/src/style/conversion/property_value.hpp + platform/android/src/style/conversion/types.hpp + platform/android/src/style/conversion/types_string_values.hpp + + # Style conversion Java -> C++ + platform/android/src/style/android_conversion.hpp + platform/android/src/style/conversion/geojson.hpp + platform/android/src/style/value.cpp + platform/android/src/style/value.hpp + platform/android/src/style/conversion/url_or_tileset.hpp + + # Style + platform/android/src/style/layers/background_layer.cpp + platform/android/src/style/layers/background_layer.hpp + platform/android/src/style/layers/circle_layer.cpp + platform/android/src/style/layers/circle_layer.hpp + platform/android/src/style/layers/custom_layer.cpp + platform/android/src/style/layers/custom_layer.hpp + platform/android/src/style/layers/fill_layer.cpp + platform/android/src/style/layers/fill_layer.hpp + platform/android/src/style/layers/layer.cpp + platform/android/src/style/layers/layer.hpp + platform/android/src/style/layers/layers.cpp + platform/android/src/style/layers/layers.hpp + platform/android/src/style/layers/line_layer.cpp + platform/android/src/style/layers/line_layer.hpp + platform/android/src/style/layers/raster_layer.cpp + platform/android/src/style/layers/raster_layer.hpp + platform/android/src/style/layers/symbol_layer.cpp + platform/android/src/style/layers/symbol_layer.hpp + platform/android/src/style/sources/geojson_source.cpp + platform/android/src/style/sources/geojson_source.hpp + platform/android/src/style/sources/source.cpp + platform/android/src/style/sources/source.hpp + platform/android/src/style/sources/sources.cpp + platform/android/src/style/sources/sources.hpp + platform/android/src/style/sources/raster_source.cpp + platform/android/src/style/sources/raster_source.hpp + platform/android/src/style/sources/vector_source.cpp + platform/android/src/style/sources/vector_source.hpp + + # Connectivity + platform/android/src/connectivity_listener.cpp + platform/android/src/connectivity_listener.hpp + + # Native map + platform/android/src/native_map_view.cpp + platform/android/src/native_map_view.hpp + + # Main jni bindings + platform/android/src/attach_env.cpp + platform/android/src/attach_env.hpp + platform/android/src/java_types.cpp + platform/android/src/java_types.hpp + + # Main entry point + platform/android/src/jni.hpp + platform/android/src/jni.cpp ) target_include_directories(mbgl-core @@ -71,6 +136,7 @@ macro(mbgl_platform_core) target_add_mason_package(mbgl-core PUBLIC libzip) target_add_mason_package(mbgl-core PUBLIC geojson) target_add_mason_package(mbgl-core PUBLIC jni.hpp) + target_add_mason_package(mbgl-core PUBLIC rapidjson) target_compile_options(mbgl-core PRIVATE -fvisibility=hidden @@ -91,71 +157,12 @@ macro(mbgl_platform_core) ) endmacro() +## Main library ## + add_library(mapbox-gl SHARED - # Conversion C++ -> Java - platform/android/src/conversion/constant.hpp - platform/android/src/conversion/conversion.hpp - platform/android/src/style/conversion/function.hpp - platform/android/src/style/conversion/property_value.hpp - platform/android/src/style/conversion/types.hpp - platform/android/src/style/conversion/types_string_values.hpp - - # Style conversion Java -> C++ - platform/android/src/style/android_conversion.hpp - platform/android/src/style/conversion/geojson.hpp - platform/android/src/style/value.cpp - platform/android/src/style/value.hpp - platform/android/src/style/conversion/url_or_tileset.hpp - - # Style - platform/android/src/style/layers/background_layer.cpp - platform/android/src/style/layers/background_layer.hpp - platform/android/src/style/layers/circle_layer.cpp - platform/android/src/style/layers/circle_layer.hpp - platform/android/src/style/layers/custom_layer.cpp - platform/android/src/style/layers/custom_layer.hpp - platform/android/src/style/layers/fill_layer.cpp - platform/android/src/style/layers/fill_layer.hpp - platform/android/src/style/layers/layer.cpp - platform/android/src/style/layers/layer.hpp - platform/android/src/style/layers/layers.cpp - platform/android/src/style/layers/layers.hpp - platform/android/src/style/layers/line_layer.cpp - platform/android/src/style/layers/line_layer.hpp - platform/android/src/style/layers/raster_layer.cpp - platform/android/src/style/layers/raster_layer.hpp - platform/android/src/style/layers/symbol_layer.cpp - platform/android/src/style/layers/symbol_layer.hpp - platform/android/src/style/sources/geojson_source.cpp - platform/android/src/style/sources/geojson_source.hpp - platform/android/src/style/sources/source.cpp - platform/android/src/style/sources/source.hpp - platform/android/src/style/sources/sources.cpp - platform/android/src/style/sources/sources.hpp - platform/android/src/style/sources/raster_source.cpp - platform/android/src/style/sources/raster_source.hpp - platform/android/src/style/sources/vector_source.cpp - platform/android/src/style/sources/vector_source.hpp - - # Native map - platform/android/src/native_map_view.cpp - platform/android/src/native_map_view.hpp - - # Connectivity - platform/android/src/connectivity_listener.cpp - platform/android/src/connectivity_listener.hpp - - # Main jni bindings - platform/android/src/jni.cpp - platform/android/src/jni.hpp - platform/android/src/attach_env.cpp - platform/android/src/attach_env.hpp - platform/android/src/java_types.cpp - platform/android/src/java_types.hpp + platform/android/src/main.cpp ) -target_add_mason_package(mapbox-gl PUBLIC rapidjson) - target_compile_options(mapbox-gl PRIVATE -fvisibility=hidden PRIVATE -ffunction-sections @@ -168,6 +175,62 @@ target_link_libraries(mapbox-gl PUBLIC -Wl,--gc-sections ) +## Test library ## + +add_library(mbgl-test SHARED + # Actual tests + ${MBGL_TEST_FILES} + + # Main test entry point + platform/android/src/test/main.jni.cpp + +) + +target_sources(mbgl-test + # Headless view + PRIVATE platform/default/mbgl/gl/headless_backend.cpp + PRIVATE platform/default/mbgl/gl/headless_backend.hpp + PRIVATE platform/default/mbgl/gl/offscreen_view.cpp + PRIVATE platform/default/mbgl/gl/offscreen_view.hpp + + PRIVATE platform/linux/src/headless_backend_egl.cpp + PRIVATE platform/linux/src/headless_display_egl.cpp +) + +target_compile_options(mbgl-test + PRIVATE -fvisibility=hidden + PRIVATE -Os +) + +target_compile_definitions(mbgl-test + PRIVATE MBGL_ASSET_ZIP=1 +) + +target_include_directories(mbgl-test + PRIVATE include + PRIVATE src # TODO: eliminate + PRIVATE test/include + PRIVATE test/src + PRIVATE platform/default + PRIVATE ${MBGL_GENERATED}/include +) + +target_link_libraries(mbgl-test + PRIVATE mbgl-core +) + +target_add_mason_package(mbgl-test PRIVATE geometry) +target_add_mason_package(mbgl-test PRIVATE variant) +target_add_mason_package(mbgl-test PRIVATE unique_resource) +target_add_mason_package(mbgl-test PRIVATE rapidjson) +target_add_mason_package(mbgl-test PRIVATE gtest) +target_add_mason_package(mbgl-test PRIVATE pixelmatch) +target_add_mason_package(mbgl-test PRIVATE boost) +target_add_mason_package(mbgl-test PRIVATE geojson) +target_add_mason_package(mbgl-test PRIVATE geojsonvt) + +## Custom layer example ## + add_library(example-custom-layer SHARED platform/android/src/example_custom_layer.cpp ) @@ -184,6 +247,8 @@ target_link_libraries(example-custom-layer PUBLIC -Wl,--gc-sections ) +## Strip and copy ## + set(ANDROID_SDK_PROJECT_DIR ${CMAKE_SOURCE_DIR}/platform/android/MapboxGLAndroidSDK) set(ANDROID_JNI_TARGET_DIR ${ANDROID_SDK_PROJECT_DIR}/src/main/jniLibs/${ANDROID_JNIDIR}/) set(ANDROID_ASSETS_TARGET_DIR ${ANDROID_SDK_PROJECT_DIR}/src/main/assets/) @@ -203,8 +268,17 @@ add_custom_target(copy-files COMMAND ${STRIP_COMMAND} $<TARGET_FILE:example-custom-layer> -o ${ANDROID_TEST_APP_JNI_TARGET_DIR}$<TARGET_FILE_NAME:example-custom-layer> ) +add_custom_target(mbgl-test-stripped + DEPENDS mapbox-gl + DEPENDS mbgl-test + COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/stripped + COMMAND ${STRIP_COMMAND} $<TARGET_FILE:mapbox-gl> -o ${CMAKE_CURRENT_BINARY_DIR}/stripped/$<TARGET_FILE_NAME:mapbox-gl> + COMMAND ${STRIP_COMMAND} $<TARGET_FILE:mbgl-test> -o ${CMAKE_CURRENT_BINARY_DIR}/stripped/$<TARGET_FILE_NAME:mbgl-test> +) + add_custom_target(_all ALL DEPENDS mapbox-gl + DEPENDS mbgl-test DEPENDS example-custom-layer DEPENDS copy-files ) diff --git a/platform/android/src/jni.cpp b/platform/android/src/jni.cpp index 0c740d7fdd..5471fb5508 100755 --- a/platform/android/src/jni.cpp +++ b/platform/android/src/jni.cpp @@ -1703,9 +1703,12 @@ void updateOfflineRegionMetadata(JNIEnv *env, jni::jobject* offlineRegion_, jni: // Offline calls end -} +} // anonymous -extern "C" JNIEXPORT jint JNI_OnLoad(JavaVM *vm, void *reserved) { +namespace mbgl { +namespace android { + +void registerNatives(JavaVM *vm) { theJVM = vm; jni::JNIEnv& env = jni::GetEnv(*vm, jni::jni_version_1_6); @@ -1988,6 +1991,7 @@ extern "C" JNIEXPORT jint JNI_OnLoad(JavaVM *vm, void *reserved) { char release[PROP_VALUE_MAX] = ""; __system_property_get("ro.build.version.release", release); androidRelease = std::string(release); - - return JNI_VERSION_1_6; } + +} // android +} // mbgl diff --git a/platform/android/src/jni.hpp b/platform/android/src/jni.hpp index 0810ee656d..90ec914cf2 100644 --- a/platform/android/src/jni.hpp +++ b/platform/android/src/jni.hpp @@ -23,6 +23,8 @@ extern jmethodID onSnapshotReadyId; extern bool attach_jni_thread(JavaVM* vm, JNIEnv** env, std::string threadName); extern void detach_jni_thread(JavaVM* vm, JNIEnv** env, bool detach); + +extern void registerNatives(JavaVM* vm); -} -} +} //android +} //mbgl diff --git a/platform/android/src/main.cpp b/platform/android/src/main.cpp new file mode 100644 index 0000000000..03a8288719 --- /dev/null +++ b/platform/android/src/main.cpp @@ -0,0 +1,9 @@ +#include "jni.hpp" +#include <jni/jni.hpp> + +extern "C" JNIEXPORT jint JNI_OnLoad(JavaVM *vm, void *) { + assert(vm != nullptr); + mbgl::android::registerNatives(vm); + return JNI_VERSION_1_6; +} + diff --git a/platform/android/src/test/Main.java b/platform/android/src/test/Main.java new file mode 100644 index 0000000000..2abcf2bfdb --- /dev/null +++ b/platform/android/src/test/Main.java @@ -0,0 +1,15 @@ + +public class Main { + public native void runAllTests(); + + public static void main(String[] args) throws Exception { + //Load the tests + System.loadLibrary("mbgl-test"); + + //Run the tests + new Main().runAllTests(); + + //Exit explicitly otherwise dalvikvm won't quit + System.exit(0); + } +} diff --git a/platform/android/src/test/main.jni.cpp b/platform/android/src/test/main.jni.cpp new file mode 100644 index 0000000000..d37b908202 --- /dev/null +++ b/platform/android/src/test/main.jni.cpp @@ -0,0 +1,76 @@ +#include "../jni.hpp" + +#include <android/log.h> +#include <jni/jni.hpp> + +#include <mbgl/util/logging.hpp> +#include <mbgl/test.hpp> + +#pragma clang diagnostic ignored "-Wunused-parameter" + +#define MAKE_NATIVE_METHOD(name, sig) jni::MakeNativeMethod<decltype(name), name>( #name, sig ) + +namespace { + +/** + * JNI Bound to Main#runAllTests() + */ +void runAllTests(JNIEnv *env, jni::jobject* obj) { + mbgl::Log::Info(mbgl::Event::JNI, "Starting tests"); + mbgl::runTests(0, nullptr); +} + +} + +// JNI Bindings to stub the android.util.Log implementation + +static jboolean isLoggable(JNIEnv* env, jni::jobject* clazz, jni::jstring* tag, jint level) { + return true; +} + +static jint println_native(JNIEnv* env, jni::jobject* clazz, jint bufID, jint priority, jni::jstring* jtag, jni::jstring* jmessage) { + if (jtag == nullptr || jmessage == nullptr) { + return false; + } + + std::string tag = jni::Make<std::string>(*env, jni::String(jtag)); + std::string message = jni::Make<std::string>(*env, jni::String(jmessage)); + + return __android_log_print(priority, tag.c_str(), "%s", message.c_str()); +} + +static jint logger_entry_max_payload_native(JNIEnv* env, jni::jobject* clazz) { + return static_cast<jint>(4068); +} + + +// Main entry point + +extern "C" JNIEXPORT jint JNI_OnLoad(JavaVM *vm, void *reserved) { + //Load the main library jni bindings + mbgl::Log::Info(mbgl::Event::JNI, "Registering main JNI Methods"); + mbgl::android::registerNatives(vm); + + //Load the test library jni bindings + mbgl::Log::Info(mbgl::Event::JNI, "Registering test JNI Methods"); + + jni::JNIEnv& env = jni::GetEnv(*vm, jni::jni_version_1_6); + + //Main class (entry point for tests from dalvikvm) + struct Main { static constexpr auto Name() { return "Main"; } }; + jni::RegisterNatives(env, jni::Class<Main>::Find(env), MAKE_NATIVE_METHOD(runAllTests, "()V")); + + //Bindings for system classes + struct Log { static constexpr auto Name() { return "android/util/Log"; } }; + try { + jni::RegisterNatives(env, jni::Class<Log>::Find(env), + MAKE_NATIVE_METHOD(isLoggable, "(Ljava/lang/String;I)Z"), + MAKE_NATIVE_METHOD(logger_entry_max_payload_native, "()I"), + MAKE_NATIVE_METHOD(println_native, "(IILjava/lang/String;Ljava/lang/String;)I") + ); + } catch (jni::PendingJavaException ex) { + env.ThrowNew(jni::JavaErrorClass(env), "Could not register Log mocks"); + } + + return JNI_VERSION_1_6; +} |