diff options
author | zmiao <miao.zhao@mapbox.com> | 2019-10-16 19:43:44 +0300 |
---|---|---|
committer | zmiao <miao.zhao@mapbox.com> | 2019-10-17 16:18:15 +0300 |
commit | f1e9f6ed0259fbec01f12e69b00ea4b5305403ea (patch) | |
tree | 45201df29530105607e20897c82fcb70e252e49a | |
parent | 1e9f490df1d02fa4b87e4f1f8a0d4d32d9df1e82 (diff) | |
download | qtlocation-mapboxgl-f1e9f6ed0259fbec01f12e69b00ea4b5305403ea.tar.gz |
[test-runner]making render test runnning on android as an app
-rw-r--r-- | next/platform/android/android.cmake | 38 | ||||
-rw-r--r-- | next/render-test/CMakeLists.txt | 6 | ||||
-rw-r--r-- | platform/android/src/test/render_test_runner.cpp | 104 |
3 files changed, 138 insertions, 10 deletions
diff --git a/next/platform/android/android.cmake b/next/platform/android/android.cmake index 1bde72d11d..15f9e9220b 100644 --- a/next/platform/android/android.cmake +++ b/next/platform/android/android.cmake @@ -40,8 +40,6 @@ target_sources( ${MBGL_ROOT}/platform/android/src/conversion/constant.cpp ${MBGL_ROOT}/platform/android/src/conversion/constant.hpp ${MBGL_ROOT}/platform/android/src/conversion/conversion.hpp - ${MBGL_ROOT}/platform/android/src/file_source.cpp - ${MBGL_ROOT}/platform/android/src/file_source.hpp ${MBGL_ROOT}/platform/android/src/geojson/feature.cpp ${MBGL_ROOT}/platform/android/src/geojson/feature.hpp ${MBGL_ROOT}/platform/android/src/geojson/feature_collection.cpp @@ -98,9 +96,6 @@ target_sources( ${MBGL_ROOT}/platform/android/src/jni.hpp ${MBGL_ROOT}/platform/android/src/jni_native.cpp ${MBGL_ROOT}/platform/android/src/jni_native.hpp - ${MBGL_ROOT}/platform/android/src/logger.cpp - ${MBGL_ROOT}/platform/android/src/logger.hpp - ${MBGL_ROOT}/platform/android/src/logging_android.cpp ${MBGL_ROOT}/platform/android/src/mapbox.cpp ${MBGL_ROOT}/platform/android/src/mapbox.hpp ${MBGL_ROOT}/platform/android/src/map/camera_position.cpp @@ -193,14 +188,14 @@ target_sources( ${MBGL_ROOT}/platform/android/src/style/transition_options.hpp ${MBGL_ROOT}/platform/android/src/style/value.cpp ${MBGL_ROOT}/platform/android/src/style/value.hpp - ${MBGL_ROOT}/platform/android/src/text/local_glyph_rasterizer.cpp - ${MBGL_ROOT}/platform/android/src/text/local_glyph_rasterizer_jni.hpp ${MBGL_ROOT}/platform/android/src/thread.cpp ${MBGL_ROOT}/platform/android/src/timer.cpp + ${MBGL_ROOT}/platform/default/src/mbgl/text/local_glyph_rasterizer.cpp ${MBGL_ROOT}/platform/default/src/mbgl/gfx/headless_backend.cpp ${MBGL_ROOT}/platform/default/src/mbgl/gfx/headless_frontend.cpp ${MBGL_ROOT}/platform/default/src/mbgl/gl/headless_backend.cpp ${MBGL_ROOT}/platform/default/src/mbgl/map/map_snapshotter.cpp + ${MBGL_ROOT}/platform/default/src/mbgl/storage/file_source.cpp ${MBGL_ROOT}/platform/default/src/mbgl/storage/asset_file_source.cpp ${MBGL_ROOT}/platform/default/src/mbgl/storage/default_file_source.cpp ${MBGL_ROOT}/platform/default/src/mbgl/storage/file_source_request.cpp @@ -244,6 +239,13 @@ target_link_libraries( add_library( mapbox-gl SHARED + ${MBGL_ROOT}/platform/android/src/logger.cpp + ${MBGL_ROOT}/platform/android/src/logger.hpp + ${MBGL_ROOT}/platform/android/src/logging_android.cpp + ${MBGL_ROOT}/platform/android/src/text/local_glyph_rasterizer.cpp + ${MBGL_ROOT}/platform/android/src/text/local_glyph_rasterizer_jni.hpp + ${MBGL_ROOT}/platform/android/src/file_source.cpp + ${MBGL_ROOT}/platform/android/src/file_source.hpp ${MBGL_ROOT}/platform/android/src/main.cpp ) @@ -295,12 +297,34 @@ target_link_libraries( PRIVATE Mapbox::Base::jni.hpp mapbox-gl mbgl-benchmark ) +add_library( + mbgl-render-test-runner SHARED + ${MBGL_ROOT}/platform/android/src/test/render_test_runner.cpp ${ANDROID_NDK}/sources/android/native_app_glue/android_native_app_glue.c +) + +target_include_directories( + mbgl-render-test-runner + PRIVATE ${ANDROID_NDK}/sources/android/native_app_glue ${MBGL_ROOT}/platform/android/src ${MBGL_ROOT}/include +) + +target_link_libraries( + mbgl-render-test-runner + PRIVATE + Mapbox::Base::jni.hpp + mbgl-render-test + android + log + Mapbox::Base::geometry.hpp + Mapbox::Base::variant +) + # Android has no concept of MinSizeRel on android.toolchain.cmake and provides configurations tuned for binary size. We can push it a bit # more with code folding and LTO. set_target_properties(example-custom-layer PROPERTIES LINK_FLAGS_RELEASE "-fuse-ld=gold -O2 -flto -Wl,--icf=safe") set_target_properties(mapbox-gl PROPERTIES LINK_FLAGS_RELEASE "-fuse-ld=gold -O2 -flto -Wl,--icf=safe") set_target_properties(mbgl-benchmark-runner PROPERTIES LINK_FLAGS_RELEASE "-fuse-ld=gold -O2 -flto -Wl,--icf=safe") set_target_properties(mbgl-test-runner PROPERTIES LINK_FLAGS_RELEASE "-fuse-ld=gold -O2 -flto -Wl,--icf=safe") +set_target_properties(mbgl-render-test-runner PROPERTIES LINK_FLAGS_RELEASE "-fuse-ld=gold -O2 -flto -Wl,--icf=safe") target_compile_options(example-custom-layer PRIVATE $<$<CONFIG:Release>:-Qunused-arguments -flto>) target_compile_options(mapbox-gl PRIVATE $<$<CONFIG:Release>:-Qunused-arguments -flto>) diff --git a/next/render-test/CMakeLists.txt b/next/render-test/CMakeLists.txt index 09767494c7..5b609b8a99 100644 --- a/next/render-test/CMakeLists.txt +++ b/next/render-test/CMakeLists.txt @@ -1,5 +1,5 @@ add_library( - mbgl-render-test SHARED EXCLUDE_FROM_ALL + mbgl-render-test STATIC EXCLUDE_FROM_ALL ${MBGL_ROOT}/expression-test/test_runner_common.cpp ${MBGL_ROOT}/expression-test/test_runner_common.hpp ${MBGL_ROOT}/render-test/allocation_index.cpp @@ -24,12 +24,12 @@ target_compile_definitions( # FIXME: Should not use core private interface target_include_directories( mbgl-render-test - PRIVATE ${MBGL_ROOT}/src + PRIVATE ${MBGL_ROOT}/src ${MBGL_ROOT}/platform/default/include ) target_include_directories( mbgl-render-test - PUBLIC ${MBGL_ROOT}/render-test/include ${MBGL_ROOT}/include + PUBLIC ${MBGL_ROOT}/render-test/include ) target_include_directories( diff --git a/platform/android/src/test/render_test_runner.cpp b/platform/android/src/test/render_test_runner.cpp new file mode 100644 index 0000000000..c1ffbc81bf --- /dev/null +++ b/platform/android/src/test/render_test_runner.cpp @@ -0,0 +1,104 @@ + +#include "jni.hpp" +#include "logger.hpp" +#include <mbgl/render_test.hpp> +#include <android_native_app_glue.h> + +#include <string> +#include <vector> + +#include <mbgl/util/logging.hpp> + +#include <android/log.h> + + +// Find a class, attempting to load the class if it's not found. +jclass LoadClass(JNIEnv* env, jobject activity_object, const char* class_name) { + jclass class_object = env->FindClass(class_name); + if (env->ExceptionCheck()) { + env->ExceptionClear(); + // If the class isn't found it's possible NativeActivity is being used by + // the application which means the class path is set to only load system + // classes. The following falls back to loading the class using the + // Activity before retrieving a reference to it. +// jclass activity_class = env->FindClass("android/app/NativeActivity"); + jclass activity_class = env->GetObjectClass(activity_object); + jmethodID activity_get_class_loader = env->GetMethodID( + activity_class, "getClassLoader", "()Ljava/lang/ClassLoader;"); + + jobject class_loader_object = + env->CallObjectMethod(activity_object, activity_get_class_loader); + + jclass class_loader_class = env->FindClass("java/lang/ClassLoader"); + jmethodID class_loader_load_class = + env->GetMethodID(class_loader_class, "loadClass", + "(Ljava/lang/String;)Ljava/lang/Class;"); + jstring class_name_object = env->NewStringUTF(class_name); + + class_object = static_cast<jclass>(env->CallObjectMethod( + class_loader_object, class_loader_load_class, class_name_object)); + + if (env->ExceptionCheck()) { + env->ExceptionClear(); + class_object = nullptr; + } + env->DeleteLocalRef(class_name_object); + env->DeleteLocalRef(class_loader_object); + } +// return class_object; +} + + + + +namespace mbgl { + + namespace { + + int severityToPriority(EventSeverity severity) { + switch(severity) { + case EventSeverity::Debug: + return ANDROID_LOG_DEBUG; + + case EventSeverity::Info: + return ANDROID_LOG_INFO; + + case EventSeverity::Warning: + return ANDROID_LOG_WARN; + + case EventSeverity::Error: + return ANDROID_LOG_ERROR; + + default: + return ANDROID_LOG_VERBOSE; + } + } + + } // namespace + + void Log::platformRecord(EventSeverity severity, const std::string &msg) { + __android_log_print(severityToPriority(severity), "mbgl", "%s", msg.c_str()); + + } + +} + + +void android_main(struct android_app* app) { + using FindClassFN = jclass (*)(JNIEnv*, const char*); + mbgl::android::theJVM= app->activity->vm; + JNIEnv* env; + app->activity->vm->AttachCurrentThread(&env, NULL); + // Logger + +// LoadClass(env, app->activity->clazz, mbgl::android::Logger::Name()); +// mbgl::android::Logger::registerNative(*env); + std::vector<std::string> arguments = {"runner","-p", "/sdcard/render-test"}; + std::vector<char*> argv; + for (const auto& arg : arguments) { + argv.push_back((char*) arg.data()); + } + argv.push_back(nullptr); + mbgl::runRenderTests(argv.size() - 1, argv.data()); + app->activity->vm->DetachCurrentThread(); +}
\ No newline at end of file |